sono vimL dentro de uma função

9

Estou tentando definir uma função que tornará mais fácil ver onde o cursor está localizado, colocando miras ao redor dele por 100ms.

Aqui está a minha tentativa:

function! Flash()
    set cursorline cursorcolumn
    sleep 100m
    set nocursorline nocursorcolumn
endfunction
nnoremap <leader>fl :call Flash()

Parece que a função acima está chamando a suspensão no início, e não entre as duas chamadas "definidas".

Existe algo fundamental no "sono" que estou entendendo mal?

Jonathan.Brink
fonte
Vim aqui tentando fazer algo semelhante. Você nem precisa de uma função; pode mapear os comandos diretamente na linha do mapa.
Spidey

Respostas:

12

O problema é que o Vim não redesenha a tela até que a função seja concluída. Não tenho certeza de qual é exatamente a lógica do Vim em quando redesenhar , mas nesse tipo de caso você costuma chamar redrawmanualmente:

function! Flash()
    set cursorline cursorcolumn
    redraw
    sleep 100m
    set nocursorline nocursorcolumn
endfunction

Você provavelmente também deseja adicionar <CR>ao mapeamento de chaves:

nnoremap <leader>fl :call Flash()<CR>
Martin Tournoij
fonte