Vim claro último resaltado de búsqueda

1904

Después de hacer una búsqueda en Vim, obtengo todas las ocurrencias resaltadas. ¿Cómo puedo desactivar eso? Ahora hago otra búsqueda de algo que no se puede encontrar.

¿Hay alguna manera de deshabilitar temporalmente el resaltado y luego volver a habilitarlo cuando sea necesario nuevamente?

Gabriel Solomon
fuente
197
Creo que la solución "nnoremap <esc>: noh <return> <esc>" es una respuesta más completa a la pregunta. Al poner eso en su .vimrc, puede presionar <esc> después de buscar para borrar el resaltado de la búsqueda anterior (pero no deshabilite el resaltado para siempre).
Stewart Johnson
55
: set invhlsearch deshabilitará el resaltado si ya está resaltado y lo habilitará si no lo está. Puedes mapearlo para decir Shift-H.
Puffadder
1
@StewartJohnson haciendo eso en mis archivos .vimrc parece interferir / romper con: set mouse = a. Alguna idea de por qué? Este error solo ocurre en iTerm2
Charlie Parker
20
@StewartJohnson ¡Ten cuidado! Su comentario mejor calificado con mapeo causa errores y un comportamiento inesperado como se describe en los comentarios a continuación a stackoverflow.com/a/1037182/1698467
skywinder
3
La nnoremap <esc> :noh<return><esc>solución sugerida por @StewartJohnson funciona bien en GUI vim, pero causa problemas con las teclas de flecha y otras teclas codificadas por ESC cuando se ejecuta vim en un terminal. No lo ponga en su ~/.vimrc sin envolverlo en if has('gui_running')... end.
jbyler

Respuestas:

1588

Para desactivar el resaltado hasta la próxima búsqueda:

:noh

O apague el resaltado por completo:

set nohlsearch

O, para alternarlo:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>
Mykola Golubyev
fuente
14
Al hacer set nohlsearch, el resaltado regresa cuando se reinicia vim. :nohFunciona mejor
Dharmit
21
es molesto que pueda ser tan rápido buscar una cadena galimatosa: / oajf3w9 como escribir: noh. Me gusta la solución de @ avocade de asignar la tecla de espacio a: noh
nnyby
160
Esto no está claro a partir de esta respuesta y comentarios: tenga en cuenta que set nohlsearchtambién deshabilitará el resaltado para las próximas búsquedas. El comportamiento de :nohes muy diferente: el resaltado se volverá a habilitar automáticamente cuando realice una nueva búsqueda o incluso cuando haga algo relacionado con la búsqueda actual (por ejemplo, cuando escriba npara ir al siguiente elemento).
Skippy le Grand Gourou
10
No hay explicación de lo que realmente hacen y las consecuencias. Gracias a @SkippyleGrandGourou por explicar algo de esto.
Jason S
3
Para lo que vale, mapeo esto '\/'(o lo que sea que sea su Líder):map <Leader>/ :nohlsearch<CR>
brianmearns
689

De la documentación de VIM

Para borrar el último patrón de búsqueda utilizado:

:let @/ = ""

Esto no establecerá el patrón en una cadena vacía, porque coincidiría en todas partes. El patrón se borra realmente, como cuando se inicia Vim.

Shaun Bouckaert
fuente
129129
... lo que sería una mejor solución a su problema tal como lo entiendo.
Shaun Bouckaert
8
¡Esto es lo que estaba buscando! Lo voté, la pregunta es un poco vaga. Esto me llevó a pensar que esto era lo que él quería: "Ahora hago otra búsqueda de algo que no se puede encontrar". Porque eso es lo que estaba haciendo para borrar la búsqueda, pero no deshabilitarla para que la próxima búsqueda resaltara nuevamente.
claytron
50
Esto es de lo que pensé que se trataba la pregunta ... aquí hay un comando que hice para acelerar la eliminación de la cadena de búsqueda (y, por lo tanto, eliminar todos los resaltados): :command C let @/=""usar esto le permite escribir :Cpara borrar la cadena de búsqueda ... muy rápido y no afecta la búsqueda o el resaltado futuros.
Jason
12
@ jcreamer898, consulte la ayuda de vim en "registros" ( :he registers). Vim tiene varios registros integrados diferentes que contienen texto, a veces para datos extraídos, a veces para la última búsqueda, etc. Cuando realiza una búsqueda, vim coloca el patrón en el registro "/", al que hace referencia utilizando @/. También puede asignar valores a los registros utilizando @regname=valuewhere regnameis the es el nombre del registro. Entonces, @/=""es simplemente establecer el registro "/" en una cadena vacía (excepto que para el registro "/" vim borrará la última búsqueda si contiene una cadena vacía).
Ben Davis
3
Agregue esto a su .vimrc para obtener Ctrl + / para borrar la última búsqueda: noremap <silent> <c-_> :let @/ = ""<CR>
angrydust
583

