Un comando de autocomando se ejecuta cuando ocurre un evento. Desea que se ejecute un comando después de que se haya producido una secuencia de eventos. Una forma de hacerlo es así:
autocmd FileType c,cpp,python
\ autocmd BufWritePre <buffer> call StripTrailingWhiteSpaces()
El <buffer>
patrón hace que el autocomando se active cuando se escribe el búfer actual. Ver
:help autocmd-buflocal
Actualizar
La solución anterior es bastante simple y tiene algunos defectos que se discutieron en los Comentarios. Aquí hay una solución más completa que aborda algunos de esos defectos. Pone los comandos automáticos en un grupo y elimina el comando automático BufWritePre, si existe, antes de crear uno nuevo. Todavía crea un autocomando por búfer, pero solo uno.
augroup TrailSpace
autocmd FileType c,cpp,python
\ autocmd! TrailSpace BufWritePost <buffer> call SkipTrailingWhiteSpaces()
augroup END
Otra solución, similar a la respuesta publicada por lcd047, ahora eliminada, es reconocer que cuando ocurre el evento FileType, se establece la opción 'tipo de archivo'. Luego puede condicionar la respuesta al evento BufWritePost en el valor de 'tipo de archivo', como en el siguiente ejemplo. Tiene la ventaja sobre las otras soluciones de que solo se crea un autocomando.
autocmd BufWritePre * if count(['c','cpp','python'],&filetype)
\ | call SkipTrailingWhiteSpaces()
\ | endif