Команда автокоманды выполняется, когда происходит одно событие. Вы хотите, чтобы команда была выполнена после того, как произошла последовательность событий. Один из способов сделать это так:
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 устанавливается опция 'filetype'. Затем вы можете обусловить ответ на событие BufWritePost значением 'filetype', как в следующем примере. Он имеет преимущество перед другими решениями в том, что создается только одна автокоманда.
autocmd BufWritePre * if count(['c','cpp','python'],&filetype)
\ | call SkipTrailingWhiteSpaces()
\ | endif