
ファイル内で次の Vim 自動コマンドを使用しています.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
ファイルが外部から変更されたときのデフォルトのgVimの動作を置き換えることを目的としています(この質問ただし、複数のウィンドウが開かれ、複数のバッファが表示されている場合、コマンドはedit
最後にアクティブだったウィンドウで機能し、変更されたバッファを含むウィンドウでは機能しません。
FileChangedShell
どのバッファがイベントの原因となったかを判断し、edit
そのバッファにコマンドを適用するにはどうすればよいでしょうか?
答え1
から:help FileChangedShell
:
NOTE: When this autocommand is executed, the current buffer "%" may be different from the buffer that was changed "<afile>".
対応するファイルが編集されているウィンドウを見つける必要があります。そのためには、バッファ番号 (in <abuf>
) を使用するとさらに簡単です。
let winNr = bufwinnr(0 + expand('<abuf>'))
execute winNr . 'wincmd w'
edit
バッファ名にも同じことが当てはまります。
let MyBn = bufname("%")
と
let MyBn = expand('<afile>')
答え2
@IngoKarkat さんの回答に感謝します。別の解決策を見つけました。if
関数内のブロックを次のように置き換えます。
if MyTest == 2
let v:fcs_choice = "reload"
else
let v:fcs_choice = ""
endif
これでうまくいくようです。