search - salir - vim commands
Cómo cambiar la visibilidad de la búsqueda de Vim sin desactivarla (9)
Lo que me gustaría es mapear una tecla, por ejemplo, F4 , para que al presionar F4 se cambie la visibilidad de los aspectos destacados de la búsqueda, y para que comenzar una nueva búsqueda permita la visibilidad sin importar la visibilidad actual.
Lo que he intentado:
- La asignación de F4 a
:nohlsearch
inhabilita temporalmente la visibilidad del resaltado sin desactivar la configuraciónhlsearch
, pero no vuelve a alternar la visibilidad. - Mapeo F4 para
:set hlsearch!
activa / desactiva la activación, pero no quiero desactivar la configuración dehlsearch
, solo la configuración de visibilidad. Sihlsearch
está desactivado, entonces no vuelve automáticamente con una nueva búsqueda.
No parece haber una forma opuesta de :nohlsearch
y el comando en sí tiene problemas para ser llamado desde una función.
He encontrado preguntas similares, pero no proporcionan una respuesta.
Actualizar:
El primer comentario proporciona exactamente lo que estaba pidiendo, que se reproduce a continuación:
let hlstate=0
nnoremap <F4> :if (hlstate == 0) /| nohlsearch /| else /| set hlsearch /| endif /| let hlstate=1-hlstate<cr>
(Nota: para cualquiera que use este --- es necesario agrupar el mapa en una línea en lugar de usar una función, ya que no se puede efectuar un cambio en el resaltado desde dentro de una función).
Pregunta relacionada para una funcionalidad ligeramente diferente: https://stackoverflow.com/a/16750393/1176650
Lo que me gustaría es mapear una tecla, por ejemplo, F4, para que al presionar F4 se cambie la visibilidad de los aspectos destacados de la búsqueda, y para que comenzar una nueva búsqueda permita la visibilidad sin importar la visibilidad actual.
Solo probé esto y parece hacer el truco:
" switch higlight no matter the previous state
nmap <F4> :set hls! <cr>
" hit ''/'' highlights then enter search mode
nnoremap / :set hlsearch<cr>/
Bien, prueba esto:
:map <F12> :set nohls<CR>:let @/ = ""<CR>:set hls<CR>
Luego, si presiona F12 , se desactiva el resaltado, luego se establece la última cadena de búsqueda en una vacía (es decir, se borra) y se vuelve a resaltar.
O si desea guardar la cadena de búsqueda, puede hacer algo como:
:map <F12> :set nohls<CR>:let @s = @/<CR>:let @/ = ""<CR>:set hls<CR>
:map <SHIFT><F12> :let @/=@s<CR>
Ahora, después de presionar MAYÚS F12, la cadena de búsqueda original se restablecerá y se resaltará.
Si eso todavía no te satisface, todavía puedes hacerlo como:
:map <F12> :highlight Search term=None ctermfg=None ctermbg=None guifg=None guibg=None<CR>
:map <SHIFT><F12> :highlight Search term=OV1 ctermfg=OV2 ctermbg=OV3 guifg=OV4 guibg=OV5<CR>
Donde OVx
son los valores originales que puede escribir cuando emite :highlight Search<CR>
. De esta manera, se puede apagar y volver a encender, pero con dos atajos de teclado. Si lo desea con uno, debe crear una función para eso que lo alterna, y luego crear una asignación para esa función.
Desde Resaltar todas las coincidencias de patrones de búsqueda , podemos asignar una tecla para alternar los estados de resaltado. A diferencia de la respuesta de trusktr, aquí usamos una variable para almacenar el estado.
"Si desea poder habilitar / deshabilitar el resaltado rápidamente, puede asignar una tecla para alternar la opción de búsqueda hls":
" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>
"O, presione regresar para salir temporalmente de la búsqueda resaltada":
:nnoremap <CR> :nohlsearch<CR><CR>
Hmm, no es :set hlsearch
lo contrario de :nohlsearch
?
El primero activa los resaltados, mientras que el segundo desactiva los resaltados temporalmente.
No entiendo lo que quiere decir con "no quiero cambiar la configuración ''hlsearch'' en sí misma, solo la configuración de visibilidad" :set hlsearch
y su pendiente solo tratan con la visibilidad ("resaltado") de las coincidencias de búsqueda , nada más.
Si desea resaltar las coincidencias cada vez que realiza una búsqueda, simplemente agregue :set hlsearch
en su ~/.vimrc
.
Si desea desactivar el resaltado después de una búsqueda, simplemente :nohlsearch
F4
a :nohlsearch
, el resaltado volverá a aparecer en su próxima búsqueda.
Otra respuesta debe cambiar la búsqueda de resaltado, esto no es tan bueno.
En realidad solo necesitas
let @/ = ''''
Escribo una pequeña función para implementar esta función, y resalto la palabra actual (como la tecla * estrella), pero no salto a la siguiente palabra coincidente y no toco jumplist.
function! HLtoggle()
if (@/ == '''')
let @/ = expand("<cword>")
else
let @/ = ''''
endif
endfunc
Es simple, pero no lo encuentro en google.
¡Diviértete con vim! :)
Puede alternar con :set invhlsearch
Tenga en cuenta que los Vims recientes (7.4.79) tienen la variable v:hlsearch
disponible. Esto significa que puede mejorar su asignación a:
:nnoremap <silent><expr> <Leader>h (&hls && v:hlsearch ? '':nohls'' : '':set hls'')."/n"
Yo uso esta versión ligeramente mejorada de trusktr. Tenga en cuenta que ctrl + c como se usa en el ejemplo de trusktr ya está asignado a Escape por defecto, lo cual es muy útil.
" Toggle highlight search
let hlstate=0
nnomap <Leader>b :if (hlstate%2 == 0) /| nohlsearch /| else /| set hlsearch /| endif /| let hlstate=hlstate+1<CR>:echo "toggled visibility for hlsearch"<CR>
inomap <Leader>b <ESC>:if (hlstate%2 == 0) /| nohlsearch /| else /| set hlsearch /| endif /| let hlstate=hlstate+1<CR>:echo "toggled visibility for hlsearch"<CR>a
" ctrl+c to toggle highlight.
let hlstate=0
nnoremap <c-c> :if (hlstate%2 == 0) /| nohlsearch /| else /| set hlsearch /| endif /| let hlstate=hlstate+1<cr>
Ahora solo presiona ctrl + c para alternar resaltado. La única desventaja es que debe presionarlo dos veces después de una búsqueda para desactivar el resaltado porque la búsqueda no incrementa el contador.