Question

Devrait être trivial, et cela pourrait même être dans l'aide, mais je ne sais pas comment naviguer. Comment indenter plusieurs lignes rapidement dans vi?

Était-ce utile?

La solution

Utilisez la commande > . Pour mettre en retrait 5 lignes, 5 & Gt; & Gt; . Pour marquer un bloc de lignes et l'indenter, V j j & Gt; pour indenter 3 lignes (vim seulement). Pour mettre en retrait un bloc d'accolades, placez votre curseur sur l'une d'entre elles et utilisez & Gt; % ou utilisez le bloc gt; i B .

Si vous & # 8217; copiez de nouveau des blocs de texte et que vous souhaitez aligner le retrait d'un bloc à son nouvel emplacement, utilisez ] p au lieu de Juste p . Ceci aligne le bloc collé avec le texte environnant.

De même, le paramètre shiftwidth permet de contrôler le mode nombreux espaces à mettre en retrait.

Autres conseils

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 de 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éindente &»; signifie " indenter les lignes en fonction de 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. Consultez & "Indentez un bloc de code &"; pour une bonne exemple pour essayer ces commandes.

N'oubliez pas non plus que

.    Repeat last command

, les commandes d'indentation peuvent être répétées facilement et de manière pratique.

Réindenter des fichiers complets

Une autre situation courante consiste à exiger 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 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

Ils 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 consiste à utiliser les 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 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 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 vraiment rapide et tout est indenté; -)

Essayez également ceci pour l'indentation C , faites :help = pour plus d'informations:

