Vim limpar a última pesquisa destacada

1904

Depois de fazer uma pesquisa no Vim, todas as ocorrências são destacadas. Como posso desativar isso? Agora faço outra busca por algo sem sentido que não pode ser encontrado.

Existe uma maneira de desativar temporariamente o destaque e reativá-lo quando necessário novamente?

Gabriel Solomon
fonte
197
Eu acho que a solução "nnoremap <esc>: noh <retorno> <esc>" é uma resposta mais completa para a pergunta - colocando isso no seu .vimrc, basta pressionar <esc> depois de pesquisar para limpar o realce da pesquisa anterior (mas não desative o destaque para sempre).
Stewart Johnson
5
: set invhlsearch desabilitará o destaque se já estiver destacado e ativará se não estiver. Você pode mapeá-lo para dizer Shift-H.
Puffadder
1
@ StewartJohnson fazendo isso nos meus arquivos .vimrc parece interferir / interromper com: set mouse = a. Alguma idéia do porquê? Este erro só acontece em iTerm2
Charlie Parker
20
@StewartJohnson Tenha cuidado! Seu comentário com melhor classificação com mapeamento causa erros e comportamento inesperado, conforme descrito nos comentários abaixo para stackoverflow.com/a/1037182/1698467
skywinder
3
A nnoremap <esc> :noh<return><esc>solução sugerida por @StewartJohnson funciona bem no GUI vim, mas causa problemas com as teclas de seta e outras chaves codificadas por ESC ao executar o vim em um terminal. Não colocá-lo em sua ~/.vimrc sem envolvê-lo em if has('gui_running')... end.
Jbyler # 28/17

Respostas:

1588

Para desativar o destaque até a próxima pesquisa:

:noh

Ou desative o destaque completamente:

set nohlsearch

Ou, para alterná-lo:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>
Mykola Golubyev
fonte
14
Fazendo set nohlsearch, o realce retorna quando o vim é reiniciado. :nohfunciona melhor.
Dharmit
21
É irritante que possa ser tão rápido procurar uma string sem sentido: / oajf3w9 quanto digitar: noh. Gosto de @ avocade solução de mapear a tecla de espaço para: noh
nnyby
160
Isso não está claro nesta resposta e nos comentários: observe que set nohlsearchtambém desabilitará o destaque para as próximas pesquisas. O comportamento de :nohé muito diferente: o realce será reativado automaticamente quando você realizar uma nova pesquisa ou mesmo quando fizer algo relacionado à pesquisa atual (por exemplo, quando você digitar npara ir para o próximo item).
Skippy le Grand Gourou
10
Nenhuma explicação sobre o que eles realmente fazem e as consequências. Obrigado a @ SkippyleGrandGourou por explicar alguns deles.
Jason S #
3
Para quanto vale, mapeio isso para '\/'(ou seja qual for o seu líder):map <Leader>/ :nohlsearch<CR>
brianmearns
689

Na documentação do VIM

Para limpar o último padrão de pesquisa usado:

:let @/ = ""

Isso não definirá o padrão para uma sequência vazia, porque isso corresponderia a todos os lugares. O padrão é realmente limpo, como ao iniciar o Vim.

Shaun Bouckaert
fonte
129
... o que seria uma solução melhor para o problema dele como eu o entendo.
Shaun Bouckaert 18/03/09
8
Era isso que eu estava procurando! Votei, a pergunta é um pouco vaga. Isso me levou a pensar que era isso que ele queria: "Agora faço outra busca por algo sem sentido que não pode ser encontrado". Porque era isso que eu estava fazendo para limpar a pesquisa, mas não desativá-la, para que a próxima pesquisa fosse realçada novamente.
Claytron 31/08/10
50
Era sobre isso que eu pensava que a pergunta era ... aqui está um comando que eu fiz para acelerar a limpeza da string de pesquisa (e, portanto, remover todos os destaques): :command C let @/=""Usar isso permite digitar :Cpara limpar a string de pesquisa ... muito rápido e não afeta pesquisas ou realces futuros.
9133 Jason
12
@ jcreamer898, veja a ajuda do vim em "registradores" ( :he registers). O Vim possui vários registradores internos diferentes que contêm texto, algumas vezes para dados arrancados, outras para a última pesquisa, etc. Quando você faz uma pesquisa, o vim coloca o padrão no registro "/", ao qual você se refere @/. Você também pode atribuir valores aos registradores usando @regname=valuewhere regnameis the é o nome do registrador. Portanto, @/=""basta definir o registro "/" como uma sequência vazia (exceto que para o registro "/" o vim limpará a última pesquisa se contiver uma sequência vazia).
Ben Davis
3
Adicione isso ao seu .vimrc para obter Ctrl + / para limpar a última pesquisa: noremap <silent> <c-_> :let @/ = ""<CR>
angrydust 15/09/14
583

