Parfois, je souhaite modifier un certain bloc de texte visuel sur plusieurs lignes.
Par exemple, je prendrais un texte qui ressemble à ceci:
name comment phone email
Et fais comme ça
vendor_name vendor_comment vendor_phone vendor_email
Actuellement, je le ferais maintenant …
" vendor_"
sans le devis. Notez l’espace supplémentaire que nous avons dû remettre. Je n’ai pas besoin d’indenter s’il y a au moins une colonne d’espacement avant les mots. Je n’aurais pas besoin de l’espace si je n’avais pas à effacer le bloc visuel avec c .
Mais si je dois effacer, y a-t-il un moyen de faire ce que j’ai réalisé ci-dessus sans créer les espaces blancs nécessaires avec indentation?
De plus, pourquoi l’édition de plusieurs lignes à la fois ne fonctionne-t-elle qu’en quittant le mode d’insertion avec esc sur ctrl c ?
Modifier:
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 ferais le bloc visuel vertical sur le .
, puis réinsérez-le en mode insertion, c’est-à-dire tapez .whatever.
. J’espère que maintenant vous pouvez voir l’inconvénient de cette méthode. Je suis limité à sélectionner uniquement une colonne de texte qui sont tous les mêmes dans une position verticale .
name
n
. I
(majuscule i). vendor_
. Un I
majuscule doit être utilisé plutôt qu’un minuscule i
car le minuscule i
est interprété comme le début d’un object texte , ce qui est plutôt utile en soi, par exemple pour sélectionner un bloc de tag à l’intérieur:
Une autre approche consiste à utiliser le . ( dot
) commande en combinaison avec I.
vendor_
) Je trouve que cette technique est souvent plus rapide que le mode bloc visuel pour un petit nombre d’ajouts et présente l’avantage supplémentaire que si vous n’avez pas besoin d’insérer le texte sur chaque ligne d’une plage, vous pouvez facilement les sauter en appuyant sur j s.
Notez que pour un grand nombre d’ajouts contigus, l’approche par blocs ou la macro sera probablement supérieure.
Je voudrais utiliser une macro pour enregistrer mes actions, puis le répéter.
qq
pour commencer à enregistrer dans le tampon q
. i
pour passer en mode insertion et tapez vector_
, puis appuyez sur ESC
pour quitter le mode insertion. 0
pour revenir au début de la ligne. j
pour descendre. q
nouveau sur q
pour arrêter l’enregistrement. Vous avez maintenant une belle macro.
Tapez 3@q
pour exécuter votre macro 3 fois pour faire le rest des lignes.
:%s/^/vendor_/
ou est-ce que je manque quelque chose?
Presse:
Tapez le nouveau texte.
Mis à jour en janvier 2016
Bien que la réponse acceptée soit une excellente solution, il s’agit en fait d’un peu moins de frappes, et les échelles sont meilleures, en principe basées sur la réponse acceptée.
name
n
. I
vendor_
.
Notez que cela a moins de frappes que la réponse acceptée fournie (comparez l’étape 3). Nous comptons simplement le nombre de j actions à effectuer.
Si vous avez activé les numéros de ligne (comme illustré ci-dessus) et que vous connaissez le numéro de ligne que vous souhaitez déplacer, l’étape 3 peut être modifiée en # G où # est le numéro de ligne souhaité.
Dans notre exemple ci-dessus, ce serait 4G . Cependant, en ne traitant que quelques numéros de ligne, un décompte explicite fonctionne bien.
Supposons que vous ayez ce fichier:
something name comment phone email somethine else and more ...
Vous voulez append “vendor_” devant “name”, “comment”, “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 supprimer cela si vous ne voulez pas l’invite.
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 sélectionner le bloc “World” dans les deux lignes.
Tapez c pour changer – Maintenant vous serez en mode insertion.
Insérez les choses que vous voulez et appuyez sur échapper.
Les deux sont réfléchis verticalement. Cela fonctionne exactement comme «je» sauf qu’il remplace le bloc par le nouveau texte au lieu de l’insérer.
Je voulais commenter beaucoup de lignes dans un fichier de configuration sur un serveur qui n’avait que vi (pas de nano), donc la méthode visuelle était trop lourde. Voici comment je l’ai fait.
vi file
:set number!
ou :set number
:35,77s/^/#/
Note: les chiffres sont inclus, les lignes de 35 à 77, toutes deux incluses, seront modifiées.
Pour :35,77s/^#//
, utilisez simplement :35,77s/^#//
Si vous souhaitez append un mot de texte en tant que commentaire après chaque ligne de code, vous pouvez également utiliser:
:35,77s/$/#test/
(pour les langages comme Python)
:35,77s/;$/;\/\/test/
(pour les langages comme Java)
crédits / références:
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
C’est une vieille question, mais je veux proposer une alternative 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 ligne norm
== Exécutez les touches suivantes en mode normal I
== Insérer en début de ligne XYZ
== Le texte que vous voulez entrer Ensuite, 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_