2010-08-15 7 views
6

Ich versuche Vim den Befehl 'CommandTFlush' ausführen, wenn eine neue Datei geschrieben wird. Für Benutzer, die das Command-T-Plugin nicht verwenden, wird der Befehl 'CommandTFlush' verwendet, um einen Index von Dateien im aktuellen Verzeichnis wiederherzustellen.Führen Sie den Befehl CommandTFlush, wenn eine neue Datei geschrieben wird

Ich möchte den Befehl ausführen, nachdem die Datei auf die Festplatte geschrieben wurde, so dass CommandTFlush die Datei finden und sie zu ihrem Index hinzufügen wird.

Ich habe versucht, eine Funktion selbst zu schreiben, aber es entweder nicht ausgelöst oder es löst zu früh (vor der Datei geschrieben wird, und der ganze Punkt ist, um die Datei zu dem Index hinzugefügt werden):

au! BufWritePre * ks| call NewFilesUpdatesCommandT() 
function! NewFilesUpdatesCommandT() 
    let [email protected]% 
    if !filereadable(filename) 
     CommandTFlush 
    endif 
endfunction 

Ich vermute, es könnte gelöst werden, indem einige Boolean Var (IsTheFileNew) in BufWritePre und dann den Befehl CommandTFlush in BufWritePost ausführen, wenn die Datei erstellt wurde, aber ich kann nicht herausfinden, die Syntax. Eine andere Lösung könnte sein, den BufWritePost Callback innerhalb des BufWritePre Callbacks zu setzen oder zu deaktivieren, wenn das möglich ist ...

Kann mir hier jemand helfen? ;)

+0

Was macht 'ks |' zu Beginn Ihres Autokommandos? Kann es nicht in vim Hilfe finden. – ZyX

+0

Es gefunden. Warum möchten Sie Ihre Position markieren, wenn Ihre Funktion den Cursor nicht bewegt? – ZyX

+0

Keine Ahnung wirklich. Es ist nur ein schlechter Kopier-/Einfüge-Job, basierend auf einigen Zeigern, die ich in #[email protected] bekommen habe. Habe noch nicht ganz herausgefunden, wie man aus den Hilfedateien noch etwas Hilfreiches herausholen kann. Ich bin an meinem dritten Tag mit Vim hier;) – peterfarsinsen

Antwort

2
augroup NFUCT 
    autocmd! 
    autocmd BufWritePre * call NFUCTset() 
augroup END 
function NFUCTset() 
    if !filereadable(expand('%')) 
     augroup NFUCT 
      autocmd BufWritePost * call NFUCT() 
     augroup END 
    endif 
endfunction 
function NFUCT() 
    augroup NFUCT 
     autocmd! 
     autocmd BufWritePre * call NFUCTset() 
    augroup END 
    CommandTFlush 
endfunction 

Dies ist eine Realisierung Ihres zweiten Vorschlags.

+0

Danke! Scheint genau so zu funktionieren, wie ich es gerne hätte. – peterfarsinsen

17

Hier ist meine Lösung. Es löst CommandTFlush immer dann aus, wenn eine Datei geschrieben wird, und auch dann, wenn Vims Fenster den Fokus erhält. Dies ist nützlich, wenn Sie Dateien außerhalb von vim erstellen, z. B. indem Sie zwischen Zweigen in Ihrem Versionskontrollsystem wechseln. Die neuen Dateien sind sofort nach der erneuten Eingabe von Vim in CommandT verfügbar.

augroup CommandTExtension 
    autocmd! 
    autocmd FocusGained * CommandTFlush 
    autocmd BufWritePost * CommandTFlush 
augroup END 
+0

Das funktioniert sehr gut. Ich habe das einfach in meinem .vimrc gespeichert und jetzt funktioniert CommandT so, wie ich es erwarten würde. Vielen Dank. –

+0

Das ist großartig, danke. – jpc

+0

Perfekt - danke! – Skilldrick