Você pode fazer

:noh

ou :nohlsearchdesativar temporariamente o realce da pesquisa até a próxima pesquisa.

Matt McMinn
fonte
3
obrigado, isso foi útil ... algum comando para retornar o destaque?
22819 Gabriel Solomon
17
: nohs apenas desliga o realce atual. Se você tiver: defina hlsearch, ele continuará realçando suas pesquisas.
21139 greyfade
6
Eu acho que é isso que o OP estava procurando (embora a resposta de Shaun também funcione). Estou votando nisso por ser mais curto. Sei que ele aceitou a resposta nohls, mas defini-la desativará todos os realces da pesquisa, mesmo se outra pesquisa for tentada posteriormente.
Thiago Arrais
5
Isso é provavelmente o que o OP queria em primeiro lugar e é a melhor e mais curta resposta ao IMHO.
A perfeição é alcançável mesmo neste reino mortal! Vou usar isso mais do que: ajuda, e não quer poluir <Esc>: nnoremap <F1>: noh <CR>
Sam Watkins
305

Encontrei esta resposta anos atrás em vim.org:

Adicione o seguinte ao seu .vimrc:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

Assim, após sua pesquisa, basta pressionar Enter novamente no modo de comando e o realce desaparece.


fonte
36
Eu acho que essa é uma solução muito melhor do que a que realmente foi aceita - seja essa ou a outra em que ela é mapeada para <ESC>.
Stewart Johnson
20
Essa é uma resposta muito melhor para "nnoremap <esc>: noh <retorno> <esc>" porque não causa comportamento estranho.
217 Dennis
19
Um aspecto importante a ser observado, certifique-se de não colocar comentários no lado direito de um remapeamento. Eles serão interpretados como comandos para o remapeamento, em vez de comentários.
codybuell
13
O comentário está errado; o comando não não retirar a última padrão de pesquisa, mas simplesmente desliga o destaque dos resultados atuais; você pode pressionar npara encontrar a próxima ocorrência (que será destacada novamente). BTW, ao criar scripts, evitaria o formulário abreviado e, em vez disso, escrevia :nohlsearch.
Tobias
28
Adicione <silent> para evitar que a tela pisque e deixe noh na linha de comando -: nnoremap <silent> <CR>: nohlsearch <CR> <CR>
Peter N Lewis
137

De http://twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

A segunda linha é necessária para o mapeamento da chave de escape, pois o Vim usa internamente o escape para representar chaves especiais.

Baruch Even
fonte
12
Só para ficar claro, isso permite que você limpar o destaque de pesquisa pressionando a tecla Escape
Gavin Miller
7
Por alguma razão, isso faz o meu terminal vim iniciar como se "c" tivesse sido pressionado. Alguma ideia?
Jacob
31
Isso causou um comportamento muito estranho quando tentei: na inicialização, movimentos regulares do vim (por exemplo, j, k) causavam a remoção de linhas. nnoremap <CR>: noh <CR> <CR> não causou esses problemas. Não consegui rastrear a causa raiz.
oasisbob
9
hmm, eu tive o mesmo problema que os acima. Não use isso como-é, sem testes, a menos que, como apagar seu texto aleatoriamente ...
Derek Litz
8
usar "nnoremap <esc>: noh <retorno> <esc>" faz com que o vim comece sempre no modo "SUBSTITUIÇÃO".
user1850133
38

