Destaque o cursor após alterar o buffer no vim

Destaque o cursor após alterar o buffer no vim

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 cursorcolumne um CursorHold,WinLeave autocmd to do setlocal nocursorline nocursorcolumn.

informação relacionada