2009-09-25 4 views
12

Disons que j'ai un mot sélectionné en mode visuel. Je voudrais effectuer une substitution sur ce mot et toutes les autres instances de ce mot dans un fichier en utilisant s //. Est-il possible d'utiliser le texte en surbrillance dans la partie s/<here>/stuff/ sans avoir à le retaper?Dans VIM, est-il possible d'utiliser le texte sélectionné dans la clause de remplacement sans le retaper?

+0

J'ai toujours trouvé gênant que la ligne de commande de vim n'ait accès à aucun registre, etc. – inkedmn

+0

Je suis entièrement d'accord avec cela. Cela ferait une énorme différence. –

+4

@inkedmn: Que voulez-vous dire qu'il n'a pas accès aux registres? ctrl-r vous permet clairement d'accéder aux registres de copier/coller. –

Répondre

17

Bien sûr. Si vous avez sélectionné le mot, juste « y » ank, puis tapez:

:%s/<ctrl-r>"/something else/g 

Où est appuyant sur la touche ctrl avec la touche r, et « est juste » caractère.

: Toutes les pressions sur les touches

y:%s/<ctrl-r>"/what to put/g<enter> 
+0

Wow, cool! Où puis-je trouver cette astuce dans la documentation de vim? – innaM

+0

Incertain. Ctrl-r est une chose assez connue. –

+0

@Manni:: h c_CTRL-R –

4

Si vous avez cherché votre texte avant de pouvoir utiliser

CTRL-R/

pour insérer le dernier élément de recherche dans votre recherche et chaîne de remplacement.

Vous pouvez consulter cette page pour d'autres trucs similaires:

http://www.vim.org/htmldoc/insert.html

0

Une autre façon d'accéder à enregistrer le contenu de la ligne de commande est par @ des variables. Donc, si vous tirez du texte dans le registre par défaut, il sera dans une variable appelée @".

:exe '%s/' . @" . '/stuff/' 

Voici une carte pour rendre cela facile à saisir:

vmap <Leader>s y:exe '%s/' . @" . '//g'<Left><Left><Left> 

vous pouvez maintenant mettre en évidence quelque chose en mode visuel, le type \s, tapez votre remplacement et cliquez sur Enter. La version de depesz fait aussi une bonne cartographie (presque exactement comme il l'a tapée):

vmap <Leader>s y:%s/<c-r>"//g<Left><Left> 
4

Vous ne devez pas tirer sur le mot, placez votre curseur sur le mot, puis:

:%s/<C-r><C-w>/bar/g
+0

Doux! C'est un autre dont j'étais curieux! –