Comment remplacer un mot par un mot tiré en mode normal

25

Lorsque je dois remplacer un mot par un autre que j'ai déjà tiré, j'utilise généralement un flux de travail qui me semble peu naturel:

Disons que j'ai ce texte:

foo bar buzz

Et je veux tirer fooet remplacer barpar ce que j'ai tiré auparavant.

Après avoir tiré foo, je vois les options suivantes:

Option 1

  1. Placez le curseur sur baravecw

  2. Mettre foodevant baravecP

  3. Placez le curseur sur le breste baret supprimez le mot avecde

Option 2

  1. Placez le curseur sur la barre avec w

  2. Utilisez depour effacerbar

  3. Mettre le contenu du registre 0 avec "0P(depuis que j'ai effacé bar, foon'est plus accessible avec un simple p)

Les deux façons me semblent trop compliquées et je suis sûr qu'il existe un moyen plus efficace de réaliser cette action, mais je ne trouve pas comment. Cette idée serait de combiner les actions de suppression et de mise en une seule, ou du moins d'éviter de conserver le mot supprimé dans le registre de coupure afin que je puisse mettre le mot souhaité avec un simple p.

Je connais également le mode de remplacement déclenché Rmais il ne permet pas de mettre ce qui a été retiré.

TL; DR : Comment remplacer un mot par le contenu du registre yank?

statox
la source

Réponses:

31

En supposant que vous avez déjà tirai fooavec yeou quelque chose de semblable, et que le curseur se trouve quelque part foo, vous pouvez utiliser Wvep:

  • Waller bar(c'est évidemment optionnel et cela dépendra de la position actuelle du curseur);
  • v pour démarrer le mode visuel;
  • epour aller à la fin du mot (vous pouvez également utiliser d'autres mouvements ici, comme iw);
  • pcoller foo; cela remplacera la sélection visuelle actuelle (qui est placée dans le registre sans nom, "").
Martin Tournoij
la source
2
Vous pouvez être intéressé par les épisodes vimcast suivants: Collage à partir du mode visuel et Échange de deux régions de texte avec exchange.vim
Peter Rincker
6

J'ai trouvé une autre façon de le faire, elle est un peu similaire à l'option 2 mais elle a l'avantage de ne pas gâcher l'état des registres.

L'idée est d'utiliser le " registre des trous noirs ": ce registre est accessible via "_et a la particularité que vous pouvez y écrire mais pas le lire, donc comme un trou noir ce registre fait totalement disparaître tout ce qui y entre. Ici, nous pouvons l'utiliser afin de foorester dans le registre yank même après la barsuppression.

Avec cette solution, le flux de travail après un coup sec fooserait:

  • Aller baravec W(ou tout mot nécessaire bien sûr)
  • Utilisation du "registre des trous noirs" pour supprimer baravec"_de
  • Mettre à foopartir du registre yank avec P. Le registre yank contient toujours foodepuis barest entré dans le trou noir.

Je ne suis pas sûr que ce soit une meilleure solution que celle de @ Carpersmoker ( en termes de victoires de vimgolf @Carpetsmoker ) mais je ne connaissais pas le registre des trous noirs et je pensais que certains pourraient être intéressés de le savoir.

statox
la source
3
  1. Allez au début de "foo". Appuyez sur yiw. Cela arrache le mot intérieur.

  2. Allez dans "bar" en appuyant sur la lettre w. Ensuite, sélectionnez-le et tirez:viw"0p

J'utilise ciwet yiwbeaucoup.

Xabierrek
la source
4
L'utilisation d'objets texte comme iwest intéressante mais votre solution est en fait la même que celle de @ CarpetSmoker: sélectionner visuellement le deuxième mot et mettre le premier. Je pense également que votre solution fonctionnerait avec un simple pau lieu d'utiliser un "0registre.
statox
1
  • Lorsque le curseur se trouve n'importe où sur le mot,

    • yiw- arrachez le mot et enregistrez-le dans le 0registre.
  • Accédez au mot cible à remplacer

    • ciw supprimera le mot et vous mettra en mode insertion.
    • ctrl-r. Un "message apparaîtra demandant le registre à invoquer.
    • 0 va coller le mot tiré.

Les mots tirés sont (normalement!) Stockés dans le 0registre. Voir :registerspour afficher les tampons stockés. Cela peut sembler une procédure longue, à mon humble avis, cela ouvre la porte à des astuces de registre beaucoup plus sophistiquées.

Sam Yam
la source