¿Cómo puedo borrar el resaltado de palabras en el documento actual (por ejemplo, después de buscar una palabra)?


61

Cuando busca una palabra en un archivo con algo parecido /console.log, console.logse resaltan todas las instancias de .

Cuando ya no esté interesado en estos, el resaltado puede ser una distracción. Mi estrategia actual para eliminar el resaltado es hacer algo como /asntehua. ¿Hay alguna manera adecuada de eliminar esta palabra resaltada?


2
No hay nada más rápido que escribir /skldafjlksjdf;)
— Shahbaz

2
Añadir lo siguiente a su .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Presione regresar en modo comando, y el resaltado desaparecerá.
— nilon

Respuestas:


47

Como alternativa a :noh, me gusta hacer un :let @/=""mapeo a un atajo de teclado.

La diferencia es que :nohdeja el término de búsqueda en el registro de búsqueda, por lo que ny Nen el modo normal de reanudar la búsqueda por saltar al siguiente partido anterior / y re-resaltado. El uso :let @/="", por otro lado, causa el mensaje E25: No previous regular expressiony deja el cursor donde estaba , lo cual es especialmente conveniente si aún no lo sabe ctrl, opero lo golpeó accidentalmente n.

Esto también se puede usar al revés. Para que vim resalte un texto sin saltar a él, puede:let @/="some text"

En estas expresiones, @ le permite referirse a un registro, y @ / es el registro que contiene el último patrón de búsqueda.


31

Simplemente escriba

:noh<cr>

(Donde <cr>simboliza un retorno de carro, es decir, Intro). La versión completa no abreviada de este comando es :nohlsearch.

Para mayor comodidad, puede tener un mapeo como

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

en su .vimrc. Como mi líder es el Espacio, esto me permite borrar el resaltado simplemente tocando el espacio dos veces. (Por defecto, <Leader>está configurado en \)

Otra opción popular es vincularlo a Ctrl+ L, ya que este es más o menos el valor predeterminado para 'pantalla de terminal redibujada', que es más o menos lo que está haciendo:

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

Esto tiene el efecto colateral de también volver a dibujar la pantalla del terminal, lo que podría ser lento si su conexión de terminal es lento (que es muy raro en estos días).
NOTA: Si está usando tpope / vim-sensible, entonces ya ofrece la <C-l>asignación mencionada anteriormente.


21

Deshabilitar la búsqueda resaltada permanentemente

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 o se realiza una nueva búsqueda)


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>
    

Agregué nnoremap <esc> :noh<return><esc>a mi vimrcpero no funciona. He jkmapeado para escapar, ¿podría ser por eso?
— mbigras

¿Qué está pasando exactamente? Tal vez deshabilitó la ESCclave?
— Sheharyar

al presionar jkno se desactiva el texto resaltado (pero aún funciona como Esc). Al presionar my Escen la parte superior izquierda de mi teclado, se desactiva el texto resaltado.
— mbigras

Entonces tienes tu respuesta allí mismo. Coloque su jkmapa debajo del ESCmapa y asegúrese de estar usando un simple en maplugar denoremap
— Sheharyar

La reasignación de escape puede causar problemas con las teclas de flecha, y asumiría otros escenarios que usan un código de escape. vi.stackexchange.com/questions/11144/…
— Rob Mosher

2

Después de probar varias soluciones sugeridas para atajos para esto en ~ / vimrc, decidí simplemente agregarlo nmap <esc><esc> :noh<return>. El doble escape evita la interferencia con la función de las teclas de flecha. Si está en modo de inserción, es necesario un escape triple. Esto es rápido de ejecutar y fácil de recordar.


2

Agregué un autocmd a mi .vimrc que elimina el resaltado cada vez que ingresa al modo de inserción.

 autocmd InsertEnter * :let @/=""

2
Usar en nohllugar de let @/=""sería un mejor enfoque, ya que entonces no golpea su búsqueda actual.
— jamessan

@jamessan funciona con el :let @/=""comando pero autocmd InsertEnter * :nohno por alguna razón, ¿alguna idea de por qué?
— tobek

1
En realidad, encontré la razón: según los documentos 'El resaltado de búsqueda no se puede desactivar con ": nohlsearch" en un autocomando' - detalles de por qué: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
— tobek

1

Si no desea resaltar después de cualquier búsqueda, puede usar esto (mejor):

:set nohls

o esto (peor):

:hi Search NONE

1

Cuando escribí :help incsearch, encontré lo siguiente en el manual:

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

que renuncié a usar ya que otras soluciones que probé no eran perfectas y esta solución viene "directamente de la boca del caballo", por así decirlo. Destaca todas las coincidencias de búsqueda en la ventana actual.


1
/asdfasdf

Esto tiene la ventaja de que no tiene que escribirlo con exactitud. La desventaja es que hay una probabilidad de 1: 68719476736 en un archivo de 4096 bytes de que esto no funciona y su cursor saltará a un lugar diferente. Esta posibilidad aumenta para archivos más grandes.


1
Bienvenido en el vi SE! Creo que la cadena asdfasdfes especial en el sentido de que ocurre con mucha frecuencia en archivos prácticos, que una secuencia de 8 bytes seleccionada al azar. Por lo tanto, la posibilidad es mucho mayor. :-)
— user259412

0

No creo que eliminar hls sea algo bueno, ¿qué tal si es fácil habilitar o deshabilitar la creación de un acceso directo fácil (booleano) en mi 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

La magia ocurre debido a " !" al final de la configuración


0

Encuentro que es muy raro para mí querer resaltar en absoluto y cuando necesito resaltarlo es solo por un breve momento. Mi solucion es

nnoremap <Leader>/ set hls!<CR>

Esto permite resaltar cuando presiona \/y lo deshabilita nuevamente si presiona nuevamente. Esto proporciona un fácil acceso al resaltado en los casos excepcionales cuando lo necesita.

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.