Ao usar o vim, tenho dificuldade em encontrar meu cursor rapidamente após inserir outro buffer, especialmente se houver muitas divisões abertas.
Corrigi isso escrevendo uma função que é chamada por um autocmd quando um buffer é inserido. A função corresponde e descombina alguns caracteres ao redor do cursor, aguardando entre o uso de sleep
.
No entanto, isso fica chato ao alternar muito e rapidamente, ou por exemplo, ao abrir uma tag de ajuda, já que minha função é chamadadepoisentrando no buffer, masantespulando para a tag de ajuda, então parece tarde.
Como posso atingir meu objetivo sem desacelerar significativamente o vim?
EDITAR: resolvi a parte da tag de ajuda verificando o tipo de arquivo de ajuda em minha função de destaque. No entanto, isto ainda não é o ideal.
Esta é a minha função:
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
Responder1
Uma alternativa ao bloqueio do sono seria remover o destaque apenas em um evento seguinte. Para fazer isso, após o matchadd()
, basta definir outro (disparar uma vez; ou seja, um que se exclua) autocmd que limpa o realce e retornar da função. Eventos adequados seriam WinLeave,CursorMoved,CursorMovedI,CursorHold,CursorHoldI
.
Responder2
Que tal usar as opções integradas "cursorline" e "cursorcolumn"? Em seguida, você pode usar dois autocmds: um autocmd BufEnter ou WinEnter to do setlocal cursorline cursorcolumn
e um CursorHold,WinLeave autocmd to do setlocal nocursorline nocursorcolumn
.