Cela devrait être trivial, et cela pourrait même être dans l'aide, mais je ne sais pas comment y naviguer. Comment mettre en retrait rapidement plusieurs lignes dans vi?
Cela devrait être trivial, et cela pourrait même être dans l'aide, mais je ne sais pas comment y naviguer. Comment mettre en retrait rapidement plusieurs lignes dans vi?
Réponses:
Utilisez la >commande. Pour mettre en retrait cinq lignes, 5>>. Pour marquer un bloc de lignes et le mettre en retrait, Vjj>mettre en retrait trois lignes (Vim uniquement). Pour mettre en retrait un bloc d'accolades, placez votre curseur sur l'un des accolades et utilisez >%ou depuis n'importe où à l'intérieur du bloc >iB.
Si vous copiez des blocs de texte et que vous devez aligner le retrait d'un bloc à son nouvel emplacement, utilisez ]pplutôt que juste p. Cela aligne le bloc collé avec le texte environnant.
En outre, le shiftwidth
paramètre vous permet de contrôler le nombre d'espaces à indenter.
shiftwidth
paramètre pour savoir comment changer cela.
Cette réponse résume les autres réponses et commentaires de cette question et ajoute des informations supplémentaires basées sur la documentation Vim et le wiki Vim . Par souci de concision, cette réponse ne fait pas de distinction entre les commandes spécifiques à Vi et à Vim.
Dans les commandes ci-dessous, "ré-indentation" signifie "indentation des lignes selon vos paramètres d'indentation ". shiftwidth
est la variable principale qui contrôle l'indentation.
Commandes générales
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
5>> Indent 5 lines
5== Re-indent 5 lines
>% Increase indent of a braced or bracketed block (place cursor on brace first)
=% Reindent a braced or bracketed block (cursor on brace)
<% Decrease indent of a braced or bracketed block (cursor on brace)
]p Paste text, aligning indentation with surroundings
=i{ Re-indent the 'inner block', i.e. the contents of the block
=a{ Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block
>i{ Increase inner block indent
<i{ Decrease inner block indent
Vous pouvez remplacer {
par }
ou B
, par exemple, =iB
est une commande de retrait de bloc valide. Jetez un oeil à "Retrait d'un bloc de code" pour un bel exemple pour essayer ces commandes.
N'oubliez pas non plus que
. Repeat last command
, de sorte que les commandes d'indentation peuvent être répétées facilement et commodément.
Ré-indentation de fichiers complets
Une autre situation courante exige que l'indentation soit corrigée dans un fichier source:
gg=G Re-indent entire buffer
Vous pouvez étendre cette idée à plusieurs fichiers:
" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall
Ou plusieurs tampons:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
En mode visuel
Vjj> Visually mark and then indent three lines
En mode insertion
Ces commandes s'appliquent à la ligne actuelle:
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
Commandes Ex
Ils sont utiles lorsque vous souhaitez mettre en retrait une plage spécifique de lignes, sans déplacer votre curseur.
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
Retrait à l'aide de marqueurs
Une autre approche consiste à utiliser des marqueurs :
ma Mark top of block to indent as marker 'a'
... déplacer le curseur vers la position finale
>'a Indent from marker 'a' to current location
Variables régissant l'indentation
Vous pouvez les définir dans votre fichier .vimrc .
set expandtab "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4 "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4 "Indent by 4 spaces when pressing <TAB>
set autoindent "Keep indentation from previous line
set smartindent "Automatically inserts indentation in some cases
set cindent "Like smartindent, but stricter and more customisable
Vim a une indentation intelligente basée sur le type de fichier. Essayez d'ajouter ceci à votre .vimrc:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Références
>}
. Merci beaucoup
Une grande sélection serait:
gg=G
C'est vraiment rapide, et tout est mis en retrait ;-)
gg=G
met simplement chaque ligne à partir de la position 1. Tous les espaces blancs ont été supprimés. Existe-t-il autre chose spécifique à XML?
set cindent
devrait être dans vimrc ou devrait s'exécuter :set cindent
avant d'exécuter cette commande
Essayez également cette option pour l' indentation en C. Faites :help =
pour plus d'informations:
={
Cela indentera automatiquement le bloc de code actuel dans lequel vous vous trouvez.
Ou juste:
==
pour indenter automatiquement la ligne actuelle.
Appuyez sur les touches pour plus de personnes visuelles:
Entrer en mode commande:
Escape
Déplacez-vous au début de la zone pour mettre en retrait:
hjkl↑↓←→
Démarrer un bloc:
v
Déplacez-vous jusqu'à la fin de la zone pour mettre en retrait:
hjkl↑↓←→
(Facultatif) Tapez le nombre de niveaux d'indentation que vous souhaitez
0..9
Exécutez le retrait sur le bloc:
>
Le maître de toutes les commandes est
gg=G
Cela indente l'intégralité du fichier!
Et voici quelques-unes des commandes simples et élégantes utilisées pour indenter rapidement des lignes dans Vim ou gVim.
Pour mettre en retrait la ligne actuelle
==
Pour mettre en retrait toutes les lignes sous la ligne actuelle
=G
Pour mettre en retrait des n
lignes sous la ligne actuelle
n==
Par exemple, pour mettre en retrait 4 lignes sous la ligne actuelle
4==
Pour mettre en retrait un bloc de code, accédez à l'un des accolades et utilisez la commande
=%
Ce sont les commandes les plus simples mais puissantes pour indenter plusieurs lignes.
vim
, non vi
.
vim
lien vers un vi
?
En plus de la réponse déjà donnée et acceptée, il est également possible de placer un marqueur puis de tout mettre en retrait du curseur actuel au marqueur.
Ainsi, entrez ma
où vous voulez le haut de votre bloc en retrait, faites glisser le curseur vers le bas autant que vous le souhaitez, puis tapez >'a
(notez que " a
" peut être remplacé par n'importe quel nom de marqueur valide). C'est parfois plus facile que 5>>
ou vjjj>
.
Aller au début du texte
En plus des solutions proposées, j'aime faire les choses un paragraphe à la fois avec >}
Lorsque vous sélectionnez un bloc et que vous utilisez >pour mettre en retrait, celui-ci revient ensuite en mode normal. J'ai ceci dans mon fichier .vimrc:
vnoremap < <gv
vnoremap > >gv
Il vous permet de mettre en retrait votre sélection autant de fois que vous le souhaitez.
Supposons que vous utilisez 2 espaces pour indenter votre code. Type:
:set shiftwidth=2
Alors:
Vous avez eu l'idée.
( Les lignes vides ne seront pas indentées, ce qui je pense est plutôt sympa. )
J'ai trouvé la réponse dans la documentation (g) vim pour les blocs en retrait:
:help visual-block
/indent
Si vous souhaitez donner un compte à la commande, faites-le juste avant de taper le caractère de l'opérateur: "v {move-around} 3>" (déplacez les lignes 3 retraits vers la droite).
La beauté de l'interface utilisateur de Vim réside dans sa cohérence. Les commandes d'édition sont composées de la commande et d'un déplacement du curseur. Les déplacements du curseur sont toujours les mêmes:
'
.Donc, pour utiliser vim, vous devez apprendre à déplacer le curseur et à vous souvenir d'un répertoire de commandes comme, par exemple, >mettre en retrait (et< "sortir").
Ainsi, pour mettre en retrait les lignes de la position du curseur vers le haut de l'écran que vous faites >H, >Gpour mettre en retrait vers le bas du fichier.
Si, au lieu de taper >H, vous tapez, dHvous supprimez le même bloc de lignes, cHpour le remplacer, etc.
Certains mouvements de curseur correspondent mieux à des commandes spécifiques. En particulier, la %commande est pratique pour indenter un bloc HTML ou XML entier. Si le fichier a la syntaxe en surbrillance ( :syn on
), placer le curseur dans le texte d'une balise (comme, dans le "i" de <div> et saisir>% va mettre en retrait jusqu'à la balise de fermeture </div>.
Voici comment fonctionne Vim: il suffit de se souvenir uniquement des mouvements du curseur et des commandes, et comment les mélanger. Donc, ma réponse à cette question serait "aller à une extrémité du bloc de lignes que vous souhaitez mettre en retrait, puis tapez la >commande et un mouvement à l'autre extrémité du bloc" si le retrait est interprété comme décalant les lignes, =si le retrait est interprété comme en jolie impression.
Faites ceci:
$vi .vimrc
Et ajoutez cette ligne:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
C'est uniquement pour un fichier cpp. Vous pouvez le faire pour un autre type de fichier, également en modifiant simplement le type de fichier ...
Vous pouvez utiliser la norm i
commande pour insérer un texte donné au début de la ligne. Pour insérer 10 espaces avant les lignes 2-10:
:2,10norm 10i
N'oubliez pas qu'il doit y avoir un caractère espace à la fin de la commande - ce sera le caractère que nous voulons insérer. Nous pouvons également mettre en retrait une ligne avec n'importe quel autre texte, par exemple pour mettre en retrait chaque ligne d'un fichier avec cinq caractères de soulignement:
:%norm 5i_
Ou quelque chose d'encore plus sophistiqué:
:%norm 2i[ ]
Un exemple plus pratique consiste à commenter le code Bash / Python / etc avec le caractère #:
:1,20norm i#
Pour ré-indenter l'utilisation xau lieu de i. Par exemple, pour supprimer les 5 premiers caractères de chaque ligne:
:%norm 5x
Un moyen rapide de le faire en utilisant VISUAL MODE
le même processus que de commenter un bloc de code.
Ceci est utile si vous préférez ne pas modifier votre shiftwidth
ou utiliser des set
directives et est suffisamment flexible pour fonctionner avec TABS ou SPACES ou tout autre caractère.
-- VISUAL MODE --
:
pour passer à l'inviteRemplacement par 3 espaces de tête:
:'<,'>s/^/ /g
Ou en remplaçant par des onglets de tête:
:'<,'>s/^/\t/g
Brève explication:
'<,'>
- Dans la plage sélectionnée visuellement
s/^/ /g
- Insérez 3 espaces au début de chaque ligne dans toute la plage
(ou)
s/^/\t/g
- Insérer Tab
au début de chaque ligne dans toute la gamme
J'aime marquer le texte pour l'indentation:
PS: vous pouvez utiliser la :'a,'ztechnique pour marquer une plage pour toute opération (d, y, s ///, etc.) où vous pourriez utiliser des lignes, des nombres ou %.
:help left
Dans ex mode
vous pouvez utiliser :left
ou :le
pour aligner les lignes d'un montant spécifié. Plus précisément, :left
seront les lignes aligner à gauche dans la [gamme]. Il définit le retrait dans les lignes sur [retrait] (par défaut 0).
:%le3
ou :%le 3
ou :%left3
ou :%left 3
alignera le fichier entier en remplissant trois espaces.
:5,7 le 3
alignera les lignes 5 à 7 en les remplissant de trois espaces.
:le
sans aucune valeur ou :le 0
s'alignera à gauche avec un remplissage de 0.
Cela fonctionne dans Vim et gVim.
:'<,'>le4
insérer les espaces. Merci!
Pour moi, la solution MacVim (Visual) était, sélectionnez avec la souris et appuyez sur ">", mais après avoir mis les lignes suivantes dans "~ / .vimrc" car j'aime les espaces au lieu des tabulations:
set expandtab
set tabstop=2
set shiftwidth=2
Il est également utile de pouvoir appeler MacVim à partir de la ligne de commande (Terminal.app), donc puisque j'ai le répertoire d'assistance suivant "~ / bin", où je place un script appelé "macvim":
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
Et bien sûr dans "~ / .bashrc":
export PATH=$PATH:$HOME/bin
MacPorts salit beaucoup "~ / .profile", donc la variable d'environnement PATH peut devenir assez longue.
5==
indentera cinq lignes à partir de la position actuelle du curseur.
Vous pouvez donc taper n'importe quel nombre avant ==
. Il mettra en retrait le nombre de lignes. C'est en mode commande.
gg=G
indentera l'intégralité du fichier de haut en bas.
Je n'ai pas trouvé de méthode que j'utilise dans les commentaires, donc je vais la partager (je pense que Vim uniquement):
Ceci est utile lorsque vous ne souhaitez pas modifier les paramètres d'indentation / tabulation vimrc
ou les mémoriser pour les modifier lors de la modification.
Pour annuler l'indentation, j'utilise le même bloc Ctrl+ Vsélection pour sélectionner des espaces et le supprimer avec D.
Je ne sais pas pourquoi il est si difficile de trouver une réponse simple comme celle-ci ...
J'ai moi-même dû beaucoup lutter pour le savoir. C'est très simple:
.vimrc
fichier sous le répertoire personnel.Ajoutez cette ligne
set cindent
dans votre fichier où vous souhaitez mettre en retrait correctement.
En mode normal / commande
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
:line_num_start,line_num_end>
Par exemple,
14,21> shifts line number 14 to 21 to one tab
Augmentez le symbole «>» pour plus d'onglets.
Par exemple,
14,21>>> for three tabs
:set number
pour basculer les numéros de ligne (ils sont désactivés par défaut) ou mettre set number
votre vimrc.
En utilisant beaucoup Python, je me retrouve à avoir fréquemment besoin de décaler des blocs de plusieurs indentations. Vous pouvez le faire en utilisant l'une des méthodes de sélection de bloc, puis entrez simplement le nombre de retraits que vous souhaitez sauter juste avant le>
Par exemple, V5j3>
indentera cinq lignes trois fois - ce qui correspond à 12 espaces si vous utilisez quatre espaces pour les retraits.
Option 1: indenter un bloc de code dans vi à trois espaces avec le mode Visual Block:
Sélectionnez le bloc de code que vous souhaitez mettre en retrait. Pour ce faire, utilisez Ctrl+Ven mode normal et flèches vers le bas pour sélectionner le texte. Pendant qu'il est sélectionné, entrez :
pour donner une commande au bloc de texte sélectionné.
Les éléments suivants apparaîtront sur la ligne de commande: :'<,'>
Pour définir un retrait de trois espaces, tapez le 3
et appuyez sur Entrée. Voici ce qui apparaît::'<,'>le 3
Le texte sélectionné est immédiatement mis en retrait sur trois espaces.
Option 2: indenter un bloc de code dans vi à trois espaces avec le mode Visual Line:
Soyez en mode normal et appuyez sur les touches suivantes:
Vjjjj:le 3
Interprétation de ce que vous avez fait:
V
signifie commencer à sélectionner du texte.
jjjj
flèches vers le bas de quatre lignes, mettant en évidence quatre lignes.
:
indique à vi que vous saisirez une instruction pour le texte en surbrillance.
le 3
signifie mettre en retrait le texte en surbrillance de trois lignes.
Le code sélectionné est immédiatement augmenté ou diminué à une indentation de trois espaces.
Option 3: utilisez le mode Visual Block et le mode d'insertion spécial pour augmenter le retrait:
En mode normal, appuyez sur les touches suivantes:
Ctrl+V
jjjj
(appuyez cinq fois sur la barre d'espace)
Esc Shift+i
Tout le texte en surbrillance est en retrait de cinq espaces supplémentaires.
J'utilise la sélection visuelle en mode bloc:
I
( Shift+ I) pour entrer en mode d'insertion.Ce n'est pas un uni-tasker. Ça marche:
c
au lieu de I
).vim-prettier
au lieu du moteur d'indentation par défaut). >
Sinon, l' utilisation augmentera royalement le formatage effectué par Prettier.
Pour un bloc de code, {}: =+%
Pour une ligne sélectionnée: Shift+ vsélectionnez à l'aide des touches fléchées haut / bas, puis appuyez sur =.
Pour l'ensemble du fichier: gg+ =+G
Remarque: «gg» signifie aller à la ligne 1, «=» est la commande de retrait et «G» déplace le curseur à la fin du fichier .
Pour mettre en retrait tout le fichier par quatre:
esc 4G=G
Source: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html