35 votes

Comment insérer un bloc d'espaces blancs à partir de la position du curseur dans vi ?

Supposons que je dispose du morceau de texte ci-dessous et que le curseur reste sur le premier A actuellement,

AAAA
BBB
CC
D

Comment puis-je ajouter des espaces devant chaque ligne pour la rendre semblable, et ce serait bien si le nombre de colonnes d'espaces pouvait être spécifié à la volée, par exemple deux ici.

  AAAA
  BBB
  CC
  D

J'imagine qu'il y a un moyen de le faire rapidement en mode visuel, mais une idée ?

Actuellement, je copie deux fois la première colonne de texte en mode visuel, et je remplace l'ensemble des deux colonnes par des espaces, ce qui implique > 5 frappes de clavier, c'est trop fastidieux.

Contrainte :

Désolé de ne pas avoir formulé la question clairement et d'avoir créé des confusions.

La cible n'est qu'une partie d'un fichier plus grand, et il serait bon que le nombre de lignes et de colonnes à partir de la première ligne soit indiqué. A peut être spécifiée.

Editer :

Remercier @DeepYellow et @Johnsyweb, apparemment >} y >ap sont tous d'excellents conseils dont je n'étais pas conscient, et ils pourraient tous deux être des réponses valables avant que je ne précise l'exigence spécifique de la réponse à ma question, mais dans tous les cas, la réponse de @luser droog s'impose comme la seule réponse viable. Merci à tous !

53voto

luser droog Points 9030

J'utiliserais :%s/^/ /

Vous pouvez également spécifier un intervalle de lignes :10,15s/^/ /

Ou une fourchette relative :.,+5s/^/ /

Ou utiliser des expressions régulières pour les emplacements :/A/,/D/> .

Pour copier du code à coller sur SO, j'utilise habituellement sed depuis le terminal sed 's/^/ /' filename


Raccourci

Je viens d'apprendre une nouvelle astuce pour cela. Vous entrez en mode visuel v sélectionner la région ( avec des commandes de mouvement régulières ), puis appuyez sur : ce qui donne ceci :

:'<,'>

prêt à l'emploi pour que vous puissiez taper simplement le commande dans le cadre des commandes ci-dessus, les marques '< y '> étant automatiquement fixée aux limites de la sélection visuelle.

Pour sélectionner et mettre en retrait le paragraphe en cours :

vip>

o

vip:>

suivi de enter .

Editer :

Comme demandé dans les commentaires, vous pouvez également ajouter des espaces au milieu d'une ligne à l'aide d'un quantificateur d'expressions rationnelles. \{n} sur le tous méta-caractère . .

:%s/^.\{14}/& /

Cela ajoute un espace de 14 caractères à partir de la gauche sur chaque ligne. Bien entendu % pourrait être remplacée par l'une des options ci-dessus pour spécifier l'étendue d'un ex commande.

40voto

Nigu Points 452

Lors du premier A, je me mettais en mode visuel en bloc ctrl-v sélectionnez les lignes que vous souhaitez modifier, appuyez sur I (insérer le mode avec la majuscule i ), et j'applique les modifications que je souhaite à la première ligne. Quitter le mode visuel esc appliquera toutes les modifications de la première ligne à toutes les lignes.

Ce n'est probablement pas le plus efficace en termes de nombre de frappes, mais il vous donne toute la liberté que vous souhaitez avant de quitter le mode visuel. Je n'aime pas devoir spécifier à la main l'étendue de la ligne et de la colonne dans une commande regex.

18voto

Johnsyweb Points 45395

J'utiliserais >} .

Où...

  • > : Déplacements vers la droite et
  • } : signifie jusqu'à la fin du paragraphe

J'espère que cela vous aidera.

16voto

Jubi Points 177
  1. Ctrl + v (pour entrer en mode visuel)
  2. Utiliser les touches fléchées pour sélectionner les lignes
  3. Maj + i (permet d'accéder au mode insertion)
  4. Appuyez sur les touches d'espacement ou sur ce que vous voulez taper devant les lignes sélectionnées.
  5. Enregistrez les modifications (Utilisez :w) et vous verrez maintenant les modifications dans toutes les lignes sélectionnées.

7voto

romainl Points 55506

Je ferais comme Nigu. Une autre solution consiste à utiliser :normal :

  1. <S-v> pour entrer dans le mode VISUAL-LINE
  2. 3j o jjj o /D<CR> pour sélectionner les lignes
  3. :norm I<Space><Space> , la plage correcte ( '<,'> ) étant inséré automatiquement

:normal est probablement un peu exagéré pour ce cas précis, mais il peut arriver que vous souhaitiez effectuer un certain nombre d'opérations complexes sur une série de lignes.

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