¿Cuál es la diferencia funcional entre: nohlsearch y: set nohlsearch?

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 1hlsearch 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

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım