Destacando um termo de pesquisa sem mover o cursor

15

Usando o Vim, às vezes me vejo encarando uma seção do código-fonte por um tempo e de repente quero que alguma variável na tela apareça. Isso é fácil: o /<var>que destaca todos eles. Meu problema é que, na maioria das vezes, a pesquisa muda minha janela, então não estou olhando o código-fonte do mesmo local. Mesmo que tenha mudado apenas algumas linhas, ainda me excita, pois preciso levar alguns segundos para descobrir para onde as coisas foram mudadas.

É possível destacar um termo de pesquisa sem mover o cursor para a próxima correspondência?

Andrew Wood
fonte
2
Não é exatamente uma resposta, mas eu apenas uso dois backticks (``) para pular para onde estava antes.
precisa saber é o seguinte

Respostas:

1

http://vim.wikia.com/wiki/VimTip1572

Se você usou este plug-in, pode simplesmente ativar a funcionalidade

\ m

em seguida, use uma tecla NumPad para atribuir uma cor a essa palavra em qualquer lugar sem mover o cursor.

1

Você pode usar muitos destaques diferentes de uma só vez para muitas palavras diferentes ou padrões de pesquisa mais complexos, se desejar.

lessthanideal
fonte
Eu amo este plugin!
Andrew Wood
15

A resposta da skyblue mostra o núcleo da ideia de como usar o realce de pesquisa normal para realizar o que você deseja.

Estendi essa técnica criando um atalho de teclas que funciona de maneira semelhante ao *comando , mas sem passar para a próxima partida.

Agradeço a garyjohn por apontar o expand()equivalente à *seleção de palavras (para evitar o uso de *si próprio e restaurar a exibição). Isso simplifica o código o suficiente para que ele possa ir diretamente no mapeamento (evita o uso de uma função). Também adicionei um mapeamento que corresponde a palavras parciais (como g*).

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>
Chris Johnsen
fonte
1
Você pode evitar as chamadas para winsaveview (), winrestview () e normal *substituindo let @/ = @/por let @/ = expand("<cword>").
precisa saber é o seguinte
@garyjohn: Sim, isso é melhor. Eu não tinha certeza de que havia algo equivalente à seleção de "palavras" feita por *, mas <cword>é.
31911 Chris Chrissen
13

Você também pode definir o registro de pesquisa para a variável que deseja corresponder.

Primeiro, verifique se o destaque da pesquisa está ativado:

:set hlsearch

Em seguida, você pode definir o registro de pesquisa com:

:let @/="variable"

Isso destacará todas as ocorrências da variável sem pular para a próxima partida.

Para mais informações, veja :help @/


fonte
7

Uma maneira é usar o :matchcomando, por exemplo,

:match Question '^R^W'

Isso destacará a palavra sob o cursor usando o grupo de destaque Pergunta. Costumo usar o grupo de perguntas, porque no meu terminal é um verde agradável. Para ver os grupos de destaque disponíveis, execute

:hi

O ^Re ^Wsão Ctrl-R e Ctrl-W, respectivamente, e são substituídos pela palavra sob o cursor. Vejo

:help c_CTRL-R_CTRL-W

para mais sobre isso. Vejo

:help :match

para saber mais sobre o :matchcomando Para limpar esse realce, basta executar

:match

sem argumentos.

garyjohn
fonte
1

Além de:

 :set hlsearch

Você pode querer:

 : set noincsearch
therube
fonte
0

Semelhante ao *que temos:

[I ............................. it show where the word under the cursor appears

Vale a pena dar uma olhada :h [I. lá encontramos algumas coisas interessantes relacionadas às suas necessidades.

Há uma pergunta semelhante no stackoverflow em que coloco minha resposta (um pouco mais completa)

SergioAraujo
fonte