480 votes

Comment insérer du texte au début d'une sélection multi-lignes dans vi/Vim

Sur Vim Comment insérer des caractères au début de chaque ligne d'une sélection ?

Par exemple, je veux commenter un bloc de code en ajoutant le préfixe // au début de chaque ligne en supposant que le système de commentaires de ma langue n'autorise pas les commentaires en bloc, tels que /* */ . Comment dois-je m'y prendre ?

853voto

pixelbeat Points 12073
  • Appuyez sur Esc pour entrer en "mode commande".
  • Utilice Ctrl + V pour passer en mode bloc visuel
  • Déplacements Up / Down pour sélectionner les colonnes de texte dans les lignes que vous voulez commentaire.
  • Ensuite, appuyez sur Shift + i et tapez le texte que vous voulez insérer.
  • Ensuite, appuyez sur Esc attendez 1 seconde et le texte inséré apparaîtra sur chaque ligne.

Pour plus d'informations et de lectures, consultez " Insertion de texte sur plusieurs lignes "dans le Vim Tips Wiki.

6 votes

Le seul inconvénient est qu'il semble que Ctrl+V soit remplacé dans le GVIM.

16 votes

Pas pour moi (sous linux).

25 votes

Vous pouvez utiliser Ctrl-Q comme remplacement dans gVim (comme l'explique :help Ctrl-V) mais vous devez utiliser hjkl pour naviguer dans ce mode plutôt que les touches fléchées

208voto

Tomalak Points 150423

Cela remplace le début de chaque ligne avec "//" :

:%s!^!//!

Cela remplace le début de chaque ligne sélectionnée (utiliser le mode visuel pour sélectionner) avec "//" :

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

Note que gv (en mode normal) rétablit la dernière sélection visuelle, ce qui s'avère utile de temps en temps.

4 votes

Merci ! C'est tout à fait logique. Et la suppression du texte se fait comme suit : '<,'>s!^// !!

4 votes

Quelle est la signification des points d'exclamation dans la réponse ci-dessus ? (:%s!^!// !)

20 votes

@HKK, normalement on utilise la barre oblique / comme délimiteur pour la commande de recherche et de remplacement. Dans ce cas, nous insérons une barre oblique dans le cadre de la recherche et du remplacement et nous utilisons donc un autre délimiteur, à savoir le caractère d'exclamation !

94voto

cyber-monk Points 2597

Le modèle général de recherche et de remplacement est le suivant :

:s/search/replace/

Remplace la première occurrence de 'search' par 'replace' pour la ligne en cours.

:s/search/replace/g

Remplace toutes les occurrences de 'search' par 'replace' pour la ligne en cours, 'g' est l'abréviation de 'global'.

Cette commande remplacera chaque occurrence de 'search' par 'replace' pour la ligne en cours uniquement. Le % est utilisé pour rechercher dans l'ensemble du fichier. Pour confirmer chaque remplacement de manière interactive, ajoutez un 'c' pour confirmer :

:%s/search/replace/c

Confirmation interactive du remplacement de "search" par "replace" pour l'ensemble du 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 ligne) :

:14,20s/^/#/

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

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

:14,20s!^!//!

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

Ou vous pouvez toujours échapper les 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 les numéros de ligne dans votre éditeur, tapez simplement ce qui suit

:set nu

0 votes

Pour supprimer le début du # : au lieu de :14,20s/#/^/, vous devriez utiliser :14,20s/#//

1 votes

@cn1h Je pense que cela va remplacer d'autres # dans la ligne également. Vous devez utiliser ^# à la place.

0 votes

Merci d'avoir expliqué les principes de base. C'est bon de savoir pourquoi quelque chose arrive.

47voto

ninegrid Points 778

Un autre moyen qui pourrait être plus facile pour les nouveaux arrivants :

 some
 code
 here

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

gg

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

I / / Space

 // some
 code
 here

Appuyez sur Esc pour revenir au mode commande et utiliser le digraphe :

j . j .

 // some
 // code
 //here

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

3 votes

C'est très simple :). Si vous avez des difficultés, c'est peut-être parce que vous tapez une barre (l'autre symbole avec votre \). | au lieu d'une capitale I . Je pensais que c'était un | au début.

1 votes

Si je fais "5.", il supprime 5 caractères de la même ligne. Comment faire pour qu'il supprime 5 caractères à la fois sur chaque ligne ?

1 votes

@RahulPrasad Disons que vous avez 25 lignes, en commençant au début de la première ligne, il suffit d'enregistrer 5xj dans un registre et de jouer ce registre 24 fois, par exemple : qa5xjq25@a Mais il serait préférable que vous posiez cette question en tant que question réelle si elle n'existe pas déjà...

28voto

Steve K Points 534

Et encore une autre façon :

  • Se déplacer au début d'une ligne
  • passer en mode Blocage visuel ( CTRL - v )
  • sélectionnez les lignes que vous voulez (en vous déplaçant vers le haut/bas avec j / k ou en sautant à une ligne avec [ligne]. G )
  • presse I (c'est un i majuscule)
  • tapez le(s) caractère(s) du commentaire
  • presse ESC

0 votes

Merci, cela aide beaucoup à modifier les fichiers dans les serveurs sans plugin supplémentaire de VI.

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