Komenda autocommand jest wykonywana, gdy wystąpi jedno zdarzenie. Chcesz, aby polecenie zostało wykonane po wystąpieniu sekwencji zdarzeń. Można to zrobić w następujący sposób:
autocmd FileType c,cpp,python
\ autocmd BufWritePre <buffer> call StripTrailingWhiteSpaces()
<buffer>
Wzór powoduje autocommand się być wyzwalane, gdy bieżący bufor jest napisane. Widzieć
:help autocmd-buflocal
Aktualizacja
Powyższe rozwiązanie jest dość proste i ma pewne wady, które zostały omówione w komentarzach. Oto bardziej kompletne rozwiązanie, które usuwa niektóre z tych wad. Umieszcza automatyczne polecenia w grupie i usuwa automatyczne polecenie BufWritePre, jeśli istnieje, przed utworzeniem nowego. Nadal tworzy jedną komendę automatyczną na bufor, ale tylko jedną.
augroup TrailSpace
autocmd FileType c,cpp,python
\ autocmd! TrailSpace BufWritePost <buffer> call SkipTrailingWhiteSpaces()
augroup END
Innym rozwiązaniem, podobnym do odpowiedzi wysłanej przez lcd047, teraz usuniętą, jest rozpoznanie, że gdy wystąpi zdarzenie FileType, ustawiana jest opcja „filetype”. Następnie możesz uzależnić odpowiedź na zdarzenie BufWritePost od wartości „filetype”, jak w poniższym przykładzie. Ma tę przewagę nad innymi rozwiązaniami, że tworzona jest tylko jedna komenda automatyczna.
autocmd BufWritePre * if count(['c','cpp','python'],&filetype)
\ | call SkipTrailingWhiteSpaces()
\ | endif