Minha solução original (abaixo) estava suja e inútil. Agora eu uso:noh

Como muitos recursos do Vim, o caminho certo geralmente não é fácil de descobrir.

-

(NÃO FAÇA ISSO)

Procure uma sequência de caracteres improvável (amasse as teclas na linha inicial):

/;alskdjf;

Isso funciona no vim e menos, e é mais fácil lembrar / digitar do que a solução logicamente mais limpa do @ ShaunBouckaert "para limpar o último padrão de pesquisa usado":

:let @/ = ""

Uma desvantagem potencial é que ela adiciona lixo ao seu histórico de pesquisa.

millerdev
fonte
17
Não é apenas uma solução suja (que eu mesmo usei até agora, sem ofensa), outra desvantagem é que ela adiciona uma faixa vermelha feia dizendo "padrão não encontrado" na parte inferior da janela, o que é quase tão irritante quanto o realce e requer que outras ações sejam descartadas (por exemplo, "pesquisa + backspace").
Skippy le Grand Gourou
5
Também pode levar alguns segundos, pois ele realmente pesquisa o restante do arquivo. Isso é realmente irritante se o arquivo for grande. Claro, você pode marcar sua posição atual, pular para o início e procurar um personagem para trás, mas isso é igualmente sujo.
Blacklight Shining
5
Esta é a solução que a maioria terá usado antes de aprender sobre o :nohlcomando. Depois que aprendi sobre o último, parei imediatamente para fazer essas pesquisas.
Tobias
7
Esta não é uma resposta; é apenas recomendar fazer o que o OP já faz: "Agora faço outra pesquisa por algo sem sentido que não pode ser encontrado".
Reintegrar Monica - notmaynard
2
Se você quiser um padrão curto e infalível, basta usar /$4. Não é apenas improvável que corresponda a qualquer coisa, mas na verdade é completamente IMPOSSÍVEL. $deve sempre ser seguido por uma nova linha ou ser o final do arquivo e 4 não é uma nova linha nem o final do arquivo. (A razão para 4 especificamente é apenas que ele está na mesma chave, por isso é muito fácil de digitar rapidamente)
vírgula
32

Remapeado no meu arquivo .vimrc.local, rápido e sujo, mas muito funcional:

" Clear last search highlighting
map <Space> :noh<cr>
avocade
fonte
32
nnoremap <cr> :noh<CR><CR>:<backspace>

Dessa forma, eu me desfiz do :nohmostrado na linha de comando, ao bater enterapós a pesquisa.

:é como começar a digitar um novo comando, Backspacelimpá-lo e colocar o foco novamente na janela do editor.

sjas
fonte
6
Obrigado. O ": noh" aparecendo no canto inferior esquerdo estava me deixando louco, OCD maldito.
andrewtweber
Eu estava tentando mapeá-lo para cr deslocada, fazendo nnoremap <S-cr>: noh <CR> <CR> mas não funcionou, você sabe por que pode não estar funcionando?
Charlie Parker
Eu suspeito que você não pode combinar turno com retorno, mas sinceramente não faço ideia.
Sj #
@CharlieParker IIRC, você só pode usar shift [a-z]e esses caracteres.
Sj #
7
Em vez de fazer :<Backspace>, você pode simplesmente adicionar <silent>após o nnoremapque dizer Vim para não exibir qualquer saída na área de comando: nnoremap <silent> <cr> :noh<CR><CR>.
Soren Bjornstad 24/11/19
31

As respostas que propõem :nohou :nohlsearch(por exemplo, as de Matt McMinn) estão corretas para desativar temporariamente o realce da pesquisa - conforme solicitado na pergunta original.

Pensei em contribuir com um mapeamento que considero útil no modo Normal:

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

Por padrão, CtrlL no Vim limpa e redesenha a tela. Vários programas de linha de comando (principalmente aqueles que usam a biblioteca GNU Readline , como o Bash) usam a mesma combinação de teclas para limpar a tela. Esse recurso é útil na situação em que um processo em execução em segundo plano é impresso no terminal, substituindo partes do processo em primeiro plano.

