85 votes

Vim - yank dans la recherche registre

Est-il facile/moyen rapide de le "tirer" dans vim "dernière recherche" register ("/)?

À partir de la documentation de vim, il semble que la réponse est non, mais qu'elle peut être affectée par un "let" commande:

It is writable with ":let", you can change it to have 'hlsearch' highlight
other matches without actually searching.  You can't yank or delete into this
register.

Idéalement, ce que j'aime faire, c'est quelque chose comme:

"/5yw

ce qui permettrait de tirer sur les 5 prochaines mots sous le curseur et mettre dans la dernière recherche de la mémoire tampon

Sinon, si il y a un moyen de rechercher le contenu d'un nom de registre, ce serait trop de travail. En d'autres termes, si je pouvais le faire:

"A5yw

et puis la recherche de ce qui est dans un registre Un, ce serait trop de travail.

Le plus proche que je peux venir la tirer dans un nom de registre et ensuite copie de ce registre dans la dernière recherche de registre, par exemple

"A5yw
:let @/=@A

Au risque de faire une longue question plus longtemps, je tiens à préciser que ce n'est pas toujours de 5 mots que je voudrais "yank & recherche", parfois c'est plus de 17 caractères, parfois c'est à la fin de la ligne, etc... donc codé en dur macro ne me donne pas la flexibilité que je le voudrais.

114voto

a'r Points 14772

Après avoir appuyé sur / pour saisissez une chaîne de recherche, vous pouvez ensuite utiliser Ctrl-R , puis tapez la lettre qui représente le registre que vous souhaitez utiliser.

par exemple.

  • Tout d'abord, "Ayw arracher un mot dans Un registre
  • Ensuite, / ^R A pour mettre le contenu d'Un registre dans la chaîne de recherche.

42voto

csierra Points 121

Si vous n'avez pas utiliser un registre pour stocker l'arracha de texte vim utilise 0 s'inscrire. Vous pouvez rechercher en tapant Ctrl-R 0 après /.

Un exemple plus compliqué. Dire que vous voulez rechercher dans un autre tampon pour le texte à l'intérieur des guillemets, ce qui est sous le curseur vers la droite maintenant:

  • Vous pouvez le faire avec yi" (yank intérieure de citation)
  • Allez à la mémoire tampon dans laquelle vous souhaitez rechercher
  • Type /Ctrl-R 0

10voto

Nikolay Frantsev Points 534

Je suis en utilisant le code suivant pour que:

vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR>
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR>

    function! VisualSearch(dirrection)
        let l:register=@@
        normal! gvy
        let l:search=escape(@@, '$.*/\[]')
        if a:dirrection=='/'
            execute 'normal! /'.l:search
        else
            execute 'normal! ?'.l:search
        endif
        let @/=l:search
        normal! gV
        let @@=l:register
    endfunction

5voto

Jefromi Points 127932

Donc, fondamentalement, une version étendue de l' # et * les commandes, non? Il semble que vous souhaitez définir une coutume de l'opérateur (une commande qui s'attend à un mouvement). Je ne l'ai jamais fait, mais j'ai trouvé un plugin qui ressemble, il pourrait rendre plus facile à faire. Il y a quelques exemples.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X