Como procurar o texto selecionado no Vim?

61

Estou ciente de que posso usar /seguido por um regex para pesquisar algo. E eu posso usar ?para pesquisar para trás. E eu posso usar ne Nrepetir a pesquisa para frente e para trás.

Existem também dois atalhos interessantes: *ou #procurará a palavra sob o cursor (avançar / retroceder). Isso é muito útil! (também existem g*e g#variantes)

Mas ... Depois de selecionar o texto usando o modo visual ( v), como posso pedir ao Vim para pesquisar exatamente esse texto? Um rápido olhar para :help... não me ajudou.

Denilson Sá Maia
fonte
3
Relacionado a Procurar seleção no Vim .
213 Rodriguez
Obrigado pelas dicas com *e #! Seria bom se a sua pergunta também poderia explicar o que g*e g#faria;)
winklerrr

Respostas:

22

A sequência a seguir fará o que você deseja, considerando um bloco de texto já selecionado:

  • y(puxe o texto selecionado para o "registro por padrão)
  • / (entre no modo de pesquisa)
  • ( \ V) (opcional, entre no modo "muito sem mágica" *)
  • Ctrl+ r "(inserir texto do "registro)
  • Enter (Se empenhar!)

(*) O modo "very no magic" interpreta o texto a seguir como texto sem formatação em vez de como uma expressão regular. Note no entanto que \e /ainda são especiais e terá de ser tratada de outras maneiras. Se o texto não possuir caracteres considerados especiais, você poderá pular esta etapa.

Fonte: Vim Tips Wiki

Glennsl
fonte
1
Obrigado! Isso é muito mais compreensível do que o "How-To" no vim.wikia página
winklerrr
64

Você pode puxar o texto destacado primeiro. Então

  • /

  • Ctrlr

  • "

Que irá colar o que você arrancou após o /.

hoge
fonte
7
Boa ideia ... exceto que o texto colado será interpretado como uma expressão regular, o que não é desejado. :-(
Denilson Sá Maia
4
Se isso é quase bom o suficiente para você, então você poderia fazer /\V<C-r>". Anexando \Và sua consulta de pesquisa, você diz ao vim para usar "very no magic". As barras invertidas ainda podem causar problemas. Veja:help \V
idbrii
3
Pode ajudar a explicar que Ctrl+Ré assim que você acessa um registro e *é simplesmente o registro da área de transferência do sistema. Por exemplo, você também pode fazer: yawpuxar uma palavra para registrar "(o registro padrão) e, em seguida, /<C-r>"procurar essa sequência.
Ben Davis
5
@ DenilsonSá - Você pode usar esta solução, mas, em vez de usar /para fazer sua pesquisa, use-o ?, pois as pesquisas reversas escapam às barras por padrão. Em seguida, você pode pressionar Npara continuar sua pesquisa na direção direta.
Brad Parks
7

Eu nunca senti a necessidade desse recurso, mas, considerando que você pode encontrar um recurso no Vim, acho que isso deve ajudar:

Pesquise o texto selecionado visualmente

Não testei, mas, olhando o código, parece exatamente o que você está procurando.

slhck
fonte
4

Você pode encontrar um método para criar esse comportamento aqui no wiki do vim .

akf
fonte
Bom, achei a versão para escapar das barras útil. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
craft
1

Esta solução capacita o contexto visualmente selecionado da pesquisa vim, mesmo com caracteres de múltiplas linhas e de escape.

Adicione o seguinte código em você .vimrce pesquise o conteúdo selecionado visualmente por //. Você também pode substituir globalmente o conteúdo selecionado por /s. Ou Substitua localmente o contexto selecionado por //primeiro e, em seguida, selecione visualmente uma região e :'<,'>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

A configuração acima é apenas sobre pesquisa. Para toda a minha configuração do vim, visite .vimrc

Charles X.-T. Li
fonte
0

Nas minhas configurações em duas máquinas separadas, se eu selecionar texto e clicar /nele, procurarei automaticamente o texto selecionado.

Nathan Fellman
fonte
Esse não é o comportamento padrão. Aqui, quando pressiono / (no modo visual), ele mostra apenas um prompt de regex vazio, esperando que eu digite alguma coisa.
Denilson Sá Maia
Estranho, porque nunca fiz nada para habilitá-lo.
Nathan Fellman
3
Muitas distribuições enviam uma configuração não padrão do vim como padrão (provavelmente porque a configuração padrão do vim desativa muitos recursos úteis, principalmente para compatibilidade com o vi).
sleske