Esse mapeamento no modo Normal também limpa o realce do termo de pesquisa mais recente antes de redesenhar a tela. Acho que os dois recursos se complementam e é conveniente usar umCtrlL para as duas ações juntos, em vez de criar um mapeamento separado para desativar o destaque da pesquisa.

NB: noremap é usado, e não de mapoutra forma, o mapeamento seria recursivo.

Dica: costumo remapear Caps Lockpara Ctrlfacilitar a digitação dessas combinações de teclas; os detalhes para fazer isso dependem da sua escolha do sistema operacional / de janelas (e estão fora do tópico para esta resposta). Ambas as dicas a seguir incluem informações sobre o mapeamento Caps Lockpara Ctrlalém deEsc :

Anthony Geoghegan
fonte
26

Geralmente :nohmapeio a tecla de barra invertida. Para reativar o realce, basta pressionar ne ele será realçado novamente.

homem das cavernas
fonte
24

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é nou Né pressionado)


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>
    
Sheharyar
fonte
2
A nnoremap <silent> <esc> :noh<return><esc>solução funciona bem no GUI vim, mas causa problemas graves com as teclas de seta e outras chaves codificadas pelo ESC ao executar o vim em um terminal. Não colocá-lo em sua ~/.vimrc sem envolvê-lo em if has('gui_running')... end. Considere também adicionar o <silent>que evita piscar o :nohcomando na barra de status.
Jbyler # 28/17
17

É isso que eu uso (extraído de muitas perguntas / respostas diferentes):

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

Com "double" Escvocê remove o realce, mas assim que você pesquisa novamente, o realce reaparece.


Outra alternativa:

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

De acordo com a documentação do vim:

clearmatches ()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.
Pablo Olmos de Aguilera C.
fonte
Eu enfrentei alguns erros nas principais soluções, para economizar seu tempo tentando todas as respostas. Use esta solução! Edite o seu .vimrce coloque a seguinte entrada:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
ani627 9/16
Mas é isso que diz Oo Talvez você possa votar de novo?
Pablo Olmos de Aguilera C.
Eu estou apoiando a sua solução ... É o melhor IMO ... E também tenho upvoted ele .. :)
ani627
1
Limpar o registro de pesquisa com @/=""o efeito colateral de nnão funcionar para recuperar sua pesquisa. Eu prefiro o :nohque mantém a pesquisa anterior no registro para reutilização.
Jbyler # 28/17
11

Para desativar o destaque até a próxima pesquisa

:noh

Ilustração Visual

arcseldon
fonte
10

Se você tiver o plugin incsearch.vim instalado, existe uma configuração para limpar automaticamente o destaque após a pesquisa:

let g:incsearch#auto_nohlsearch = 1

insira a descrição da imagem aqui

Deqing
fonte
8

O Janus para o VIM e o GVIM tem vários itens para iniciantes como eu, incluindo

<leader>hs - toggles highlight search

que é exatamente o que você precisa. Basta digitar \hsno modo normal. (A chave líder é mapeada para \por padrão.)

HTH.

Paul-Sebastian Manole
fonte
7

Desative o destaque assim que você mover o cursor:

Instale o vim-cool . Foi criado para corrigir esse problema específico. Desativa o destaque assim que você move o cursor. Esteja avisado, porém, requer uma versão vim recente!

00prometheus
fonte
6

Isso limpará o destaque da pesquisa após updatetimemilissegundos de inatividade.

updatetimeo padrão é 4000ms ou 4s, mas defino o meu como 10s. É importante observar que updatetimefaz mais do que isso, então leia os documentos antes de alterá-lo.

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
Kevin Cox
fonte
6

Se você deseja ativar / desativar o destaque rapidamente , pode mapear uma chave para

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>

Basta colocar o trecho acima em seu arquivo .vimrc.

Essa é a maneira mais conveniente para eu mostrar e ocultar o destaque da pesquisa com um toque na tecla cantar

Para obter mais informações, consulte a documentação http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches

Amaynut
fonte
5

