Como posso limpar o realce de palavras no documento atual (por exemplo, depois de procurar uma palavra)?


61

Quando você procura uma palavra em um arquivo com algo parecido /console.log, todas as instâncias de console.logsão destacadas.

Quando você não estiver mais interessado neles, o destaque pode ser perturbador. Minha estratégia atual para remover o realce é fazer algo assim /asntehua. Existe uma maneira adequada de remover esta palavra destacada?


2
Não há nada mais rápido para digitar do que /skldafjlksjdf;)
Shahbaz 12/07

2
Adicione o seguinte ao seu .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Pressione retorno no modo de comando e o realce desaparecerá.
nilon 28/08

Respostas:


47

Como alternativa :noh, eu gosto de fazer o :let @/=""mapeamento para um atalho de teclado.

A diferença é que :nohdeixa o termo de pesquisa no registro de pesquisa ne, Nno modo normal, retome a pesquisa pulando para a correspondência seguinte / anterior e realçando novamente. O uso :let @/="", por outro lado, provoca a mensagem E25: No previous regular expressione deixa o cursor onde estava , o que é especialmente conveniente se você ainda não conhece ctrl- oainda e acidentalmente pressiona n.

Isso também pode ser usado de outra maneira. Para fazer com que o vim destaque algum texto sem pular para ele, você pode:let @/="some text"

Nessas expressões, @ permite fazer referência a um registro e @ / é o registro que mantém o último padrão de pesquisa.


31

Basta digitar

:noh<cr>

(Onde <cr>simboliza um retorno de carro, ou seja, Enter.) A versão completa e não abreviada deste comando é :nohlsearch.

Por conveniência, você pode ter um mapeamento como

nnoremap <Leader><space> :noh<cr>

no seu .vimrc. Como meu líder é o Space, isso me permite limpar o destaque simplesmente tocando no espaço duas vezes. (Por padrão, <Leader>está definido como \)

Outra opção popular é vinculá-lo ao Ctrl+ L, pois esse é mais ou menos o padrão para 'tela de redesenho do terminal', que é basicamente o que você está fazendo:

nnoremap <silent> <C-L> :nohlsearch<CR><C-L>

Isso tem o efeito colateral de também redesenhar a tela do terminal, que pode ser lenta se a conexão do terminal estiver lenta (o que é muito raro atualmente).
NOTA: Se você estiver usando o tpope / vim-sensitive , ele já oferece o <C-l>mapeamento listado acima.


21

Desativar o destaque da pesquisa permanentemente

As correspondências não serão destacadas sempre que você fizer uma pesquisa usando /

:set nohlsearch

Limpar destaque até a próxima pesquisa

:noh

ou :nohlsearch(limpa até que nou Nseja pressionado ou uma nova pesquisa seja realizada)


Destaque claro ao pressionar ESC

nnoremap <esc> :noh<return><esc>

Destaque claro ao pressionar outra tecla ou mapa personalizado

  • Destaques claros ao pressionar \(barra invertida)

    nnoremap \ :noh<return>
    
  • Destaques claros ao bater ESCduas vezes

    nnoremap <esc><esc> :noh<return>
    

Eu adicionei nnoremap <esc> :noh<return><esc>ao meu, vimrcmas não está funcionando. Eu jkmapeei para escapar, poderia ser por isso?
mbigras

O que exatamente está acontecendo? Talvez você tenha desativado a ESCchave?
Sheharyar 02/03

pressionar jknão alterna o texto realçado (mas ainda funciona como Esc). Pressionar meu Escno canto superior esquerdo do teclado desativa o texto realçado.
mbigras

Então você tem sua resposta aqui. Coloque seu jkmapa abaixo do ESCmapa e verifique se você está usando um simples em mapvez denoremap
Sheharyar 2/17/17

Remapear a fuga pode causar problemas com as teclas de seta, e eu presumiria outros cenários que usam um código de fuga. vi.stackexchange.com/questions/11144/…
Rob Mosher em

2

Depois de experimentar várias soluções sugeridas para atalhos para isso no ~ / vimrc, decidi simplesmente adicioná nmap <esc><esc> :noh<return>-lo. O escape duplo evita interferências com a função das teclas de seta. Se você estiver no modo de inserção, é necessário um escape triplo. Isso é rápido de executar e fácil de lembrar.


2

Adicionei um autocmd ao meu .vimrc que remove o destaque sempre que você entra no modo de inserção.

 autocmd InsertEnter * :let @/=""

2
Usar em nohlvez de let @/=""seria uma abordagem melhor, desde então, você não derruba sua pesquisa atual.
jamessan

@jamessan ele funciona com o :let @/=""comando, mas autocmd InsertEnter * :nohnão por alguma razão, tem alguma idéia do porquê?
tobek

11
Na verdade, encontrei o motivo: de acordo com os documentos 'O destaque da pesquisa não pode ser desativado com ": nohlsearch" em um autocommand "- detalhes sobre o motivo: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
tobek

1

Se você não deseja destacar depois de qualquer pesquisa, use (melhor):

:set nohls

ou isso (pior):

:hi Search NONE

1

Quando digitei :help incsearch, encontrei o seguinte no manual:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

que renunciei a usar, pois outras soluções que tentei não eram perfeitas e essa solução vem "diretamente da boca do cavalo", por assim dizer. Destaca todas as correspondências de pesquisa na janela atual.


1
/asdfasdf

Isso tem a vantagem de que você não precisa digitá-lo exatamente. A desvantagem é que há uma chance de cerca de 1: 68719476736 em um arquivo de 4096 bytes de que isso não funcione e o cursor saltará para um local diferente. Essa chance aumenta para arquivos maiores.


11
Bem-vindo ao vi SE! Eu acho que a string asdfasdfé especial no sentido de que acontece com frequência em arquivos práticos, do que uma sequência de 8 bytes selecionada aleatoriamente. Assim, a chance é muito maior. :-)
user259412

0

Eu não acho que remover hls seria uma coisa boa, que tal tornar fácil ativar ou desativar a criação de um atalho fácil (booleano) No meu caso ->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

A mágica acontece por causa de " !" no final da configuração


0

Acho que é muito raro eu querer destacar e quando preciso realçar é apenas por um breve momento. Minha solução é

nnoremap <Leader>/ set hls!<CR>

Isso ativa o destaque quando você pressiona \/e o desativa novamente se você pressionar novamente. Isso fornece acesso fácil ao destaque nos casos raros quando você precisar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.