84 votes

Comment rechercher le texte sélectionné dans Vim ?

Je suis conscient que je peux utiliser / suivi d'une expression rationnelle pour rechercher quelque chose. Et je peux utiliser ? pour chercher en arrière. Et je peux utiliser n y N pour répéter la recherche en avant et en arrière.

Il existe également deux raccourcis sympathiques : ou # recherche le mot sous le curseur (en avant/en arrière). C'est très utile ! (il existe également g y g# variantes)

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

1voto

dcadf dfbdf Points 11

Les autres réponses ici cassent p puisqu'ils remplacent le registre sans nom. " . Voici une solution qui ne présente pas ce problème :

vnoremap ml :<c-u>let temp_variable=@"<CR>gvy:<c-u>let @/='\V<C-R>=escape(@",'/\')<CR>'<CR>:let @"=temp_variable<CR>:<c-u>set hlsearch<CR>

Cette solution ne permet pas non plus de passer à l'instance suivante du motif, ce que je trouve gênant s'il est hors cadre dans la fenêtre actuelle.

0voto

Nathan Fellman Points 8972

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

0voto

Xintong Li Points 1

Cette solution permet à votre recherche vim de sélectionner visuellement le contexte, même avec des caractères multilignes et d'échappement.

Ajoutez le code suivant dans votre .vimrc et recherchez votre contenu sélectionné visuellement par // . Vous pouvez également substituer globalement le contenu sélectionné en /s . Ou substituer localement le contexte sélectionné par // d'abord, puis sélectionner 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 ne concerne que la recherche. Pour toutes mes configurations de vim, veuillez visiter .vimrc

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X