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