Retrait rapide de plusieurs lignes dans vi

Devrait être sortingvial, et il pourrait même être dans l’aide, mais je ne peux pas comprendre comment naviguer. Comment puis-je indenter plusieurs lignes rapidement dans vi?

    Utilisez la commande > . Pour indenter 5 lignes, 5 >> . Pour marquer un bloc de lignes et le mettre en retrait, V j j > indenter 3 lignes (vim uniquement). Pour mettre en retrait un bloc entre accolades, placez votre curseur sur l’une des accolades et utilisez > % .

    Si vous copiez des blocs de texte et que vous devez aligner le retrait d’un bloc dans son nouvel emplacement, utilisez ] p au lieu de p . Cela aligne le bloc collé avec le texte environnant.

    En outre, le paramètre 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 de Vim et le wiki Vim . Pour la concision, cette réponse ne fait pas la distinction entre les commandes spécifiques à Vi et Vim.

    Dans les commandes ci-dessous, “re-indent” signifie “indent lignes selon vos parameters 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', ie the contents of the block =a{ Re-indent 'a block', ie block and containing braces =2a{ Re-indent '2 blocks', ie this block and containing block >i{ Increase inner block indent  

    Vous pouvez remplacer { with } ou B , par exemple =iB est une commande de retrait de bloc valide. Jetez un coup d'oeil à "Indenter un bloc de code" pour un bon exemple pour essayer ces commandes.

    Aussi, rappelez-vous que

     . Repeat last command 

    , ainsi les commandes d'indentation peuvent être répétées facilement et commodément.

    Réinscription 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 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 spécifique de lignes sans déplacer votre curseur.

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

    Indentation à l'aide de marqueurs

    Une autre approche est via les marqueurs :

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

    ... déplace le curseur jusqu'à la position finale

     >'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  set autoindent "Keep indentation from previous line set smartindent "Automatically inserts indentation in some cases set cindent "Like smartindent, but ssortingcter and more customisable 

    Vim a une indentation intelligente basée sur le type de fichier. Essayez d'append ceci à votre fichier .vimrc:

     if has ("autocmd") " File type detection. Indent based on filetype. Recommended. filetype plugin indent on endif 

    Les références

    • Indenter un bloc de code
    • Déplacement visuel des blocs
    • Indentation du code source
    • :help =

    Un grand choix serait:

     gg=G 

    C’est très rapide et tout est en retrait 😉

    Essayez également cette option pour l’ indentation en C , faites :help = pour plus d’informations:

    ={

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

    Ou juste:

    ==

    pour auto-indenter la ligne actuelle.

    Presses-clés pour plus de personnes visuelles:

    1. Entrez le mode de commande:
      Échapper

    2. Déplacez-vous au début de la zone pour indenter:
      h j k l

    3. Commencez un bloc:
      v

    4. Se déplacer à la fin de la zone pour indenter:
      h j k l

    5. (Facultatif) Tapez le nombre de niveaux d’indentation souhaités
      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 et d’indenter tout, du curseur actuel au marqueur. Ainsi, entrez ma où vous voulez que le haut de votre bloc en retrait, le curseur aussi bas que vous le souhaitez, 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 toutes les commandes est
    gg=G

    Cela indente le fichier entier!

    Et voici quelques-unes des commandes simples et élégantes utilisées pour indenter rapidement des lignes dans Vim ou gVim.

    Pour indenter la ligne en cours
    ==

    Pour indenter toutes les lignes sous la ligne en cours

    =G

    Pour indenter n lignes sous la ligne actuelle

    n==

    Par exemple, pour indenter 4 lignes sous la ligne actuelle

    4==

    Pour indenter un bloc de code, accédez à l’une des accolades 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 les flèches haut / bas pour surligner le texte.
    • appuyez sur = pour mettre en retrait toutes les lignes que vous avez surlignées.

    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 le mettre en retrait, il se désactive puis revient au mode normal. J’ai ceci dans mon fichier .vimrc:

     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 ) pour mettre en surbrillance les lignes que vous souhaitez indenter ou non.

    Alors:

    • Tapez > pour indenter une fois (2 espaces).
    • Tapez 2 > pour indenter deux fois (4 espaces).
    • Tapez 3 > pour indenter trois fois (6 espaces).
    • Tapez < pour désindenter une fois (2 espaces).
    • Type 2 < pour désindenter deux fois (4 espaces).
    • Type 3 < à trois fois indentent (6 espaces).
    • ...

    Vous avez eu 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 indenter des blocs:

     :help visual-block /indent 

    Si vous voulez donner un compte à la commande, faites-le juste avant de taper le caractère d'opérateur: "v {move-around} 3>" (déplacez les lignes 3 d'indentations vers 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:

    • H vers le haut de l’écran, L vers le bas, M vers le milieu
    • n G pour aller à la ligne n, G seul au bas du fichier, g g to top
    • n pour passer à la recherche suivante, N à la précédente
    • } à la fin du paragraphe
    • % entre parenthèses ou type de balise
    • entrez à la ligne suivante
    • ' x pour marquer x où x est une lettre ou une autre’
    • beaucoup plus, y compris w et W pour le mot, $ ou 0 pour les bouts de la ligne, etc., qui ne s’appliquent pas ici parce que ce ne sont pas des mouvements de ligne .

    Donc, pour utiliser vim, vous devez apprendre à déplacer le curseur et à vous souvenir d’un répertoire de commandes comme, par exemple, > pour indenter (et < pour "dépasser").
    Ainsi, pour mettre en retrait les lignes de la position du curseur en haut de l’écran, vous faites > H , > G en bas du fichier.

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

    Certains mouvements du curseur correspondent mieux aux commandes spécifiques. En particulier, la commande % est pratique pour mettre en retrait tout un bloc HTML ou XML.
    Si la syntaxe du fichier est en surbrillance ( :syn on ), placez le curseur dans le texte d’une

    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 "aller à une extrémité du bloc de lignes que vous souhaitez indenter, puis tapez la commande > et un mouvement à l'autre extrémité du bloc" si indent est interprété comme un décalage des lignes, = si indent est interprété comme en jolie impression.

    fais ça

     $vi .vimrc 

    et append cette ligne

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

    c’est seulement pour le fichier cpp que 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 de commenter un bloc de code.

    Ceci est utile si vous préférez ne pas modifier votre shiftwidth ou utiliser des directives d’ set et est suffisamment flexible pour fonctionner avec TABS ou SPACES ou tout autre caractère.

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

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

    6. Ou remplacer par des tabs principaux:

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

    7. Brève explication:

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

      s/^/ /g – Insère 3 espaces au début de chaque ligne dans toute la plage

      (ou)

      s/^/\t/g – Insérer un Tab au début de chaque ligne dans toute la plage

    J’aime marquer le texte pour l’indentation:

    1. aller au début de la ligne de texte puis taper ma (a est l’étiquette de la ‘m’ark: ça pourrait être n’importe quelle lettre)
    2. aller à la fin de la ligne de texte et taper mz (encore une fois z pourrait être n’importe quelle lettre)
    3. : ‘a,’ z> ou: ‘a,’ z
    4. Voila! le texte est déplacé (les lignes vides restnt vides sans espaces)

    PS: vous pouvez utiliser: ‘a’ z technique pour marquer une plage pour toute opération (d, y, s ///, etc.) où vous pouvez utiliser des lignes, des nombres ou des%

    >} ou >{ indentation de la ligne courante jusqu’au paragraphe suivant

    <} ou <{ même non-indentation

    Il y a une autre façon qui n’a pas encore été mentionnée: vous pouvez utiliser la commande norm i pour insérer du texte 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’espace à la fin de la commande – ce sera le caractère que nous voulons insérer. Nous pouvons également mettre en retrait tout autre texte, par exemple pour mettre en retrait chaque ligne du fichier avec 5 caractères de soulignement:

     :%norm 5i_ 

    Ou quelque chose de plus sophistiqué:

     :%norm 2i[ ] 

    Un exemple plus pratique est de 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) é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 tabs:

     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 depuis que j’ai le répertoire d’aide suivant “~ / bin”, où je place un script appelé “macvim”:

     #!/usr/bin/env bash /usr/bin/open -a /Applications/MacPorts/MacVim.app $@ 

    Et bien sur dans “~ / .bashrc”:

     export PATH=$PATH:$HOME/bin 

    Macports dérange beaucoup avec “~ / .profile”, donc la variable d’environnement PATH peut être assez longue.

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

    1. Esc pour entrer en mode de commande
    2. Aller au premier caractère de la dernière ligne à identifier
    3. ctrlv pour démarrer la sélection de bloc
    4. Passer au premier caractère de la première ligne à identifier
    5. shiftje passe en mode insertion spéciale
    6. taper autant de spases / tabs que vous devez indenter (2 par exemple
    7. appuyez sur Echap et des espaces apparaîtront dans toutes les lignes

    Ceci est utile lorsque vous ne voulez pas modifier les parameters ident / tab dans vimrc ou les mémoriser pour les modifier lors de l’édition.

    Pour annuler la connexion, j’utilise le même bloc ctrlv que pour sélectionner des espaces et le supprimer avec d .

    Je ne sais pas pourquoi c’est si difficile de trouver une réponse simple comme celle-ci …

    J’ai moi-même dû beaucoup lutter pour savoir que c’est très simple

    éditez votre fichier .vimrc sous le répertoire home ajoutez cette ligne

     set cindent 

    dans votre fichier où vous voulez indenter correctement

    en mode normal / mode commande

     10== (this will indent 10 lines from the current cursor location ) gg=G (complete file will be properly indented) 

    5== va indenter 5 lignes de la position actuelle du curseur. donc vous pouvez taper n’importe quel nombre avant == , cela indenter le nombre de lignes. Ceci est en mode commande.

    gg=G va indenter le fichier entier de haut en bas.

    :help left

    En ex mode vous pouvez utiliser :left ou :le pour aligner les lignes sur une quantité spécifiée. Plus précisément,: :left laissera les lignes alignées dans la plage. Il définit le retrait dans les lignes sur [indent] (0 par défaut).

    :%le3 ou :%le 3 ou :%left3 ou :%left 3 alignera le fichier entier en remplissant avec trois espaces.

    :5,7 le 3 alignera les lignes 5 à 7 en les remplissant de 3 espaces.

    :le sans aucune valeur ou :le 0 restra aligné avec un remplissage de 0.

    Cela fonctionne dans vim et gvim .

    En utilisant beaucoup Python, je me trouve souvent besoin de changer de bloc par 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 d’indentations que vous souhaitez sauter juste avant le >

    Par exemple. V5j3> 5 lignes 3 fois – ce qui est 12 espaces si vous utilisez 4 espaces pour les retraits

     :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’tabs

    par exemple

     14,21>>> for 3 tabs 

    Pour indenter chaque ligne dans un type de fichier, echap puis G = gg

    Comment indenter immédiatement le code mis en évidence dans vi par un nombre d’espaces:

    Option 1: indentez un bloc de code dans vi à trois espaces avec le mode Visual Block:

    1. Sélectionnez le bloc de code que vous souhaitez indenter. Faites cela en utilisant Ctrl + V en mode normal et en descendant pour sélectionner du texte. Pendant qu’il est sélectionné, entrez : pour donner une commande au bloc de texte sélectionné.

    2. Les éléments suivants apparaîtront dans la ligne de commande :'<,'>

    3. Pour définir le retrait sur 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 en retrait de 3 espaces.

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

    1. Ouvrez votre fichier dans VI.
    2. Placez votre curseur sur du code
    3. Soyez 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 descend 4 lignes en soulignant 4 lignes.

      : indique à vi que vous entrez une instruction pour le texte en surbrillance.

      le 3 signifie indenter le texte surligné 3 lignes.

      Le code sélectionné est immédiatement augmenté ou réduit à trois espaces d’indentation.

    Option 3: utiliser le mode Visual Block et le mode d’insertion spécial pour augmenter le retrait:

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

      Ctrl + V

       jjjj 

      (appuyez sur la barre d’espace 5 fois)

      Esc Shift + i

      Tout le texte en surbrillance comporte 5 espaces supplémentaires.

    Pour indenter tous les fichiers 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 entrer 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.
    • Changer une colonne (utilisez c au lieu de I).
    • yank, supprimer, substituer, etc …

    Supposons | représente la position du curseur dans Vim. Si le texte à mettre en retrait est placé dans un bloc de code comme:

     int main() { line1 line2| line3 } 

    vous pouvez faire >i{ ce qui signifie ” indent ( > ) dans ( i ) bloquer ( { ) ” et obtenir:

     int main() { line1 line2| line3 } 

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

     do line2| line3 line4 done 

    Pour indenter les lignes 2 à 4, vous pouvez sélectionner visuellement les lignes et taper > . Ou encore plus rapide que vous pouvez faire >2j pour obtenir:

     do line2| line3 line4 done 

    Notez que >Nj signifie indentation de la ligne courante vers N lignes ci-dessous. Si le nombre de lignes à mettre en retrait est important, l’utilisateur peut prendre quelques secondes pour compter la valeur correcte de N Pour économiser des secondes précieuses, vous pouvez activer l’option du numéro relatif avec set relativenumber (disponible depuis la version 7.3 de Vim).