Mais uma solução combinando duas respostas principais:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>
skywinder
fonte
Limpar o registro de pesquisa com @/=""o efeito colateral de nnão funcionar para recuperar sua pesquisa. Eu prefiro o :nohque mantém a pesquisa anterior no registro para reutilização. Você pode ligar <F3>para que, comnnoremap <F3> :noh<CR>
jbyler
4

Eu apenas uso o nohl simples abaixo e nenhum plug-in é necessário.

:nohl

Stryker
fonte
4

Meu palpite é que a pergunta original dizia respeito a não desativar o destaque da pesquisa, mas simplesmente limpá-lo da última pesquisa. A solução de procurar por uma sequência sem sentido, mencionada no pôster original, é aquela que eu uso há algum tempo para limpar o realce de uma pesquisa anterior, mas é feia e complicada.

Várias sugestões que encontrei para adicionar nnoremap ...ao ~ / .vimrc têm o efeito de colocar o vim no modo de substituição na inicialização, o que não é exatamente o que eu quero. A solução mais simples que encontrei é adicionar a linha

nmap <esc><esc> :noh<return>

ao meu ~ / .vimrc. Isso segue o princípio do KISS e não interfere nas teclas de seta, o que usando um único <esc> faz. Um duplo <esc> é necessário no modo de comando (ou um triplo <esc> do modo de inserção ou substituição) para limpar o realce de uma pesquisa anterior, mas da perspectiva da interface do usuário, isso torna a operação o mais simples possível.

Lindsay Haisley
fonte
O que você quer dizer com o único <esc> interferindo nas teclas de seta?
hansmosh
1
@hansmosh Consulte unix.stackexchange.com/questions/28713/… eu uso duas linhas no meu .vimrc da seguinte maneira nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
Lindsay Haisley
4

Eu uso o seguinte no meu ~/.vimrc

nnoremap <Leader><space> :noh<Enter>

Isso facilita e agiliza a limpeza da pesquisa destacada atual. Minha chave de líder está mapeada para \que isso facilite a ação com o dedo mindinho e o polegar direito.

John Slavick
fonte
3

Eu acho que misturar @ ShaunBouckaert e 19 de março de 2009 às 16:22 respostas é um bom compromisso:

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

Pressione Entere o texto destacado não será mais destacado, enquanto o realce da pesquisa ainda está ativado.

Ekans
fonte
3

você pode usar : noremap para ativar / desativar o resultado da pesquisa, como este

:noremap <F3> :set hls! hls?<CR>

caopeng
fonte
3

Com base na resposta @ baruch-even, você pode excluir o termo de pesquisa ESCpressionando duas vezes enquanto estiver no modo normal com:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[
dinigo
fonte
Eu acho que a segunda ligação está correta, mas a primeira é perigosa. O remapeamento <esc>funciona bem no GUI vim, mas causa problemas graves com as teclas de seta e outras chaves codificadas pelo ESC ao executar o vim em um terminal. Não colocá-lo em sua ~/.vimrc sem envolvê-lo em if has('gui_running')... end. Considere também adicionar o <silent>que evita piscar o :nohcomando na barra de status.
Jbyler # 28/17
1

Eu também não gosto disso. Eu achei cansativo entrar :nohlo tempo todo ... então eu coloquei o seguinte mapeamento no meu.vimrc

noremap <C-_> :nohl<cr>:<backspace>

O primeiro bit ( :nohl<cr>) limpa o realce; o segundo bit ( :<backspace>) é um truque para limpar a linha de comando. A pesquisa ainda está lá no fundo, então, se você simplesmente clicar nnela, será realçada e levará para a próxima ocorrência.

Ricardo
fonte
1

Eu adicionei isso ao meu vimrcarquivo.

command! H let @/=""

Depois de fazer uma pesquisa e desejar limpar os destaques da sua pesquisa, basta :H

pixel 67
fonte
1

Como alternativa, você pode adicionar o mapeamento ao seu arquivo .vimrc como,

nmap <C-N>: nohlsearch

e então você pode pressionar

Ctrl + N

a qualquer momento para limpar o texto destacado

LeO
fonte
Por favor edite sua resposta para garantir que ele melhora a outras respostas já presentes nesta questão.
hongsy 19/01