Devrait être trivial, et il pourrait même être dans l'aide, mais je ne peux pas comprendre comment naviguer. Comment indenter plusieurs lignes rapidement dans vi?
Utilisez le > commander. Pour mettre en retrait 5 lignes, 5>>. Pour marquer un bloc de lignes et le mettre en retrait, Vjj> indenter 3 lignes (vim uniquement). Pour mettre en retrait un bloc d’accolades, placez votre curseur sur l’une des accolades et utilisez >% ou de n'importe où dans l'utilisation de bloc >iB.
Si vous copiez des blocs de texte et que vous devez aligner le retrait d’un bloc à son nouvel emplacement, utilisez ]p au lieu de juste p. Cela aligne le bloc collé avec le texte environnant.
De plus, le paramètre shiftwidth
vous permet de contrôler le nombre d'espaces à mettre en retrait.
Cette réponse résume les autres réponses et commentaires de cette question, et ajoute des informations supplémentaires basées sur le documentation Vim et le wiki Vim . Par souci de concision, cette réponse ne fait pas la distinction entre les commandes spécifiques à Vi et à Vim.
Dans les commandes ci-dessous, "ré-indenter" signifie "lignes d'indentation selon votre 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 sur "Indentation d'un bloc de code" pour un exemple intéressant sur lequel essayer ces commandes.
Aussi, rappelez-vous que
. Repeat last command
, les commandes d’indentation peuvent donc être répétées facilement et commodément.
Réindenter des fichiers complets
Une autre situation courante consiste à exiger que l'indentation soit corrigée dans tout le 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
Commandes Ex
Celles-ci sont utiles lorsque vous souhaitez indenter une plage de lignes spécifique 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 via marqueurs :
ma Mark top of block to indent as marker 'a'
... déplace le curseur vers la fin
>'a Indent from marker 'a' to current location
Variables qui régissent 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 empreinte intelligente basée sur le type de fichier. Essayez d'ajouter ceci à votre fichier .vimrc:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Références
Un grand choix serait:
gg=G
C'est très rapide et tout est mis en retrait ;-)
Essayez aussi ceci pour indentation C indentation, 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 en cours.
Presses à clé pour plus de visuels:
Entrer en mode de commande:
Escape
Déplacez-vous au début de la zone pour indenter:
hjkl↑↓←→
Commencer un bloc:
v
Déplacez-vous à la fin de la zone pour indenter:
hjkl↑↓←→
(Facultatif) Saisissez le nombre de niveaux d'indentation souhaité.
0..9
Exécutez 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, puis de tout mettre en retrait, du curseur actuel au marqueur. Ainsi, entrez ma
où vous voulez le haut de votre bloc indenté, faites glisser le curseur autant que vous le souhaitez, puis tapez >'a
(notez que "a
" peut remplacer tout marqueur valide Nom). C'est parfois plus facile que 5>>
ou vjjj>
.
Le maître de toutes les commandes estgg=G
Cela met en retrait le fichier entier!
Vous trouverez ci-dessous quelques-unes des commandes simples et élégantes utilisées pour mettre rapidement en retrait des lignes dans Vim ou gVim.
Pour indenter la ligne courante==
Pour indenter toutes les lignes en dessous de la ligne en cours
=G
Pour mettre en retrait n
lignes en dessous de la ligne en cours
n==
Par exemple, pour mettre en retrait 4 lignes en dessous de 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 les plus puissantes pour indenter plusieurs lignes.
Aller au début du texte
En plus des solutions proposées, j'aime bien faire les choses paragraphe par paragraphe avec >}
Lorsque vous sélectionnez un bloc et utilisez > pour mettre en retrait, il met en retrait puis revient en mode normal. J'ai ceci dans mon fichier .vimrc:
vnoremap < <gv
vnoremap > >gv
Il vous permet d'indenter votre sélection autant de fois que vous le souhaitez.
Supposons que vous utilisiez 2 espaces pour indenter votre code. Type:
:set shiftwidth=2
Ensuite:
Vous avez eu l'idée.
(Les lignes vides ne seront pas indentées, ce qui, à mon avis, est plutôt gentil.)
J'ai trouvé la réponse dans la documentation (g) vim concernant les blocs en retrait:
:help visual-block
/indent
Si vous voulez attribuer un compte à la commande, faites ceci juste avant de taper le caractère opérateur: "v {move-around} 3>" (déplacez les lignes 3 à la droite).
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:
Donc, pour utiliser vim, vous devez apprendre à déplacer le curseur et à vous rappeler un répertoire de commandes comme, par exemple, > mettre en retrait (et < "se faire").
Ainsi, pour marquer les lignes entre la position du curseur et le haut de l'écran, vous faites >H, >G indenter au bas du fichier.
Si, au lieu de taper >H, vous tapez dH alors vous supprimez le même bloc de lignes, cH pour le remplacer, etc.
Certains mouvements du curseur s’adaptent mieux à des commandes spécifiques. En particulier, le % Cette commande est pratique pour mettre en retrait tout un bloc HTML ou XML.
Si la syntaxe du fichier est surlignée (:syn on
), placez le curseur dans le texte d'une balise (comme dans le "i" de <div> et entrez >% indentera jusqu’à la balise de fermeture </ div>.
Voici comment fonctionne vim: il ne faut retenir que les mouvements du curseur et les commandes, et comment les mélanger.
Donc, ma réponse à cette question serait "allez à une extrémité du bloc de lignes que vous voulez mettre en retrait, puis tapez le > commande et un mouvement à l’autre extrémité du bloc "if indent est interprété comme un décalage des lignes, = if indent est interprété comme en jolie impression.
fais ça
$vi .vimrc
et ajouter cette ligne
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
ceci est seulement pour le fichier cpp vous pouvez le faire pour un autre type de fichier aussi simplement en modifiant le type de fichier ...
Un moyen rapide de le faire en utilisant VISUAL MODE
utilise le même processus que pour commenter un bloc de code.
Ceci est utile si vous préférez ne pas changer votre shiftwidth
ou utiliser aucune directive set
et être suffisamment souple pour fonctionner avec TABS, SPACES ou tout autre caractère.
-- VISUAL MODE --
:
pour passer à l'inviteRemplacement par 3 espaces de début:
:'<,'>s/^/ /g
Ou en remplaçant par des onglets principaux:
:'<,'>s/^/\t/g
Brève explication:
'<,'>
- Dans la plage sélectionnée visuellement
s/^/ /g
- Insère 3 espaces au début de chaque ligne de la plage
(ou)
s/^/\t/g
- Insère Tab
au début de chaque ligne de la plage entière
>}
ou >{
retrait de la ligne courante jusqu'au paragraphe suivant
<}
ou <{
même indentation
Il existe un moyen supplémentaire qui n’a pas encore été mentionné - vous pouvez utiliser la commande norm i
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
Rappelez-vous qu'il doit y avoir un caractère d'espacement à la fin de la commande - ce sera le caractère que nous voulons insérer. Nous pouvons également mettre en retrait la ligne avec tout autre texte, par exemple pour mettre en retrait chaque ligne du fichier avec 5 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#
À ré-indent utiliser x au lieu de i. Par exemple, pour supprimer les 5 premiers caractères de chaque ligne:
:%norm 5x
J'aime marquer le texte pour l'indentation:
PS: vous pouvez utiliser la technique 'a,' z pour marquer une plage pour toute opération (d, y, s ///, etc.) où vous pouvez utiliser des lignes, des chiffres ou des%
Je n'ai pas trouvé de méthode que j'utilise dans les commentaires, je vais donc la partager (je pense uniquement à vim):
Ceci est utile lorsque vous ne souhaitez pas modifier les paramètres ident/tab dans vimrc ni les mémoriser pour les modifier lors de la modification.
Pour désindenter j'utilise le même ctrl-v bloquer la sélection pour sélectionner des espaces et le supprimer avec d.
5==
indentera 5 lignes à partir de la position actuelle du curseur. afin que vous puissiez taper n'importe quel nombre avant ==
, le nombre de lignes sera indenté. Ceci est en mode commande.
gg=G
indente le fichier entier de haut en bas.
Pour moi, la solution MacVim (Visual) consistait à sélectionner avec la souris et appuyer sur ">", mais après avoir placé 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). Ainsi, depuis le répertoire d'assistance suivant "~/bin", 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 dérange beaucoup avec "~/.profile", donc la variable d'environnement PATH peut être assez longue.
Je ne sais pas pourquoi c'est si difficile de trouver une réponse simple comme celle-ci ...
J'ai moi-même dû lutter beaucoup pour savoir que c'est très simple
éditez votre fichier .vimrc
sous le répertoire personnel ajoutez cette ligne
set cindent
dans votre fichier où vous souhaitez mettre en retrait correctement
en mode normal/type de commande
10== (this will indent 10 lines from the current cursor location )
gg=G (complete file will be properly indented)
:help left
Dans ex mode
, vous pouvez utiliser :left
ou :le
pour aligner des lignes d'un montant spécifié. Plus précisément, :left
will Alignement à gauche des lignes dans la [plage]. Il définit l'indentation dans les lignes sur [indent] (0 par défaut).
:%le3
ou :%le 3
ou :%left3
ou :%left 3
alignera le fichier entier en complétant avec trois espaces.
:5,7 le 3
alignera les lignes 5 à 7 en les plaçant avec 3 espaces.
:le
sans aucune valeur ni :le 0
s'alignera à gauche avec un remplissage de 0.
Cela fonctionne dans vim
et gvim
.
: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 3 tabs
Utilisant beaucoup Python, je dois souvent déplacer plusieurs blocs d'un retrait. 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 5 lignes 3 fois - soit 12 espaces si vous utilisez 4 espaces pour les retraits
Pour mettre en retrait chaque ligne dans un type de fichier, esc alors G = gg
Option 1: indentez un bloc de code dans vi dans trois espaces en mode Visual Block:
Sélectionnez le bloc de code que vous souhaitez mettre en retrait. Faire cela en utilisant Ctrl+V en mode normal et en descendant pour sélectionner du texte. Une fois sélectionné, entrez :
pour donner une commande au bloc de texte sélectionné.
Ce qui suit apparaîtra dans la ligne de commande: :'<,'>
Pour définir l'indent sur 3 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 3 espaces.
Option 2: indentez un bloc de code dans vi dans trois espaces avec le mode Visual Line:
Être en mode normal 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 4 lignes, soulignant 4 lignes.
:
indique à vi que vous allez saisir une instruction pour le texte en surbrillance.
le 3
signifie que le texte en surbrillance surligné est de 3 lignes.
Le code sélectionné est immédiatement augmenté ou réduit à trois espaces d'indentation.
Option 3: utilisez le mode bloc visuel et le mode insertion spécial pour augmenter le retrait:
Être en mode normal appuyez sur les touches suivantes:
Ctrl+V
jjjj
(appuyez sur la barre d'espace 5 fois)
EscShift+i
Tout le texte surligné est mis en retrait de 5 espaces supplémentaires.
J'utilise la sélection visuelle en mode bloc:
Ce n'est pas un tâche unique. Ça marche:
Pour mettre en retrait tout le fichier par 4:
esc 4G=G
Pour le bloc de code {}: = + %
Pour la ligne sélectionnée: Shift + v sélectionnez avec les flèches haut/bas puis appuyez sur =.
Pour tout le fichier: gg + = + G
Remarque: 'gg' signifie aller à la ligne 1, '=' est la commande d'indentation et 'G' déplace le curseur à la fin du fichier.
Supposons que |
représente la position du curseur dans Vim. Si le texte à mettre en retrait est inclus dans un bloc de code tel que:
int main() {
line1
line2|
line3
}
vous pouvez faire >i{
qui signifie "indent (>
) à l'intérieur du bloc (i
) _) ({
)" et obtenez:
int main() {
line1
line2|
line3
}
Supposons maintenant que les lignes sont contiguës mais en dehors d'un bloc, comme ceci:
do
line2|
line3
line4
done
Pour mettre en retrait les lignes 2 à 4, vous pouvez sélectionner visuellement les lignes et taper >
. Ou encore plus rapidement, vous pouvez utiliser >2j
pour obtenir:
do
line2|
line3
line4
done
Notez que >Nj
signifie un retrait de la ligne actuelle vers les lignes N
ci-dessous. Si le nombre de lignes à mettre en retrait est grand, l'utilisateur peut prendre quelques secondes pour compter la valeur correcte de N
. Pour économiser de précieuses secondes, vous pouvez activer l'option nombre relatif avec set relativenumber
(disponible depuis la version 7.3 de Vim).