Ein Autocommand-Befehl wird ausgeführt, wenn ein Ereignis eintritt. Sie möchten, dass ein Befehl ausgeführt wird, nachdem eine Abfolge von Ereignissen aufgetreten ist. Ein Weg dies zu tun ist wie folgt:
autocmd FileType c,cpp,python
\ autocmd BufWritePre <buffer> call StripTrailingWhiteSpaces()
Das <buffer>
Muster bewirkt, dass der automatische Befehl ausgelöst wird, wenn der aktuelle Puffer geschrieben wird. Sehen
:help autocmd-buflocal
Aktualisieren
Die obige Lösung ist ziemlich einfach und weist einige Fehler auf, die in den Kommentaren besprochen wurden. Hier finden Sie eine umfassendere Lösung, die einige dieser Mängel behebt. Es ordnet die Autobefehle einer Gruppe zu und löscht den BufWritePre-Autobefehl, falls vorhanden, bevor ein neuer erstellt wird. Es wird immer noch ein Autobefehl pro Puffer erstellt, aber nur einer.
augroup TrailSpace
autocmd FileType c,cpp,python
\ autocmd! TrailSpace BufWritePost <buffer> call SkipTrailingWhiteSpaces()
augroup END
Eine andere Lösung, ähnlich der Antwort von lcd047, die jetzt gelöscht wurde, besteht darin, zu erkennen, dass beim Auftreten des FileType-Ereignisses die Option 'filetype' gesetzt ist. Anschließend können Sie die Antwort auf das BufWritePost-Ereignis wie im folgenden Beispiel auf den Wert 'filetype' festlegen. Es hat gegenüber den anderen Lösungen den Vorteil, dass nur ein Autobefehl erstellt wird.
autocmd BufWritePre * if count(['c','cpp','python'],&filetype)
\ | call SkipTrailingWhiteSpaces()
\ | endif