web-dev-qa-db-fra.com

Comment insérer du texte au début d'une sélection multiligne dans vi/Vim?

Dans Vim , comment pourrais-je insérer des caractères au début de chaque ligne d'une sélection?

Par exemple, supposons que je veuille commenter un bloc de code en ajoutant // au début de chaque ligne (en supposant que le système de commentaires de ma langue n'autorise pas les commentaires de bloc comme /* */). Comment je ferais ça?

358
Jordan Parmer
  • Presse Esc entrer en 'mode de commande'
  • Utilisation Ctrl+V entrer en mode bloc visuel
  • Bouge toi Up/Downsélectionner les colonnes de texte dans les lignes que vous souhaitez commenter.
  • Puis frappe Shift+i et tapez le texte que vous souhaitez insérer.
  • Puis frappe Esc, attendez 1 seconde et le texte inséré apparaîtra sur chaque ligne.

Pour plus d'informations et pour lire, consultez cet article connexe sur le wiki vim .

655
pixelbeat

Ceci remplace le début de chaque ligne par "//":

:%s!^!//!

Ceci remplace le début de chaque ligne sélectionnée (utilisez le mode visuel pour sélectionner) par "//":

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

Remarque que gv (en mode normal) restaure la dernière sélection visuelle, cela est pratique de temps en temps.

162
Tomalak

Le schéma général pour rechercher et remplacer est le suivant:

:s/search/replace/

Remplace la première occurrence de 'search' par 'replace' pour la ligne actuelle

:s/search/replace/g

Remplace toutes les occurrences de 'recherche' par 'remplacer' pour la ligne actuelle, 'g' est l'abréviation de 'global'

Cette commande remplacera chaque occurrence de 'search' par 'replace' pour la ligne actuelle uniquement. Le% est utilisé pour rechercher dans tout le fichier. Pour confirmer chaque remplacement de manière interactive, ajoutez un «c» pour confirmer:

:%s/search/replace/c

Interactive confirme le remplacement de 'search' par 'replace' pour tout le fichier

Au lieu du caractère%, vous pouvez utiliser une plage de numéros de ligne (notez que le caractère '^' est un caractère de recherche spécial pour le début de la ligne) :

:14,20s/^/#/

Insère un caractère '#' au début des lignes 14-20

Si vous voulez utiliser un autre caractère de commentaire (comme //), changez le délimiteur de commande:

:14,20s!^!//!

Insère une séquence de caractères '//' au début des lignes 14-20

Ou vous pouvez toujours simplement échapper aux // caractères comme:

:14,20s/^/\/\//

Insère une séquence de caractères '//' au début des lignes 14-20

Si vous ne voyez pas de numéro de ligne dans votre éditeur, tapez simplement le texte suivant:

:set nu
73
cyber-monk

Une autre façon qui pourrait être plus facile pour les nouveaux arrivants:

 some█
 code
 here

Placez le curseur sur la première ligne, par exemple par

:1Enter

et tapez ce qui suit pour entrer en mode insertion et ajouter votre texte:

I//Space

 // █some
 code
 here

Presse Esc pour revenir en mode commande et utiliser le digraphe:

j.j.

 // some
 // code
 //█here

j est une commande de mouvement pour descendre une ligne et . répète la dernière commande d'édition que vous avez faite.

33
ninegrid

Et encore une autre façon:

  • Se déplacer au début d'une ligne
  • entrer en mode bloc visuel (CTRL-v)
  • sélectionnez les lignes que vous voulez (monter/descendre avec j/k, ou sauter à une ligne avec [line]G)
  • presse I (c'est capital i)
  • tapez le ou les caractères de commentaire
  • presse ESC
23
Yewge

Ceci ajoute # au début de chaque ligne:

:%s/^/#/

Et les gens vont cesser de se plaindre de votre manque de commentaires appropriés.

17
Jar-jarhead

Si vous voulez être très chic, mettez ceci dans votre fichier .vimrc:

vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>

Ensuite, chaque fois que vous êtes en mode visuel, vous pouvez appuyer sur \c pour c omment le bloc et \u pour u le commenter. Bien sûr, vous pouvez modifier ces raccourcis clavier.

14
Lucas Oman

Encore une autre manière: 

:'<,'>g/^/norm I//

/^/ est juste un modèle factice pour correspondre à chaque ligne. norm vous permet d'exécuter les commandes en mode normal qui suivent. I// dit d'entrer en mode insertion en sautant le curseur au début de la ligne, puis d'insérer le texte suivant (deux barres obliques). 

:g est souvent utile pour faire quelque chose de complexe sur plusieurs lignes, où vous pouvez passer d’un mode à l’autre, supprimer ou ajouter des lignes, déplacer le curseur, exécuter un groupe de macros, etc. qui correspondent à un modèle.

9
Brian Carper

Pour les blocs de code de commentaire, j'aime bien le plugin NERD Commenter .

Sélectionnez du texte:

Shift-V
...select the lines of text you want to comment....

Commentaire:

,cc

Uncomment:

,cu

Ou simplement basculer l'état de commentaire d'une ligne ou d'un bloc:

,c<space>
3
Kevin

Je peux recommander le plugin EnhCommentify .

par exemple. mettez ceci à votre vimrc:

let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'

vous pouvez ensuite commenter/décommenter les lignes (sélectionnées) avec ', c'

2

Si la sélection multiligne de quelqu'un est en réalité un paragraphe, il n'est pas nécessaire de sélectionner manuellement les lignes. Vim peut le faire pour vous:

  1. vip: sélectionne et marque le paragraphe entier
  2. shift-i: insère le texte au début de la ligne
  3. escape: quitte le mode insertion/passe en mode normal [débuts de ligne toujours sélectionnés]
  4. escape: désélectionne les débuts de ligne
1
TheUnseen

Marquez la zone à commenter comme un bloc visuel (<C-V)

et faire c#<ESC>p

  1. cchangez-le en "#"
  2. remettre

Si vous le faites souvent, définissez un raccourci (exemple \q) dans votre fichier .vimrc

:vmap \q c#<ESC>p
1
JJoao

Pour insérer "ABC" au début de chaque ligne:

1) Aller en mode commande

2):% norme IN ABC

0
Mac