2009-08-21 4 views
6

Ich muss die logic-und zwei autocmd Ereignisse in vim tun. Im Grunde muss der Befehl auf einem InsertLeave ausgeführt werden, wenn der FileType tex ist. Es scheint, dass dies funktionieren sollte (in einem .vimrc):Vim: Kombinieren autocmd?

autocmd FileType tex :autocmd InsertLeave :w 

Aber es tut es nicht. Die verschachtelte Option scheint auch nicht zu helfen, obwohl das Handbuch es anzeigt.

Es ist einfach eine logische OR zu tun:

autocmd BufEnter,BufLeave ... 

es darf nicht zu schwer sein, eine logische UND zu tun.

+0

Sie sollten die Lösung von ZyX als Antwort nehmen, da es das lokale Pufferproblem von Eevee löst. – Profpatsch

+0

Fertig, aber ich nehme dein Wort dafür. Ich erinnere mich an das lokale Pufferproblem, aber ich habe seit Jahren kein Latex mehr geschrieben und bin vor 2 Jahren zu Emacs gewechselt. –

Antwort

8

Ich habe eine Korrektur @Eevee Antwort: automatische Befehl Arbeit für einen Puffer nur zu machen, sollten Sie

augroup TexAutoWrite 
    autocmd FileType tex :autocmd! TexAutoWrite InsertLeave <buffer> :update 
augroup END 

finden Sie unter `: h autocmd-buflocal.

+0

Das ist brilliant. Jetzt kann ich Asciidoc-Dokumente beim Wechsel zu meinem Browser erneut rendern. – Profpatsch

+1

Autsch. Problem: Der zweite Autocommand summiert sich * jedes Mal * Sie wechseln zu einer tex-Datei. Nach kurzer Zeit beginnt vim nach dem Verlassen des Einfügemodus mehrfach hintereinander zu speichern. – Profpatsch

+1

@Profpatsch Korrigiert. – ZyX

4

InsertLeave benötigt noch einen Parameter.

Dies funktioniert für mich:

autocmd FileType tex :autocmd InsertLeave * :w 

Beachten Sie, dass dieses Verhalten wird bleiben, wenn Sie später eine nicht tex Datei in dem gleichen Puffer bearbeiten. Ich bin mir nicht sicher, ob es eine einfache Möglichkeit gibt, es zu entfernen, wenn Sie etwas bearbeiten aber eine bestimmte Art von Datei.

+0

In der Tat funktioniert wie ein Charme. –

+0

Der Doppelpunkt wird nicht wirklich benötigt. z.B. 'au FileType go au VimLeave * Rufsystem (" killall gocode ")' – Meow

4

Sie können die Musteroption des autocmnd verwenden.

autocmd InsertLeave *.tex w 
+0

Dies funktioniert nicht, wenn die Dateierweiterung nicht mit dem Dateityp übereinstimmt oder nicht existiert. Das passiert, wenn Sie Dinge wie Backup/Temp-Dateien vergleichen oder wenn der Speicherort der Datei ihren Typ bestimmt, z. Systemkonfigurationsdateien. – Walf