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?


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>

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.


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.


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á.


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.


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.


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>

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.


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:


26

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


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>
    

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.

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


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í


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



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.


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

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


5

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

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>

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


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.


¿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.


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.


3

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

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


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>^[

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.


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


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


Por favor, editar su respuesta para asegurarse de que mejora las otras respuestas que ya están presentes en esta pregunta.
hongsy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.