¿Cómo puedo resaltar todas las apariciones de una palabra seleccionada en GVim, como en Notepad ++?
¿Cómo puedo resaltar todas las apariciones de una palabra seleccionada en GVim, como en Notepad ++?
Respuestas:
En modo normal:
:set hlsearch
Luego busque un patrón con el comando /
en modo Normal, o <Ctrl>o
seguido /
en modo Insertar. *
en modo Normal buscará la próxima aparición de la palabra debajo del cursor. La hlsearch
opción los resaltará a todos si está configurado. #
buscará la aparición previa de la palabra.
Para eliminar el resaltado de la búsqueda anterior:
:nohlsearch
Es posible que desee asignar :nohlsearch<CR>
a alguna tecla conveniente.
*
o #
por <Ctrl>o
en el modo normal.
:nohlsearch
, simplemente puede usar:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
para alternar entre resaltado y eliminar resaltado por <F4>
.
La *
tecla resaltará todas las apariciones de la palabra que está debajo del cursor.
&hlsearch
está encendido.
#
.
Sé que es una pregunta muy antigua, pero si alguien está interesado en esta función, puede consultar este código http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle
" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
let @/ = ''
if exists('#auto_highlight')
au! auto_highlight
augroup! auto_highlight
setl updatetime=4000
echo 'Highlight current word: off'
return 0
else
augroup auto_highlight
au!
au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
augroup end
setl updatetime=500
echo 'Highlight current word: ON'
return 1
endif
endfunction
de la manera más simple, escriba en modo normal *
También tengo estas asignaciones para habilitar y deshabilitar
"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv
Seleccione la palabra haciendo clic en ella
set mouse=a "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
Bonus: CountWordFunction
fun! CountWordFunction()
try
let l:win_view = winsaveview()
let l:old_query = getreg('/')
let var = expand("<cword>")
exec "%s/" . var . "//gn"
finally
call winrestview(l:win_view)
call setreg('/', l:old_query)
endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>
Seleccionando la palabra con el mouse y contando las ocurrencias a la vez: OBS: Observe que en esta versión tenemos el comando "CountWord" al final
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
ynnoremap # #``cgN
*
, después de escribir , ¿cómo desactivo el resaltado?
:noh
o:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
y nnoremap <silent> # :execute "normal! #n"<cr>
? Estos solo resaltan la palabra debajo del cursor pero no la mueven a la siguiente ocurrencia.
Las soluciones basadas en búsquedas ( *, /...) mueven el cursor, lo cual puede ser desafortunado.
Una alternativa es usar el complemento mark.vim mejorado , luego complete su .vimrc
para dejar que haga doble clic en el resaltado de activación (no sé cómo una selección de teclado puede activar un comando):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Permite múltiples resaltados, persistencia, etc.
Para eliminar el resaltado, ya sea:
:Mark
(apagar hasta la próxima selección):MarkClear
:set noincsearch
. En mi opinión, es una de las características más molestas de Vim y una de las primeras cosas que deshabilito para nuevas instalaciones.
*
moverá incondicionalmente el cursor. Y no puedo ver cómo incsearch
podría ser molesto, ya que es solo un "mirar hacia adelante", realizar la búsqueda actual sin cambiar realmente su posición.
incsearch
evitaría el movimiento, pero una prueba rápida confirma que estás en lo correcto. Mis disculpas. Sin embargo, es muy fácil de crear una asignación que impide el movimiento: :nnoremap * *N
. No puedo creer que no te moleste que tu cursor salte por toda la pantalla mientras realizas una búsqueda. Pero ... estas cosas son completamente subjetivas. Vive la différence ;-)
:let @/='hilight_this'
, suponiendo que lo haya hlsearch
habilitado. Destaca el texto sin saltar, y no tiene que cambiar la configuración existente. Esto cambia el valor que está almacenado actualmente en el registro de búsqueda.
Primero (o en tu .vimrc):
:set hlsearch
Luego coloca el cursor sobre la palabra que deseas resaltar y presiona *
.
hlsearch
significa resaltar todas las ocurrencias de la búsqueda actual, y *
significa buscar la palabra debajo del cursor.
Primero asegúrese de que hlsearch esté habilitado emitiendo el siguiente comando
:set hlsearch
También puede agregar esto a su archivo .vimrc como conjunto
set hlsearch
ahora cuando utiliza el mecanismo de búsqueda rápida en modo comando o un comando de búsqueda normal, todos los resultados se resaltarán. Para avanzar entre resultados, presione 'n' para retroceder presione 'N'
En modo normal, para realizar una búsqueda rápida de la palabra debajo del cursor y saltar a la siguiente aparición con un comando, presione '*', también puede buscar la palabra debajo del cursor y moverse a la aparición anterior presionando '# '
En modo normal, la búsqueda rápida también se puede invocar con
/searchterm<Enter>
para eliminar aspectos destacados en el uso de las ocupaciones, he vinculado esto a un acceso directo en mi .vimrc
:nohl
Habilitar el resaltado de búsqueda:
:set hlsearch
Luego busca la palabra:
/word<Enter>
Mi favorito para hacer esto es el complemento mark.vim . Permite resaltar varias palabras en diferentes colores simultáneamente.
para resaltar la palabra sin mover el cursor, plop
" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>
en tu vimrc.
Lo bueno de esto es g*
y g#
seguirá funcionando como "normal" *
y #
.
Para establecer hlsearch
fuera, puede utilizar "forma corta" (a menos que tenga otra función que comienza con "Noh" en el modo de comandos): :noh
. O puedes usar la versión larga::nohlsearch
Para una conveniencia extrema (me encuentro alternando hlsearch
quizás 20 veces por día), puede asignar algo para alternar de esta hlsearch
manera:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. si <leader>
es \(es por defecto), puede presionar \st(rápidamente) en modo normal para alternar hlsearch
.
O tal vez solo quieras tener un :noh
mapa:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Lo anterior simplemente se ejecuta de :nohlsearch
manera que (a diferencia de :set hlsearch!
) todavía resaltará la palabra la próxima vez que presione *o #en modo normal .
salud
Utilizar autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Asegúrate de haber IncSearch
establecido algo. por ej call s:Attr('IncSearch', 'reverse')
. Alternativamente, puede usar otro grupo destacado en su lugar.
Esto resaltará todas las apariciones de palabras debajo de su cursor sin demora. Me parece que una demora me ralentiza cuando paso el código. El color de resaltado coincidirá con el color de la palabra, por lo que se mantiene consistente con su esquema.
¿Por qué no solo: z /
Eso resaltará la palabra actual debajo del cursor y cualquier otra ocurrencia. Y no tiene que dar un comando separado para cada elemento que está buscando. ¿Quizás eso no está disponible en el impío gvim? Está en vim por defecto.
* solo es bueno si desea que el cursor se mueva a la siguiente aparición. Al comparar dos cosas visualmente, a menudo no desea que se mueva el cursor, y es molesto presionar la tecla * cada vez.
~/.vimrc
archivo
" highlight the searched items
set hlsearch
" F8 search for word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
:so%
En el modelo normal, pasa la palabra.
Presione * Presione F8 para buscar recursivamente debajo de todo su proyecto sobre la palabra
Por ejemplo, este plugIns:
Solo busque debajo del cursor en vimawesome.com
La clave, como mencionó clagccs , es que lo más destacado NO entra en conflicto con su búsqueda : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Captura de pantalla de cómo NO entra en conflicto con la búsqueda: Notas:
hlsearch
mucho, es posible que desee asignar en:set hlsearch!
lugar de:set nohlsearch
. Esto alterna la configuración en lugar de apagarla siempre.