Comment rechercher le texte sélectionné dans Vim?

61

Je suis conscient que je peux utiliser /suivi d'une regex pour chercher quelque chose. Et je peux utiliser ?pour rechercher en arrière. Et je peux utiliser net Nrépéter la recherche en avant et en arrière.

Il y a aussi deux bons raccourcis: *ou #cherchera le mot sous le curseur (avant / arrière). C'est très utile! (il y a aussi g*et g#variantes)

Mais ... Une fois que j'ai sélectionné le texte en mode visuel ( v), comment puis-je demander à Vim de rechercher exactement ce texte? Un rapide coup d'œil :helpne m'a pas aidé, hein.

Denilson Sá Maia
la source
3
Lié à Rechercher une sélection dans Vim .
Rodrigue
Merci pour les conseils avec *et #! Serait bien si votre question expliquerait aussi quoi g*et g#ferait;)
winklerrr

Réponses:

22

La séquence suivante fera ce que vous voulez, en fonction d'un bloc de texte déjà sélectionné:

  • y(yank le texte sélectionné, dans le "registre par défaut)
  • / (entrer en mode de recherche)
  • ( \ V) (facultatif, entrez en mode "très peu magique" *)
  • Ctrl+ r "(insérer le texte du "registre)
  • Enter (Engager!)

(*) Le mode "très peu de magie" interprète le texte suivant comme du texte brut au lieu d'une expression régulière. notez cependant que \et /sont toujours spéciaux et devront être traités de manière différente. Si le texte ne contient aucun caractère considéré comme spécial, vous pouvez ignorer cette étape.

Source: Wiki Conseils Vim

Glennsl
la source
1
Merci! Cela est beaucoup plus compréhensible que le « How-To » sur la vim.wikia la page
winklerrr
64

Vous pouvez d’abord tirer le texte en surbrillance. ensuite

  • /

  • Ctrlr

  • "

Ce qui va coller ce que vous avez tiré après le /.

hoge
la source
7
Belle idée ... sauf que le texte collé sera interprété comme une regex, ce qui n'est pas souhaité. :-(
Denilson Sá Maia
4
Si cela vous convient presque, vous pouvez le faire à la /\V<C-r>"place. En ajoutant les éléments \Và votre requête de recherche, vous indiquez à vim d’utiliser "très peu de magie". Les barres obliques inverses peuvent encore vous causer des problèmes. Voir:help \V
idbrii
3
Il peut être utile d'expliquer que Ctrl+Rvous accédez ainsi à un registre et qu'il *s'agit simplement du registre du presse-papier du système. Par exemple, vous pouvez également faire: yawinsérer un mot dans le registre "(le registre par défaut), puis /<C-r>"rechercher cette chaîne.
Ben Davis
5
@ DenilsonSá - Vous pouvez utiliser cette solution, mais au lieu d'utiliser /pour effectuer votre recherche, utilisez-la ?plutôt, car les recherches inversées échappent par défaut aux barres obliques. Ensuite, vous pouvez appuyer sur Npour poursuivre votre recherche en avant.
Brad Parks
7

Je n’ai jamais ressenti le besoin d’une telle fonctionnalité, mais, étant donné que vous pouvez trouver une quelconque fonctionnalité sur Vim, je pense que cela devrait aider:

Rechercher du texte sélectionné visuellement

Je ne l'ai pas testé mais, en regardant le code, il semble être exactement ce que vous recherchez.

slhck
la source
4

Vous pouvez trouver une méthode pour créer ce comportement ici sur le wiki vim .

akf
la source
Bien, j'ai trouvé que la version permettant d'échapper aux barres obliques était utile. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
artisanat le
1

Cette solution optimise le contexte sélectionné visuellement pour votre recherche vim, même avec des caractères multilignes et d'échappement.

Ajoutez le code suivant en vous .vimrcet recherchez votre contenu sélectionné visuellement par //. Vous pouvez également remplacer globalement le contenu sélectionné par /s. Ou remplacez localement le contexte sélectionné en //premier, puis sélectionnez visuellement une région et :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

La configuration ci-dessus concerne uniquement la recherche. Pour toute ma configuration vim, s'il vous plaît visitez .vimrc

Charles X.-T. Li
la source
0

Dans mes configurations sur deux machines distinctes, si je sélectionne du texte puis que je clique /dessus, il recherche automatiquement le texte sélectionné.

Nathan Fellman
la source
Ce n'est pas le comportement par défaut. Ici, lorsque j'appuie sur / (en mode visuel), il affiche simplement une invite de regex vide, attendant que je tape quelque chose.
Denilson Sá Maia
Bizarre, car je n’ai jamais rien fait pour l’activer.
Nathan Fellman
3
De nombreuses distributions fournissent par défaut une configuration non standard de vim (probablement parce que la configuration standard de vim désactive de nombreuses fonctionnalités utiles, principalement pour la compatibilité vi).
Sleske