Comment remplacer partiellement le texte dans un bloc de texte sélectionné?

14

Pas facile de trouver un joli titre pour mon problème.

Je suis conscient de l'insertion devant un bloc de texte:

Ctrl- v sélectionner du texte de type lignesI ESC

Maintenant, je voudrais le faire, mais aussi en remplaçant une pièce dans ma sélection de blocs. Actuellement, je fais deux opérations

Ctrl- v sélectionner un bloc x revenir en arrière pour commencer

Suivi de la séquence que j'ai mentionnée ci-dessus.

Existe-t-il un moyen de combiner ces deux opérations en sélectionnant ( Ctrl- v) le bloc une seule fois?

Voici un petit exemple:

Je voudrais transformer le bloc suivant

1  text
2  text
3  text
4  text
5  text

dans

new text 
new text 
new text 
new text 
new text

faire une seule "opération".

Patrick B.
la source
1
Je ne suis pas sûr à 100% de ce que vous voulez, peut-être qu'un exemple réel aiderait (ce que vous avez contre ce que vous voulez). Connaissez-vous gv? Il resélectionne la dernière sélection visuelle et pourrait être utile ici.
PhilippFrank

Réponses:

21

Dactylographie c après avoir sélectionné votre bloc au lieu de xsupprimera le texte dans le bloc de sélection et entrera en mode insertion. Une fois que vous avez tapé quelque chose et quitté le mode d'insertion, vous devriez avoir le même changement sur chaque ligne.

Essayer

Ctrl- v- sélectionner un bloc - c- insérer quoi que -Esc

Dumitru
la source
1
    1
   1 1
  1   1
 1111111
 1     1
 1     1
 1     1

Imaginez une rangée de trois lettres majuscules différentes comme celle ci-dessus. ^Ven sélectionnant ce qui précède, je ne pouvais pas changer tous ceux de Ala dernière lettre de la ligne en raison de lignes de longueur inégales. Les lettres majuscules précédentes fonctionnaient bien avec :s/\%V1/T/g "La lettre majuscule précédente était un T fait à partir de '1./T/ .

Mais en sélectionnant la dernière lettre majuscule ci-dessus, cela n'a changé que tous les «1» en «A» au point de l'A *, et le reste est resté un.

* La ligne la plus courte.

Pour rendre toutes les lignes de la même longueur, je les ai rembourrées avec des espaces. (Je suis nouveau sur vim, donc je suis sûr qu'un meilleur script pourrait être écrit.)

Remarque: le pic du A a commencé sur la ligne 2.

let Maxlen = 0
" Find longest line
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a > Maxlen
        Maxlen = a
    endif
endfor

" Append spaces 'til all lines are the same length.
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a < Maxlen
        let b = Maxlen - a
        execute "normal!" . i . "gg0" . b . "A "
    endif
endfor

Après cela, a :s/\%V1/T/g fonctionné comme annoncé sur la dernière lettre majuscule de la ligne.

PS J'ai lu que la executeligne ci-dessus devrait fonctionner sans les points, mais cela n'a pas fonctionné pour moi.

Ron
la source
La ligne d'exécution, se place au début de la ligne i de la lettre majuscule et ajoute des espaces b à la fin de la ligne. «b» est la différence de longueur entre la ligne actuelle et la ligne la plus longue.
Ron