Команда автокоманди виконується, коли відбувається одна подія. Ви хочете, щоб команда виконувалася після того, як відбулася послідовність подій. Один із способів зробити це такий:
autocmd FileType c,cpp,python
\ autocmd BufWritePre <buffer> call StripTrailingWhiteSpaces()
<buffer>
Моделі призводять до того , автокомандами бути спрацьовувати , коли поточний буфер записуються. Побачити
:help autocmd-buflocal
Оновлення
Наведене вище рішення досить просте і має деякі недоліки, про які йшлося в коментарях. Ось більш повне рішення, яке вирішує деякі з цих недоліків. Він розміщує автокоманди у групі та видаляє автокоманду BufWritePre, якщо така існує, перед створенням нової. Він все ще створює одну автокоманду на буфер, але лише одну.
augroup TrailSpace
autocmd FileType c,cpp,python
\ autocmd! TrailSpace BufWritePost <buffer> call SkipTrailingWhiteSpaces()
augroup END
Іншим рішенням, подібним до відповіді, опублікованої lcd047, тепер видаленої, є визнання того, що коли відбувається подія FileType, встановлюється параметр "тип файлу". Тоді ви можете обумовити відповідь на подію BufWritePost на значення "тип файлу", як у наступному прикладі. Він має перевагу перед іншими рішеннями у створенні лише однієї автокоманди.
autocmd BufWritePre * if count(['c','cpp','python'],&filetype)
\ | call SkipTrailingWhiteSpaces()
\ | endif