Indenter plusieurs lignes rapidement en vi
devrait être trivial, et il pourrait même être dans l'aide, mais je ne peux pas comprendre comment le naviguer. Comment puis-je indenter plusieurs lignes rapidement en vi?
29 réponses
utilisez la commande > . À l'alinéa 5 lignes, 5 > > . Pour marquer un bloc de lignes et l'indenter, V j j > à la troisième ligne du tiret (vim seulement). Pour indenter un bloc curly-braces, mettez votre curseur sur l'un des accolades et utilisez > % .
si vous copiez des blocs de texte autour de vous et que vous avez besoin d'aligner le tiret d'un bloc dans sa nouvelle position, utilisez ] p au lieu de juste p . Le bloc collé est aligné sur le texte environnant.
de plus, le réglage shiftwidth
vous permet de contrôler le nombre d'espaces à indenter.
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 la vim wiki . Par souci de concision, cette réponse ne fait pas de distinction entre les commandes Vi et Vim spécifiques.
dans les commandes ci-dessous," re-indentation "signifie "lignes d'indentation selon votre paramètres d'indentation ." shiftwidth
est la variable primaire 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 valide d'indentation de bloc. Jetez un oeil à "Retrait d'un Bloc de Code" pour un bon exemple pour essayer ces commandes.
aussi, rappelez - vous que
. Repeat last command
, de sorte que les commandes d'indentation peuvent être facilement et commodément répétées.
Re-mise en retrait des dossiers complets
une autre situation courante est celle où l'indentation doit être corrigée dans l'ensemble d'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
In Mode Visuel
Vjj> Visually mark and then indent 3 lines
dans le mode
ces commandes s'appliquent à la ligne courante:
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
les commandes Ex
ceux-ci sont utiles lorsque vous voulez indenter une gamme 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
mise en Retrait à l'aide de marqueurs
une autre approche est par marqueurs :
ma Mark top of block to indent as marker 'a'
...déplacer le curseur à l'endroit de fin
>'a Indent from marker 'a' to current location
Variables qui régissent l'indentation
vous pouvez les mettre dans votre .fichiers 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
une grande sélection serait:
gg=G
Il est vraiment rapide, et tout est mis en retrait ;-)
essayez aussi ceci pour c-indenting indentation, do :help =
pour plus d'information:
={
qui va auto-indenter le bloc de code actuel dans lequel vous êtes.
ou juste:
==
pour auto-indenter la ligne courante.
Clé-Presses pour plus de visuels de personnes:
-
Entrer En Mode Commande:
Escape -
déplacer au début de la zone à l'indentation:
h j k l ↑ ↓ ← → -
Démarrer un bloc:
v -
se déplacer vers l'extrémité de la zone à l'indentation:
h j k l ↑ ↓ ← → -
(optionnel) tapez le nombre de niveaux d'indentation que vous voulez
0..9 -
exécuter l'indentation sur le bloc:
>
en plus de la réponse déjà donnée et acceptée, il est également possible de placer un marqueur et ensuite tout indenter du curseur Courant au marqueur. Ainsi, entrez ma
où vous voulez que le haut de votre bloc dentelé, curseur vers le bas autant que vous avez besoin et puis tapez >'a
(notez que a
" peut être substitué à n'importe quel nom de marqueur valide). C'est parfois plus facile que 5>>
ou vjjj>
.
le maître de tous les ordres est
gg=G
ceci indente le dossier entier!
et ci-dessous sont quelques-unes des commandes simples et élégantes utilisées pour indenter les lignes rapidement dans Vim ou gVim.
pour indenter la ligne courante
==
pour indenter toutes les lignes au-dessous de la ligne courante
=G
au tiret n
lignes au-dessous de la ligne courante
n==
par exemple, à l'alinéa 4 lignes au-dessous de la ligne courante
4==
pour indenter un bloc de code, allez à l'une des bretelles et utilisez la commande
=%
ce sont les commandes les plus simples, mais puissantes pour indenter plusieurs lignes.
Aller au début du texte
- appuyez sur v pour le mode visuel.
- utilisez haut / bas flèche pour mettre le texte en surbrillance.
- appuyez sur = pour indenter toutes les lignes que vous avez surlignées.
ainsi que les solutions proposées, j'aime faire les choses un paragraphe à la fois avec >}
lorsque vous sélectionnez un bloc et utilisez > pour indenter, il indents puis retourne en mode normal. J'ai ceci dans mon .fichiers vimrc:
vnoremap < <gv
vnoremap > >gv
Il vous permet d'indenter votre sélection autant de fois que vous le souhaitez.
Supposons que vous utilisez 2 espaces pour indenter votre code. Type:
:set shiftwidth=2
- Type v (pour entrer bloc visuelle mode d'édition)
- déplacez le curseur avec les touches fléchées (ou avec h / j / k / l ) pour mettre en évidence les lignes que vous voulez indenter ou unindent.
puis:
- Type > à indenter une fois (2 espaces). Type
- 2 > à indenter deux fois (4 espaces). Type
- 3 > à indenter trois fois (6 espaces).
- ...
- Type < unindent once (2 espaces).
- Type 2 < annuler la mise en retrait à deux reprises (4 espaces). Type
- 3 < pour délier trois fois (6 espaces).
- ...
vous avez l'idée.
( les lignes vides ne seront pas indentées, ce qui est plutôt sympa. )
j'ai trouvé la réponse dans la documentation (g)vim pour blocs d'indentation:
:help visual-block
/indent
si vous voulez donner un compte à la commande, faites-le juste avant de taper le caractère de l'opérateur: "v{move-around}3>" (déplacer la ligne 3 en retrait vers droit.)
la beauté de L'interface utilisateur de vim est qu'elle est cohérente. Les commandes d'édition sont composées de la commande et d'un déplacement du curseur. Les mouvements du curseur sont toujours les mêmes:
- H pour le haut de l'écran, L en bas, M moyen
- n G pour aller à la ligne n, G seul au fond de fichier, g g vers le haut
- n pour passer à la prochaine recherche de match, N précédent
- } à la fin du paragraphe
- % au prochain crochet correspondant, soit des parenthèses soit du type de l'étiquette
- inscrivez à la ligne suivante
- ' x à la marque x où x est une lettre ou une autre "
- beaucoup plus, y compris w et W pour le mot, $ ou 0 aux extrémités de la ligne, etc, qui ne s'appliquent pas ici parce que ne sont pas ligne mouvements.
ainsi, pour utiliser vim vous devez apprendre à déplacer le curseur et se souvenir d'un répertoire de commandes comme, pour exemple, > tiret (et < à "hausser").
Ainsi, pour l'indentation des lignes à partir de la position du curseur en haut de l'écran, vous ne > H , > G tiret à la fin du fichier.
si, au lieu de taper > H , tapez d H alors vous supprimez le même bloc de lignes, c h pour le remplacer, etc.
certains mouvements du curseur conviennent mieux aux commandes spécifiques. En particulier, la commande % est pratique pour indenter tout un bloc HTML ou XML.
Si le fichier a la syntaxe surlignée ( :syn on
), puis la mise en place du curseur dans le texte d'une balise (comme, dans le "i" de < div> et entrée > % indentira jusqu'à la balise de fermeture
c'est ainsi que vim fonctionne: il faut se souvenir seulement 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 voulez indenter, puis tapez le > commande et un mouvement à l'autre extrémité du bloc " si le tiret est interprété comme un déplacement des lignes, = si le tiret est interprété comme une jolie impression.