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 !

4voto

Codie CodeMonkey Points 3936

Vous pouvez sélectionner les lignes en mode visuel et taper > . Cela suppose que vous avez configuré vos tabulations pour insérer des espaces, par exemple :

setl expandtab
setl shiftwidth=4
setl tabstop=4

(remplacez 4 par votre préférence en matière d'indentation)

Si les lignes forment un paragraphe, >ap en mode normal décale l'ensemble du paragraphe au-dessus et au-dessous de la position actuelle.

3voto

Alex P Points 344

Supposons que vous souhaitiez déplacer un bloc de code :

  • configure le nombre d'espaces utilisés par chaque commande de décalage, :set shiftwidth=1 La valeur par défaut est 8.
  • presse Ctrl+v à l'endroit approprié et déplacer le curseur vers le haut k ou vers le bas j pour sélectionner une zone.
  • presse > pour déplacer le bloc et . pour répéter l'action jusqu'à la position souhaitée (si le curseur est manqué, revenir en arrière avec h o b ).

move block of code

2voto

Steven Hall Points 61

Vous pouvez également essayer une macro. Si vous ne le savez pas encore, vous démarrez une macro avec q et sélectionner le registre pour sauvegarder la macro... ainsi pour sauvegarder votre macro dans le registre a vous devez taper qa en mode normal.

Au bas de la page, il doit y avoir une mention indiquant "enregistrement". Il ne vous reste plus qu'à faire vos mouvements comme vous le souhaitez.

Dans ce cas, vous vouliez 2 espaces devant chaque ligne, donc avec votre curseur au début de la première ligne, passez en mode insertion, et appuyez deux fois sur espace. Ensuite, appuyez sur Echap pour passer en mode normal, puis descendez à la ligne suivante, puis au début de cette ligne, et appuyez sur q . Ceci termine et enregistre la macro

(pour que tout soit regroupé en un seul endroit, voici la liste complète des combinaisons de touches à utiliser, où <esc> c'est lorsque vous appuyez sur la touche d'échappement, et <space> est l'endroit où vous appuyez sur la barre d'espacement : qai<space><space><esc>j0q Cette opération enregistre la macro dans le registre a )

Pour rejouer la macro, il faut maintenant faire @ suivi du registre dans lequel vous l'avez enregistré... donc dans cet exemple @a . Désormais, la deuxième ligne sera également précédée de deux espaces.

Les macros peuvent également être exécutées plusieurs fois. 3@a la macro s'exécute trois fois et vous n'avez plus rien à faire.

J'aime utiliser des macros pour ce genre de choses parce que c'est plus intuitif pour moi, parce que je peux faire exactement ce que je veux qu'il fasse, et le rejouer plusieurs fois.

0voto

Je cherchais une solution similaire, et j'ai utilisé cette variante

VG:norm[N]I

N = numbers of spaces to insert. 
V=Crtl-V 
*** Notice ***  put space immediate after I.

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