В моем случае у меня есть ряд синтаксических правил, определенных для того, чтобы такие вещи было легко обнаружить.
highlight ImproperSyntax ctermbg=red guibg=red
au BufWinEnter * syn match ImproperSyntax /\s\+$\| \+\ze\t/ "Spaces at the end of lines or BEFORE tabs
au Filetype cpp,c syn keyword ImproperSyntax dynamic_cast "disallowed keyword
au Filetype cpp,c syn match ImproperSyntax /[^\n]\%$/ display "Last line should be blank
au Filetype cpp,c syn match ImproperSyntax /\t/ display "No tabs!
au Filetype cpp,c syn match ImproperSyntax /,\S/ display "comma always has a space
au Filetype cpp,c syn match ImproperSyntax /\%80v.*$/ "Highlight any characters passed column 80
Дополнительный прием, который вы можете использовать, - это включить все это в функцию (или список)./ dictionary) и отображать их как ошибку либо в строке состояния (мои предпочтения), либо для пользователя как ошибку.
Что касается проверки в CVS ... Я не уверен насчет CVS, но SVNи hg (и, вероятно, большинство других систем контроля версий) может быть проинструктирован выполнить серию «ловушек перед фиксацией», прежде чем разрешить вам фиксацию.Один из них может быть легко запрограммирован на сканирование на то же поведение (возможно, с использованием некоторого символа переопределения).