={

Cela indentera automatiquement le bloc de code actuel dans lequel vous vous trouvez.

Ou simplement:

==

pour indenter automatiquement la ligne en cours.

Presses à clé pour plus de visuels:

  1. Entrer en mode commande:
    Escape

  2. Déplacez-vous au début de la zone à mettre en retrait:
    h j k l & # 8593; # 8595; & # 8592; & # 8594;

  3. Démarrer un bloc:
    v

  4. Déplacez-vous à la fin de la zone pour mettre en retrait:
    h j k l & # 8593; # 8595; & # 8592; & # 8594;

  5. (Facultatif) Entrez le nombre de niveaux d'indentation souhaité.
    0..9

  6. 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. Par conséquent, entrez ma où vous voulez le haut de votre bloc en retrait, le curseur vers le bas aussi loin que vous le souhaitez, puis tapez >'a (notez que & "; a &"; nom de marqueur valide). C’est parfois plus facile que 5>> ou vjjj>.

Le maître de toutes les commandes est
gg=G

Ceci met tout le fichier en retrait!

Et voici 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 en cours
==

Pour indenter toutes les lignes en dessous de la ligne en cours

=G

Pour mettre en retrait n les lignes sous la ligne en cours

n==

Par exemple, pour mettre en retrait 4 lignes en dessous de la ligne en cours

4==

Pour mettre en retrait un bloc de code, accédez à l'une des accolades et utilisez la commande

=%

Ce sont les commandes les plus simples mais les plus puissantes pour mettre en retrait plusieurs lignes.

Aller au début du texte

  • appuyez sur v pour le mode visuel.
  • utilisez haut / bas pour mettre le texte en surbrillance.
  • appuyez sur = pour mettre en retrait toutes les lignes que vous avez surlignées.

Outre les solutions proposées, j'aime bien faire les choses paragraphe par paragraphe avec >}

Lorsque vous sélectionnez un bloc et que vous 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
  • Tapez v (pour passer en mode d'édition de bloc visuel)
  • Déplacez le curseur avec les touches fléchées (ou avec h / j / k / l ) vers mettez en surbrillance les lignes que vous souhaitez mettre en retrait ou annuler.

Ensuite:

  • Tapez > pour mettre en retrait une fois (2 espaces).
  • Tapez 2 > pour mettre en retrait deux fois (4 espaces).
  • Tapez 3 > pour indenter trois fois (6 espaces).
  • ...
  • Tapez < pour annuler l’indentation une fois (2 espaces).
  • Tapez 2 < pour désindenter deux fois (4 espaces).
  • Tapez 3 < pour désindendre trois fois (6 espaces).
  • ...

Vous avez l'idée.

( Les lignes vides ne seront pas indentées, ce qui me semble plutôt agréable. )

J'ai trouvé la réponse dans la documentation (g) vim concernant les blocs en retrait:

:help visual-block
/indent
  

Si vous souhaitez attribuer un compte à la commande, faites-le avant de taper   le caractère opérateur: " v {move-around} 3 > " (déplacez les lignes 3 tirets vers   à droite).

La beauté de l'interface utilisateur de vim réside dans le fait 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 en haut de l'écran, L en bas, M au milieu
  • n G pour aller à la ligne n, G seul en bas du fichier, g g en haut
  • n pour passer à la recherche suivante, N à la précédente
  • } à la fin du paragraphe
  • % jusqu'au prochain crochet correspondant, entre parenthèses ou type de balise
  • entrez à la ligne suivante
  • ' x pour marquer x où x est une lettre ou un autre'
  • beaucoup d'autres, y compris w et W pour mot, $ ou 0 aux extrémités de la ligne, etc, cela ne s'applique pas ici car ce ne sont pas des mouvements ligne .

Donc, pour utiliser vim, vous devez apprendre à déplacer le curseur et à vous rappeler un répertoire de commandes comme, par exemple, > pour mettre en retrait (et lt; sur & "; surpasser &";).
Ainsi, pour marquer les lignes entre la position du curseur et le haut de l'écran, vous devez & Gt; H , & Gt; G pour mettre en retrait au bas du fichier.

Si, au lieu de taper > H , vous tapez d H , alors vous êtes supprimer le même bloc de lignes, c H pour le remplacer, etc.

Certains mouvements du curseur correspondent mieux à des commandes spécifiques. En particulier, la commande % est pratique pour indenter 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 & Quot; i & Quot; de & Lt; div & Gt; et entrer > % indentera jusqu'à la balise < / div > finale.

C’est ainsi que 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 souhaitez mettre en retrait, puis tapez la commande & Gt; et un mouvement vers l'autre extrémité. fin du bloc " si indent est interprété comme un décalage des lignes, = si indent est interprété comme en jolie impression.

faire ceci

$vi .vimrc

et ajoutez cette ligne

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

cela ne concerne que les fichiers cpp. Vous pouvez le faire pour un autre type de fichier également en modifiant simplement le type de fichier ...

Un moyen rapide de faire cela 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 modifier votre shiftwidth ou utiliser aucune directive set et que vous êtes suffisamment flexible pour utiliser TABS, SPACES ou tout autre caractère.

  1. Placez le curseur au début du bloc
  2. v pour passer à -- VISUAL MODE --
  3. Sélectionnez le texte à mettre en retrait
  4. Tapez : pour passer à l'invite
  5. Remplacement par 3 espaces de début:

    :'<,'>s/^/ /g

  6. Ou remplacer par les onglets de tête:

    :'<,'>s/^/\t/g

  7. Explication brève:

    '<,'> - Dans la plage sélectionnée visuellement

    s/^/ /g - Insérez 3 espaces au début de chaque ligne de la plage entière

    (ou)

    s/^/\t/g - Insérez Tab au début de chaque ligne de la plage

J'aime marquer le texte pour l'indentation:

  1. allez au début de la ligne de texte puis tapez ma (a est le libellé de 'm'ark: ce peut être n'importe quelle lettre)
  2. allez à la dernière ligne du texte et tapez mz (encore une fois z pourrait être n'importe quelle lettre)
  3. : 'a,' z > ou: 'a,' z < indentera ou sortira (est-ce un mot?)
  4. Voilà! le texte est déplacé (les lignes vides restent vides sans espaces)

PS: vous pouvez utiliser: la technique 'a,' z pour marquer une plage pour toute opération (d, y, s ///, etc.) dans laquelle vous pouvez utiliser des lignes, des chiffres ou%

>} ou >{ mettre en retrait de la ligne actuelle jusqu'au paragraphe suivant

<} ou <{ même indentation

Il existe un moyen supplémentaire qui n'a pas été & # 8217; 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 

N'oubliez pas 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#

Pour réindenter, utilisez x au lieu de i . Par exemple, pour supprimer les 5 premiers caractères de chaque ligne:

:%norm 5x

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 " depuis que j'aime les espaces au lieu des onglets:

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, 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 décoiffe avec " ~ / .profile " beaucoup, la variable d’environnement PATH peut donc être assez longue.

Je n'ai pas trouvé de méthode que j'utilise dans les commentaires, je vais donc la partager (je pense uniquement à vim):

  1. Échap pour entrer en mode commande
  2. Déplacez le curseur sur le premier caractère de la dernière ligne à identifier
  3. ctrl - v pour démarrer la sélection de bloc
  4. Déplacez le curseur sur le premier caractère de la première ligne à identifier
  5. décaler - i pour entrer en mode d'insertion spécial
  6. tapez autant de spases / onglets que vous devez mettre en retrait (2 par exemple
  7. appuyez sur Échap et des espaces apparaîtront dans toutes les lignes

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 l'édition.

Pour désindenter, j'utilise le même bloc ctrl - v afin de sélectionner des espaces et de 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 eu beaucoup de mal à le savoir c'est très simple

éditez votre fichier .vimrc sous le répertoire personnel ajouter cette ligne

set cindent

dans votre fichier où vous souhaitez mettre correctement en retrait

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)

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.

:help left

Dans ex mode vous pouvez utiliser :left ou :le pour aligner les lignes d’un montant spécifié. Plus précisément, :%le3 va aligner à gauche les lignes de la [plage]. Il définit l'indent dans les lignes sur [indent] (0 par défaut).

:%le 3 ou :%left3 ou :%left 3 ou :5,7 le 3 alignera tout le fichier en complétant avec trois espaces.

:le 0 alignera les lignes 5 à 7 en les plaçant avec 3 espaces.

vim sans aucune valeur ou gvim alignera à gauche avec un remplissage de 0.

Ceci fonctionne dans <=> et <=>.

:line_num_start,line_num_end>

par exemple.

14,21> shifts line number 14 to 21 to one tab

Augmenter le '>' symbole pour plus d'onglets

par exemple.

14,21>>> for 3 tabs

En utilisant beaucoup Python, je me trouve souvent dans l'obligation de déplacer les blocs de plus 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 la >

.

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 d'un type de fichier, echa alors G = gg

Comment mettre en retrait immédiatement le code en surbrillance dans vi par un nombre d'espaces:

Option 1: indentez un bloc de code dans vi dans trois espaces avec le mode bloc visuel:

  1. Sélectionnez le bloc de code que vous souhaitez mettre en retrait. Pour ce faire, utilisez Ctrl + V en mode normal et descendez pour sélectionner du texte. Une fois sélectionné, entrez : pour donner une commande au bloc de texte sélectionné.

  2. Les informations suivantes apparaissent dans la ligne de commande: :'<,'>

  3. Pour définir un retrait de 3 espaces, tapez le 3 et appuyez sur entrée. C’est ce qui apparaît: :'<,'>le 3

  4. Le texte sélectionné est immédiatement mis en retrait de 3 espaces.

Option 2: indentez un bloc de code dans vi dans trois espaces avec le mode Visual Line:

  1. Ouvrez votre fichier dans le VI.
  2. Placez votre curseur sur un code
  3. Restez 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 mis en surbrillance.

    <=> 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:

  1. Ouvrez votre fichier dans le VI.
  2. Placez votre curseur sur un code
  3. Restez en mode normal, appuyez sur les touches suivantes:

    Ctrl + V

    jjjj
    

    (appuyez 5 fois sur la barre d'espace)

    Échap Maj + i

    Tout le texte en surbrillance est mis en retrait de 5 espaces supplémentaires.

Pour mettre en retrait tout le fichier par 4:

esc 4G=G

J'utilise la sélection visuelle en mode bloc:

  • Allez à l'avant du bloc pour vous déplacer (en haut ou en bas).
  • Appuyez sur ctrl-v pour passer en mode bloc visuel.
  • Naviguez pour sélectionner une colonne devant les lignes.
  • Appuyez sur I (décalage i) pour passer en mode insertion.
  • Tapez des espaces.
  • Appuyez sur ESC. Toutes les lignes seront décalées.

Ce n'est pas un uni-tasker. Ça marche:

  • Au milieu des lignes.
  • Pour insérer une chaîne sur toutes les lignes.
  • Pour changer une colonne (utilisez c au lieu de I).
  • supprimer, remplacer, remplacer, etc ...
  • Pour le bloc de code {}: = + %

  • Pour la ligne sélectionnée: Maj + v sélectionnez en utilisant les flèches haut / bas puis appuyez sur = .

  • Pour le fichier entier: 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{ ce qui signifie & "; indenter (>) à l'intérieur du (i) bloc ({) &"; et obtenez:

int main() {
    line1
    line2|
    line3
}

Supposons maintenant que les lignes sont contiguës mais en dehors d'un bloc, comme:

do
line2|
line3
line4
done

Pour mettre en retrait les lignes 2 à 4, vous pouvez les sélectionner visuellement et saisir >2j. Ou même plus rapidement, vous pouvez faire >Nj pour obtenir:

do
    line2|
    line3
    line4
done

Notez que N signifie un retrait de la ligne actuelle vers les lignes set relativenumber ci-dessous. Si le nombre de lignes à mettre en retrait est important, l’utilisateur peut prendre quelques secondes à compter la valeur appropriée de <=>. Pour économiser de précieuses secondes, vous pouvez activer l'option nombre relatif avec <=> (disponible depuis Vim version 7.3).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top