Tu puedes hacer

:noh

o :nohlsearchpara desactivar temporalmente el resaltado de búsqueda hasta la próxima búsqueda.

Matt McMinn
fuente
3
gracias, esto fue útil ... ¿algún comando para devolver el resaltado?
Gabriel Solomon el
17
: nohs simplemente apaga el resaltado actual. Si tiene: establecer hlsearch, continuará resaltando sus búsquedas.
greyfade
66
Creo que esto es lo que estaba buscando el OP (aunque la respuesta de Shaun también funciona). Estoy votando esto por ser más bajo. Sé que aceptó la respuesta de nohls, pero configurarla deshabilitará todo el resaltado de búsqueda, incluso si se intenta otra búsqueda después.
Thiago Arrais
55
Esto es probablemente lo que el OP quería en primer lugar y es la mejor respuesta más corta en mi humilde opinión.
¡La perfección es alcanzable incluso en este reino mortal! Usaré esto más que: ayuda, y no quiero contaminar <esc>: nnoremap <F1>: noh <CR>
Sam Watkins
305

Encontré esta respuesta hace años en vim.org:

Agregue lo siguiente a su .vimrc:

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

Por lo tanto, después de su búsqueda, simplemente presione regresar nuevamente en modo comando y el resaltado desaparecerá.


