Graças à resposta do @ IngoKarkat. Eu encontrei uma solução alternativa. Substitua o bloco if
na função por:
if MyTest == 2
let v:fcs_choice = "reload"
else
let v:fcs_choice = ""
endif
Isso parece fazer o truque.
Estou usando o seguinte autocommand do Vim no meu arquivo .gvimrc
:
augroup MyAuGroup
autocmd MyAuGroup FileChangedShell * call FileChanedEvent_BuffUpdate()
augroup END
function FileChanedEvent_BuffUpdate()
let MyBn = bufname("%")
let MyStr = "Warning: File \"".MyBn."\" has changed since editing started\nSee \":help W11\" for more info."
let MyTest = confirm(MyStr, "&OK\n&Load File", 2, "W")
if MyTest == 2
edit
else
endif
endfunction
com a intenção de substituir o comportamento gVim padrão quando um arquivo é alterado externamente (consulte esta questão ). No entanto, se várias janelas forem abertas, mostrando vários buffers, o comando edit
funcionará na última janela ativa e não na janela que contém o buffer que foi alterado.
Como posso determinar qual buffer causou o evento FileChangedShell
e aplicar o edit
commant a esse buffer?
De :help FileChangedShell
:
NOTE: When this autocommand is executed, the current buffer "%" may be different from the buffer that was changed "<afile>".
Você precisa localizar a janela onde o arquivo correspondente está sendo editado. Para isso, o número do buffer (em <abuf>
) é ainda mais fácil:
let winNr = bufwinnr(0 + expand('<abuf>'))
execute winNr . 'wincmd w'
edit
O mesmo se aplica ao nome do buffer; substituir
let MyBn = bufname("%")
com
let MyBn = expand('<afile>')