2401 votes

Comment puis-je tiret plusieurs lignes rapidement dans la vi?

Devrait être trivial, et il pourrait même être dans l'aide, mais je ne peux pas comprendre comment naviguer à travers elle.

2847voto

Greg Hewgill Points 356191

Utiliser l' > commande. À l'alinéa 5 lignes, 5>>. Pour marquer un bloc de lignes et de retrait, Vjj> retrait de 3 lignes (vim). Pour indenter un curly-accolades bloquer, placez votre curseur sur l'un des accolades et utiliser >%.

Si vous voulez copier des blocs de texte et de la nécessité d'aligner le retrait d'un bloc dans son nouvel emplacement, utilisez ]p au lieu de simplement en p. Cela permet d'aligner le bloc collé avec le texte environnant.

Aussi, l' shiftwidth paramètre vous permet de contrôler combien d'espaces pour l'indentation.

1042voto

ire_and_curses Points 32802

Cette réponse résume les autres réponses et les commentaires de cette question, et ajoute des informations de base sur la documentation de Vim et le Vim wiki. Pour la concision, cette réponse ne fait pas de distinction entre le Vi et Vim-commandes spécifiques.

Dans les commandes ci-dessous, "re-tiret" signifie "tiret, des lignes en fonction de vos paramètres de retrait." shiftwidth est la principale variable 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 { avec } ou B, par exemple, =iB est un bloc valide retrait de la commande. Jetez un oeil à "Retrait d'un Bloc de Code" pour un bon exemple pour essayer ces commandes.

Aussi, n'oubliez pas que

.    Repeat last command

, de sorte que l'indentation commandes peuvent être facilement et commodément répété.

Re-mise en retrait des dossiers complets

Une autre situation courante est exigeant en retrait pour être fixés tout au long 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

En Mode Visuel

Vjj> Visually mark and then indent 3 lines

En mode insertion

Ces commandes s'appliquent à la ligne en cours:

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

Ils sont utiles lorsque vous souhaitez mettre en retrait une gamme spécifique de lignes, sans bouger de votre le curseur.

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

La mise en retrait à l'aide de marqueurs

Une autre approche est par l'intermédiaire de marqueurs:

ma     Mark top of block to indent as marker 'a'

...déplacer le curseur à l'emplacement de fin

>'a    Indent from marker 'a' to current location

Les Variables qui régissent l'indentation

Vous pouvez définir ces 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 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

130voto

Johan Points 6127

Une grande sélection serait

gg=G

il est vraiment rapide, et tout est mis en retrait ;-)

114voto

svec Points 2050

Aussi essayez ceci pour C-la mise en retrait de l'indentation, n' :help = pour plus d'info:

={

Qui s'auto-retrait de l'actuel bloc de code que vous utilisez.

Ou tout simplement:

==

à l'auto-indentation de la ligne courante.

85voto

Kent Fredric Points 35592

Touche du clavier enfoncée pour plus de visuels de personnes:

  1. Entrer En Mode De Commande:
    Échapper

  2. Déplacer le début de la zone de retrait:
    hjkl

  3. Début d'un bloc:
    v

  4. Se déplacer à la fin de la zone de retrait:
    hjkl

  5. (Facultatif) Saisissez le nombre de niveaux hiérarchiques vous voulez
    0..9

  6. Exécuter l'entaille sur le bloc:
    >

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X