fuente
36
Creo que esta es una solución mucho mejor que la que realmente ha sido aceptada, ya sea esta u otra donde está asignada a <ESC>.
Stewart Johnson
20
Esta es una respuesta mucho mejor a "nnoremap <esc>: noh <return> <esc>" porque no causa un comportamiento extraño.
Dennis
19
Una cosa importante a tener en cuenta, asegúrese de no poner ningún comentario en el lado derecho de una reasignación. Se interpretarán como comandos para la reasignación en lugar de comentarios.
codybuell
13
El comentario esta mal; el comando no desarma el último patrón de búsqueda, sino que simplemente desactiva el resaltado de los resultados actuales; puede presionar npara encontrar la próxima aparición (que se resaltará nuevamente). Por cierto, al hacer scripts, evitaría la forma abreviada y, en su lugar, escribiría :nohlsearch.
Tobias
28
Agregue <silent> para evitar que la pantalla parpadee y deje noh en la línea 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>^[

La segunda línea es necesaria para asignar a la tecla de escape, ya que Vim usa internamente el escape para representar teclas especiales.

Baruch Even
fuente
12
Para ser claros, esto le permite borrar el resaltado de búsqueda presionando la tecla Escape
Gavin Miller
77
Por alguna razón, esto hace que mi terminal vim se inicie como si se hubiera presionado "c". ¿Algunas ideas?
Jacob
31
Esto causó un comportamiento muy extraño cuando lo probé: en el inicio, los movimientos regulares de vim (por ejemplo, j, k) causarían la eliminación de líneas. nnoremap <CR>: noh <CR> <CR> no causó estos problemas. No pude localizar la causa raíz.
oasisbob
99
hmm, tuve el mismo problema que los anteriores. No use este como está sin probarlo a menos que le guste eliminar su texto al azar ...
Derek Litz
8
El uso de "nnoremap <esc>: noh <return> <esc>" hace que vim siempre comience en modo "REPLACEMENT".
user1850133
38

Mi solución original (abajo) estaba sucia y derrochadora. Ahora uso:noh

Al igual que muchas características en Vim, la forma correcta a menudo no es fácilmente detectable.

-

(NO HAGAS ESTO)

Busque una secuencia de caracteres poco probable (aplaste las teclas en la fila de inicio):

/;alskdjf;

Esto funciona en vim y menos, y es más fácil de recordar / escribir que la solución lógicamente más limpia de @ ShaunBouckaert "para borrar el último patrón de búsqueda utilizado":

:let @/ = ""

Una desventaja potencial es que agrega basura a su historial de búsqueda.

millerdev
fuente
17
No solo es una solución sucia (que yo mismo usé hasta ahora, sin ofender), otra desventaja es que agrega una pancarta roja fea que dice "patrón no encontrado" en la parte inferior de la ventana, que es casi tan molesto como el resaltado en sí mismo y requiere que se descarte una acción adicional (por ejemplo, "búsqueda + retroceso").
Skippy le Grand Gourou
55
También puede tomar unos segundos, ya que en realidad busca todo el resto del archivo. Eso es realmente molesto si el archivo es grande. Por supuesto, puedes marcar tu posición actual, saltar al principio y buscar hacia atrás un personaje, pero eso es igualmente sucio.
Blacklight Shining
55
Esta es la solución que la mayoría habrá usado antes de aprender sobre el :nohlcomando. Una vez que me enteré de esto último, inmediatamente me detuve para hacer esas búsquedas.
Tobias
77
Esta no es una respuesta; solo recomienda hacer lo que OP ya hace: "Ahora hago otra búsqueda de algo que no se puede encontrar".
Restablecer Monica - notmaynard
2
Si quieres un patrón infalible y corto, solo úsalo /$4. No solo es poco probable que coincida con algo, sino que es completamente IMPOSIBLE. $siempre debe ir seguido de una nueva línea o ser el final del archivo, y 4 no es una nueva línea ni el final del archivo. (La razón de 4 es específicamente sólo que es de la misma tecla, por lo que es muy fácil de escribir rápidamente)
coma
32

Reasignado en mi archivo .vimrc.local, rápido y sucio pero muy funcional:

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

De esa forma me deshago de lo que se :nohmuestra en la línea de comandos, cuando presiono enterdespués de la búsqueda.

:es como comenzar a ingresar un nuevo comando, Backspaceborrarlo y volver a poner el foco en la ventana del editor.

sjas
fuente
66
Gracias. El ": noh" que aparece en la parte inferior izquierda me estaba volviendo loco, maldito TOC.
andrewtweber
Estaba tratando de mapearlo a cr desplazado haciendo nnoremap <S-cr>: noh <CR> <CR> pero no funcionó, ¿sabes por qué podría no funcionar?
Charlie Parker
Sospecho que no puedes combinar turno con retorno, pero sinceramente no tengo idea.
sjas
@CharlieParker IIRC solo puedes usar shift on [a-z]y tales personajes.
sjas
77
En vez de hacer :<Backspace>, sólo puede añadir <silent>después de que el nnoremapdecirle a Vim para no mostrar ninguna salida en el área de comandos: nnoremap <silent> <cr> :noh<CR><CR>.
Soren Bjornstad
31

Las respuestas que proponen :noho :nohlsearch(por ejemplo, las de Matt McMinn) son correctas para deshabilitar temporalmente el resaltado de búsqueda, como se hizo en la pregunta original.

Pensé que contribuiría con un mapeo que encuentro útil en modo Normal:

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

Por defecto, CtrlLen Vim borra y vuelve a dibujar la pantalla. Varios programas de línea de comando (principalmente aquellos que usan la biblioteca GNU Readline , como Bash) usan la misma combinación de teclas para borrar la pantalla. Esta característica es útil en la situación en la que un proceso que se ejecuta en segundo plano se imprime en el terminal, sobrescribiendo partes del proceso en primer plano.

Esta asignación de modo Normal también borra el resaltado del término de búsqueda más reciente antes de volver a dibujar la pantalla. Creo que las dos características se complementan entre sí y es conveniente usar una CtrlLpara ambas acciones juntas en lugar de crear una asignación separada para deshabilitar el resaltado de búsqueda.

NB: noremap se utiliza en lugar de maplo contrario, la asignación sería recursiva.

Consejo: por lo general vuelvo a asignar Caps Lockpara Ctrlque sea más fácil escribir tales combinaciones de teclas; los detalles para hacerlo dependen de su elección del sistema operativo / sistema de ventanas (y están fuera de tema para esta respuesta). Los siguientes consejos incluyen información sobre el mapeo Caps Locky Ctrltambién sobre Esc:

Anthony Geoghegan
fuente
26

Generalmente asigno :noha la tecla de barra invertida. Para volver a habilitar el resaltado, solo presiona n, y se resaltará nuevamente.

cavernícola
fuente
24

Desactivar el resaltado de búsqueda de forma permanente

Las coincidencias no se resaltarán cuando realice una búsqueda utilizando /

:set nohlsearch

Borrar resaltado hasta la próxima búsqueda

:noh

o :nohlsearch(borra hasta que no Nse presiona)


Claro resaltado al presionar ESC

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

Borrar resaltado al presionar otra tecla o mapa personalizado

  • Claros claros al presionar \(barra invertida)

    nnoremap \ :noh<return>
    
  • Destacados claros al golpear ESCdos veces

    nnoremap <esc><esc> :noh<return>
    
Sheharyar
fuente
2
La nnoremap <silent> <esc> :noh<return><esc>solución funciona bien en GUI vim, pero causa problemas graves con las teclas de flecha y otras teclas codificadas por ESC cuando se ejecuta vim en un terminal. No lo ponga en su ~/.vimrc sin envolverlo en if has('gui_running')... end. También considere agregar el <silent>que evita el parpadeo del :nohcomando en la barra de estado.
jbyler
17

Esto es lo que uso (extraído de muchas preguntas / respuestas diferentes):

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

Con "doble" Esceliminas el resaltado, pero tan pronto como vuelves a buscar, el resaltado vuelve a aparecer.


Otra alternativa:

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

Según la documentación de vim:

clearmatches ()

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

    |:match| commands.
Pablo Olmos de Aguilera C.
fuente
Enfrenté algunos errores en las mejores soluciones, así que para ahorrar tiempo probando todas las respuestas. ¡Usa esta solución! Edite su .vimrcy ponga la siguiente entrada en ella:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
ani627
Pero eso es lo que dice Oo ¿Quizás podrías votar?
Pablo Olmos de Aguilera C.
Estoy apoyando su solución ... Es la mejor OMI ... Y también la he votado ... :)
ani627
1
Borrar el registro de búsqueda con @/=""tiene el efecto secundario de hacer que nno funcione para recuperar su búsqueda. Prefiero :nohque mantenga la búsqueda anterior en el registro para su reutilización.
jbyler
11

