
Ich verwende den folgenden Vim-Autobefehl in meiner .gvimrc
Datei:
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
mit der Absicht, das Standardverhalten von gVim zu ersetzen, wenn eine Datei extern geändert wird (siehediese Frage). Wenn jedoch mehrere Fenster geöffnet sind, die mehrere Puffer anzeigen, edit
funktioniert der Befehl im letzten aktiven Fenster und nicht im Fenster, das den geänderten Puffer enthält.
Wie kann ich feststellen, welcher Puffer das FileChangedShell
Ereignis verursacht hat, und den edit
Befehl auf diesen Puffer anwenden?
Antwort1
Aus :help FileChangedShell
:
NOTE: When this autocommand is executed, the current buffer "%" may be different from the buffer that was changed "<afile>".
Sie müssen das Fenster finden, in dem die entsprechende Datei bearbeitet wird. <abuf>
Noch einfacher ist die Eingabe der Puffernummer (in ):
let winNr = bufwinnr(0 + expand('<abuf>'))
execute winNr . 'wincmd w'
edit
Dasselbe gilt für den Puffernamen; ersetzen Sie
let MyBn = bufname("%")
mit
let MyBn = expand('<afile>')
Antwort2
Danke für die Antwort von @IngoKarkat. Ich habe eine alternative Lösung gefunden. Ersetzen Sie den if
Block in der Funktion durch:
if MyTest == 2
let v:fcs_choice = "reload"
else
let v:fcs_choice = ""
endif
Das scheint zu funktionieren.