Pregunta:
Me di cuenta de que cuando uso :nohlsearch
en realidad no hace lo mismo que :set nohlsearch
.
En particular, la configuración de hlsearch
no está realmente desactivada (que es lo :set hlsearch
).
Para demostrar lo que quiero decir:
:set hlsearch
:nohlsearch
:echo &hlsearch
Esto imprime 1
(¡ hlsearch todavía está configurado! )
:set hlsearch
:set nohlsearch
:echo &hlsearch
Esto imprime 0
porque desactivamos hlsearch usando la forma estándar para desactivar una configuración en vim.
Así que me pregunto porque tiene que haber alguna razón real para que :nohlsearch
comando :nohlsearch
ex.
La razón por la que me importa es que ahora tengo una necesidad en mi secuencia de comandos de vim para probar si el resaltado de búsqueda está activo, y como estaba usando :nohlsearch
lugar de ": set nohlsearch" en mis otras secuencias de comandos, mi prueba de &hlsearch
siempre devuelve 1
. Entonces me pregunto qué estoy cambiando al dejar de usar el comando nohlsearch
ex.
Respuesta:
Desde :h :nohlsearch
:noh :nohlsearch :noh[lsearch] Stop the highlighting for the 'hlsearch' option. It is automatically turned back on when using a search command, or setting the 'hlsearch' option. This command doesn't work in an autocommand, because the highlighting state is saved and restored when executing autocommands autocmd-searchpat. Same thing for when invoking a user function.
El punto clave es que vuelve a activar automáticamente el resaltado cuando comienzas una nueva búsqueda. :set nohlsearch
realidad desactiva hlsearch
, lo que significa que la próxima vez que busque algo no se resaltará.
Ejemplo: Suponga que hlsearch
está hlsearch
. Si actualmente está buscando "hola" en un búfer, todos los "hola" se resaltarán. Si usa :nohlsearch
no se resaltará nada. Pero si luego busca "mundo", se resaltarán todos los "mundos". Si hubiera utilizado set nohlsearch
en set nohlsearch
lugar, "world" no estaría resaltado.
También tenga en cuenta que este comando no hace básicamente nada dentro de una función de usuario. Por ejemplo,
function! NoHlsearch()
nohlsearch
endfunction
no tiene ningún efecto visible cuando se ejecuta.
Para ver si hlsearch está realmente activo, debe verificar la variable v:hlsearch
. Cuando v:hlsearch = 0
resaltado está desactivado y cuando v:hlsearch = 1
resaltado está v:hlsearch = 1
. Probablemente debería asegurarse de que &hlsearch = 1
antes de comprobar v:hlsearch
.
De :hv:hlsearch
v:hlsearch hlsearch-variable v:hlsearch Variable that determines whether search highlighting is on. Makes sense only if 'hlsearch' is enabled which requires +extra_search. Setting this variable to zero acts the like :nohlsearch command, setting it to one acts like let &hlsearch = &hlsearch