Parfois, je souhaite modifier un certain bloc visuel de texte sur plusieurs lignes.
Par exemple, je prendrais un texte qui ressemble à ceci:
name
comment
phone
email
Et donne le comme ça
vendor_name
vendor_comment
vendor_phone
vendor_email
Actuellement, je le ferais maintenant ...
" vendor_"
sans la citation. Remarquez l'espace supplémentaire que nous avons dû redonner.Je n'ai pas besoin d'indenter s'il y a au moins une colonne d'espaces avant les mots. Je n'aurais pas besoin des espaces si je n'avais pas à effacer le bloc visuel avec c.
Mais si je dois effacer, y a-t-il moyen de faire ce que j'ai accompli ci-dessus sans créer les espaces blancs avec indentation nécessaires?
Aussi, pourquoi éditer plusieurs lignes à la fois ne fonctionne-t-il qu'en sortant du mode insertion avec esc plus de ctrlc?
Edit:
Voici un exemple plus compliqué
name = models.CharField( max_length = 135 )
comment = models.TextField( blank = True )
phone = models.CharField( max_length = 135, blank = True )
email = models.EmailField( blank = True )
à
name = models.whatever.CharField( max_length = 135 )
comment = models.whatever.TextField( blank = True )
phone = models.whatever.CharField( max_length = 135, blank = True )
email = models.whatever.EmailField( blank = True )
dans cet exemple, je voudrais exécuter le bloc visuel vertical sur le .
, puis le réinsérer en mode insertion, c'est-à-dire taper .whatever.
. J'espère que maintenant vous pouvez voir les inconvénients de cette méthode. Je suis limité à la sélection d'une colonne de texte qui sont tous identiques dans une position verticale.
n
dans name
.I
(capital i).vendor_
.Un I
majuscule doit être utilisé plutôt qu'un i
minuscule, car le i
minuscule est interprété comme le début d'un objet texte , ce qui est plutôt utile en soi, par exemple. pour sélectionner un bloc de balises ( it
):
Une autre approche consiste à utiliser le . (dot
) en combinaison avec I.
vendor_
)Je trouve que cette technique est souvent plus rapide que le mode bloc visuel pour un petit nombre d’additions et présente l’avantage supplémentaire que si vous n’avez pas besoin d’insérer du texte sur chaque ligne d’une plage, vous pouvez facilement les ignorer en appuyant sur extra j's.
Notez que pour un grand nombre d'ajouts contigus, l'approche par blocs ou la macro sera probablement supérieure.
Presse:
Tapez le nouveau texte.
Je voudrais utiliser une macro pour enregistrer mes actions, puis répétez-le.
qq
pour commencer l’enregistrement dans le tampon q
.i
pour passer en mode insertion, tapez vector_
, puis appuyez sur ESC
pour quitter le mode insertion.0
pour revenir au début de la ligne.j
pour descendre.q
pour arrêter l'enregistrement.Vous avez maintenant une macro Nice.
Tapez 3@q
pour exécuter votre macro 3 fois pour faire le reste des lignes.
:%s/^/vendor_/
ou est-ce que je manque quelque chose?
Mis à jour en janvier 2016
Bien que la réponse acceptée soit une excellente solution, elle représente en réalité un peu moins de frappes au clavier et évolue mieux - en principe sur la base de la réponse acceptée.
n
dans name
name__.I
name__.vendor_
.Notez que le nombre de frappes au clavier est inférieur au nombre de réponses acceptées fournies (comparez l’étape 3). Nous ne comptons que le nombre d'actions j à effectuer.
Si les numéros de ligne sont activés (comme illustré ci-dessus) et que vous connaissez le numéro de ligne que vous souhaitez déplacer, vous pouvez passer à l'étape 3 en #G où # est le numéro de la ligne recherchée.
Dans notre exemple ci-dessus, ce serait 4G. Cependant, s’il s’agit de quelques numéros de ligne, un décompte explicite fonctionne bien.
Vous pouvez également avoir un cas d'utilisation où vous souhaitez supprimer un bloc de texte et le remplacer.
Comme ça
Hello World
Hello World
À
Hello Cool
Hello Cool
Vous pouvez simplement visualiser le bloc sélectionné "Monde" dans les deux lignes.
Tapez c pour changer - Vous allez maintenant être en mode insertion.
Insérez le matériel que vous voulez et appuyez sur échapper.
Les deux se reflètent verticalement. Cela fonctionne comme "je" sauf qu'il remplace le bloc par le nouveau texte au lieu de l'insérer.
Supposons que vous ayez ce fichier:
something
name
comment
phone
email
somethine else
and more ...
Vous souhaitez ajouter "vendor_" devant "nom", "commentaire", "téléphone" et "email", quel que soit leur emplacement dans le fichier .
:%s/\<\(name\|comment\|phone\|email\)\>/vendor_\1/gc
Le drapeau c
vous invitera à confirmer. Vous pouvez laisser tomber si vous ne voulez pas l'invite.
Je voulais commenter un lot de lignes dans un fichier de configuration sur un serveur qui ne contenait que vi (no nano), la méthode visuelle était donc fastidieuse.
vi file
:set number!
ou :set number
:35,77s/^/#/
Remarque: les nombres sont inclus, les lignes de 35 à 77, les deux incluses seront modifiées.
Pour supprimer/annuler le commentaire, utilisez simplement :35,77s/^#//
Si vous souhaitez ajouter un texte Word sous forme de commentaire après chaque ligne de code, vous pouvez également utiliser:
:35,77s/$/#test/
(pour des langages comme Python)
:35,77s/;$/;\/\/test/
(pour des langages comme Java)
crédits/références:
C'est une vieille question, mais je souhaite proposer une solution de remplacement plus flexible:
Exemple: Pour entrer le texte XYZ au début de la ligne
:%norm IXYZ
Qu'est-ce qu'il se passe ici?
%
== Exécuter sur chaque lignenorm
== Exécuter les clés suivantes en mode normalI
== Insérer au début de la ligneXYZ
== Le texte que vous souhaitez entrerEnsuite, vous appuyez sur entrée, et il s'exécute.
Spécifique à votre demande:
:%norm Ivendor_
Vous pouvez également choisir une gamme particulière:
:2,4norm Ivendor_
Ou exécutez sur une plage visuelle sélectionnée:
:'<,'>norm Ivendor_
Use Ctrl+V to enter visual block mode
Move Up/Down to select the columns of text in the lines you want to comment.
Then hit Shift+i and type the text you want to insert.
Then hit Esc, wait 1 second and the inserted text will appear on every line
1. ctrl + v to go to visual block
2. select the lines using up and down arrow
3. enter small 3i ( presess SMALL I three times)
4. I (Press capital I, That will take you into insert mode)
4. Write the text you want to add
5. esc
6. press down arrow