Resalte el cursor después de cambiar el búfer en vim

Resalte el cursor después de cambiar el búfer en vim

Mientras uso vim, tengo problemas para encontrar el cursor rápidamente después de ingresar a otro búfer, especialmente si tengo muchas divisiones abiertas.

Solucioné esto escribiendo una función que es llamada por un autocmd cuando se ingresa un búfer. La función coincide y no coincide con algunos caracteres alrededor del cursor, esperando entre uso sleep.

Sin embargo, esto resulta molesto cuando se cambia mucho y rápidamente o, por ejemplo, cuando se abre una etiqueta de ayuda, ya que mi función se llamadespuésentrando al buffer peroantessaltando a la etiqueta de ayuda, por lo que aparece tarde.

¿Cómo puedo lograr mi objetivo sin ralentizar significativamente vim?

EDITAR: Solucioné la parte de la etiqueta de ayuda comparándola con el tipo de archivo de ayuda en mi función de resaltado. Sin embargo, esto todavía no es óptimo.

Esta es mi función:

function! HlCursor()
    let l:pat = '\v.{0,3}%#.{0,3}'
    " Let it blink for 250ms
    let l:match = matchadd('Todo', l:pat)
    redraw | sleep 250 m
    call matchdelete(l:match)
    redraw
endfunction

Respuesta1

Una alternativa a bloquear el sueño sería eliminar solo el resaltado en el siguiente evento. Para hacer eso, después de matchadd(), simplemente defina otro autocmd (disparar una vez; es decir, uno que se elimine a sí mismo) que borre el resaltado y regrese de la función. Los eventos adecuados serían WinLeave,CursorMoved,CursorMovedI,CursorHold,CursorHoldI.

Respuesta2

¿Qué tal si utilizamos las opciones integradas "cursorline" y "cursorcolumn"? Luego, puede usar dos autocmds: un autocmd BufEnter o WinEnter para hacer setlocal cursorline cursorcolumny un autocmd CursorHold,WinLeave para hacer setlocal nocursorline nocursorcolumn.

información relacionada