Il m'arrive parfois de vouloir modifier un bloc de texte visuel sur plusieurs lignes.
Par exemple, je prendrais un texte qui ressemble à ceci :
name
comment
phone
email
Et le faire ressembler à ceci
vendor_name
vendor_comment
vendor_phone
vendor_email
Actuellement, la façon dont je procéderais est la suivante...
- Sélectionnez les 4 lignes d'un bloc en appuyant sur V et ensuite j quatre fois.
- Indenter avec > .
- Reculer d'une lettre avec h .
- Passez en mode de visualisation des blocs avec Ctrlv .
- Sélectionnez les quatre lignes suivantes en appuyant sur j quatre fois. À ce stade, vous avez sélectionné un bloc visuel d'espace blanc de 4x1 (quatre lignes et une colonne).
- Presse C . Remarquez que ce texte est indenté d'une colonne vers la gauche.
- Tapez un
" vendor_"
sans la citation. Remarquez l'espace supplémentaire que nous avons dû ajouter. - Presse Esc . C'est l'une des rares fois où j'utilise Esc pour sortir du mode insertion. Ctrlc ne modifierait que la première ligne.
- Répéter l'étape 1.
- Indenter dans l'autre sens avec < .
Je n'ai pas besoin d'indenter s'il y a au moins une colonne d'espace avant les mots. Je n'aurais pas besoin d'espaces blancs si je ne devais pas effacer le bloc visuel avec c .
Mais si je dois effacer, y a-t-il un moyen de faire ce que j'ai fait ci-dessus sans créer l'espace blanc nécessaire avec l'indentation ?
De même, pourquoi l'édition de plusieurs lignes à la fois ne fonctionne-t-elle qu'en quittant le mode d'insertion à l'aide de la touche Esc plus Ctrlc ?
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, j'effectuerais le bloc visuel vertical sur la page .
puis le réinsérer en mode insertion, c'est-à-dire taper .whatever.
. J'espère que vous voyez maintenant l'inconvénient de cette méthode. Je ne peux sélectionner qu'une colonne de texte. qui sont tous identiques en position verticale .
11 votes
Meilleure solution : ":%s/^/vendeur_/"
1 votes
Merci pour votre réponse. Cela fonctionne si je veux seulement ajouter un mot à chaque ligne. Mais la méthode que j'utilise peut être appliquée à n'importe quelle position. Permettez-moi d'ajouter un autre exemple plus compliqué à mon exemple.
3 votes
Ensuite, mettez en surbrillance les lignes que vous souhaitez modifier avec shift-V, et tapez une commande de recherche et de remplacement appropriée - dans le deuxième exemple,
:s/models\./\0whatever./
0 votes
Il existe de nombreuses façons d'y parvenir. Pour répondre à toutes les parties de la question, la partie 1) peut être réalisée à l'aide d'une expression rationnelle ou en mode visuel, comme le proposent les réponses (je préfère la sélection visuelle dans GVIM). Pour la partie 2), la macro est peut-être la plus simple, comme le propose Brian Neal. La meilleure ressource que je connaisse pour tous ces types de "comment faire" est Practical Vim par Drew Neil. Il s'agit d'un excellent ouvrage de lecture rapide et d'une référence légère lorsque vous oubliez une formule. J'espère que cette recommandation aidera quelqu'un, cela vaudra la peine pour de nombreux utilisateurs de Vim.
0 votes
@Paul : Et si vous êtes compter les frappes de clavier Vous pouvez remplacer
\0
con&
.