Para desactivar el resaltado hasta la próxima búsqueda

:noh

Ilustración visual

arcseldon
fuente
10

Si tiene instalado el complemento incsearch.vim , entonces hay una configuración para borrar automáticamente el resaltado después de buscar:

let g:incsearch#auto_nohlsearch = 1

ingrese la descripción de la imagen aquí

Deqing
fuente
8

Janus para VIM y GVIM tiene una serie de cosas horneadas para novatos como yo, incluyendo

<leader>hs - toggles highlight search

que es exactamente lo que necesitas Simplemente escriba \hsen modo normal. (La clave líder está asignada \de forma predeterminada).

HTH

Paul-Sebastian Manole
fuente
7

Desactive el resaltado tan pronto como mueva el cursor:

Instalar vim-cool . Fue creado para solucionar este problema específico. Desactiva el resaltado tan pronto como mueves el cursor. Sin embargo, ten en cuenta que requiere una versión vim reciente.

00prometeo
fuente
6

Esto borrará el resaltado de búsqueda después de updatetimemilisegundos de inactividad.

updatetimeel valor predeterminado es 4000ms o 4s pero configuré el mío en 10s. Es importante tener en cuenta que updatetimehace más que esto, así que lea los documentos antes de cambiarlo.

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

Si desea habilitar / deshabilitar el resaltado rápidamente , puede asignar una tecla a

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

Simplemente coloque el fragmento anterior en su archivo .vimrc.

Esa es la forma más conveniente para mí de mostrar y ocultar el resaltado de búsqueda con un toque de tecla

Para obtener más información, consulte la documentación http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches

Amaynut
fuente
5

Una solución más al combinar 2 respuestas principales:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>
skywinder
fuente
Borrar el registro de búsqueda con @/=""tiene el efecto secundario de hacer que nno funcione para recuperar su búsqueda. Prefiero :nohque mantenga la búsqueda anterior en el registro para su reutilización. Puede unirse <F3>a eso connnoremap <F3> :noh<CR>
jbyler
4

Solo uso el simple nohl a continuación y no se necesitan complementos.

:nohl

Stryker
fuente
4

Supongo que la pregunta original se refería a no deshabilitar resaltado de búsqueda, sino simplemente borrar el resaltado de la última búsqueda. La solución de buscar una cadena de galimatías, que mencionó el póster original, es una que he estado usando durante algún tiempo para borrar el resaltado de una búsqueda anterior, pero es fea y engorrosa.

Varias sugerencias que he encontrado para agregar nnoremap ...a ~ / .vimrc tienen el efecto de poner vim en modo de reemplazo en el inicio, que no es lo que quiero. La solución más simple que he encontrado es agregar la línea

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

a mi ~ / .vimrc. Esto obedece al principio KISS y no interfiere con las teclas de flecha, lo que sí hace un solo <esc>. Se requiere un doble <esc> en el modo de comando (o un triple <esc> desde el modo insertar o reemplazar) para borrar el resaltado de una búsqueda anterior, pero desde la perspectiva de la interfaz de usuario esto hace que la operación sea lo más simple posible.

Lindsay Haisley
fuente
¿Qué quiere decir con el <esc> único que interfiere con las teclas de flecha?
hansmosh
1
@hansmosh Vea unix.stackexchange.com/questions/28713/… Uso dos líneas en mi .vimrc de la siguiente manera nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
Lindsay Haisley,
4

Yo uso lo siguiente en mi ~/.vimrc

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

Esto hace que sea muy fácil y rápido borrar la búsqueda resaltada actual. Mi clave de líder está asignada para \que esto haga que la acción sea muy fácil de realizar con el dedo meñique y el pulgar derechos.

John Slavick
fuente
3

Creo que mezclar @ShaunBouckaert y Mar 19 '09 a las 16:22 respuestas es un buen compromiso:

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

Presione Entery el texto resaltado ya no estará resaltado, mientras que el resaltado de búsqueda todavía está habilitado.

Ekans
fuente
3

puede usar : noremap para activar / desactivar el resultado de búsqueda, como este

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

caopeng
fuente
3

Según la respuesta @ baruch-even, puede eliminar el término de búsqueda al ESCpresionar dos veces mientras está en modo normal con:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[
dinigo
fuente
Creo que el segundo enlace está bien, pero el primero es peligroso. La reasignación <esc>funciona bien en GUI vim, pero causa problemas graves con las teclas de flecha y otras teclas codificadas con ESC cuando se ejecuta vim en un terminal. No lo ponga en su ~/.vimrc sin envolverlo en if has('gui_running')... end. También considere agregar el <silent>que evita el parpadeo del :nohcomando en la barra de estado.
jbyler
1

A mí tampoco me gusta. Me resultaba aburrido entrar :nohltodo el tiempo ... así que puse el siguiente mapeo en mi.vimrc

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

El primer bit ( :nohl<cr>) borra el resaltado; el segundo bit ( :<backspace>) es un truco para limpiar la línea de comando. La búsqueda todavía está allí en segundo plano, por lo que si simplemente presiona n, volverá a resaltarse y lo llevará a la próxima aparición.

ricardo
fuente
1

Agregué esto a mi vimrcarchivo.

command! H let @/=""

Después de hacer una búsqueda y desea borrar los aspectos más destacados de su búsqueda, simplemente haga :H

pixel 67
fuente
1

Alternativamente, puede agregar la asignación en su archivo .vimrc como,

nmap <C-N>: nohlsearch

y luego puedes presionar

Ctrl + N

en cualquier momento para borrar el texto resaltado

León
fuente
Por favor, editar su respuesta para asegurarse de que mejora las otras respuestas que ya están presentes en esta pregunta.
hongsy