Как изменить распознавание слов в заклинании vim?

Мне нравится, что vim 7.0 поддерживает проверку орфографии с помощью :setspell, и мне нравится, что по умолчанию он проверяет только комментарии и текстовые строки в моем коде C. Но я хотел найти способ изменить поведение, чтобы vim знал, что когда я пишу слова, содержащие символы подчеркивания, я не хочу проверять правописание этого слова.

Проблема в том, что я часто буду ссылаться на имена переменных или функций в своих комментариях, поэтому прямо сейчас vim считает, что каждый фрагмент текста, который не является полностью правильным словом, является орфографической ошибкой. Например.

/* The variable proj_abc_ptr is used in function do_func_stuff' */

В большинстве случаев фрагменты, разделенные символом подчеркивания, представляют собой полные слова, но в других случаях это сокращения, которые я бы предпочел не добавлять в список слов. Есть ли какой-либо глобальный способ указать vim включать _ как часть слова при проверке орфографии?


person Community    schedule 14.08.2009    source источник


Ответы (2)


Вам нужно переместить его в отдельную группу. Что-то вроде этого:

hi link cCommentUnderscore cComment
syn match cCommentUnderscore display '\k\+_\w\+'
syn cluster cCommentGroup add=cCommentUnderscore

В некоторых маркерах вам может понадобиться contains=@NoSpell в конце строки совпадения, но в C по умолчанию используется @NoSpell, так что все должно быть в порядке.

person DrAl    schedule 14.08.2009
comment
Это прекрасно работает! Большое спасибо. Один комментарий, который я добавлю: изначально я пытался поместить это в свой .vimrc, но он там ничего не делает. Изучив справку :syn, я понял, что для того, чтобы это изменение подсветки синтаксиса использовалось каждый раз при загрузке синтаксиса C, мне нужно было поместить эти строки в файл ~/.vim/after/syntax/c.vim. . После того, как я это сделал, все работало хорошо. - person ; 17.08.2009
comment
После использования этого изменения в течение короткого времени я сделал два уточнения. Во-первых, чтобы не проверять орфографию слов с _ в начале или конце слова. Во-вторых, чтобы каждое слово со знаком _ не окрашивалось в соответствии с комментариями. Новая строка: syn match cCommentUnderscore display '_\k\+\|\k\+_\w*' содержит - person ; 21.08.2009

Вот еще несколько общих правил исключения проверки орфографии для добавления в .vim/after/syntax/{LANG}.vim файлы:

" Disable spell-checking of bizarre words:
"  - Mixed alpha / numeric
"  - Mixed case (starting upper) / All upper
"  - Mixed case (starting lower)
"  - Contains strange character
syn match spellingException "\<\w*\d[\d\w]*\>"      transparent contained containedin=pythonComment,python.*String contains=@NoSpell
syn match spellingException "\<\(\u\l*\)\{2,}\>"    transparent contained containedin=pythonComment,python.*String contains=@NoSpell
syn match spellingException "\<\(\l\+\u\+\)\+\l*\>" transparent contained containedin=pythonComment,python.*String contains=@NoSpell
syn match spellingException "\S*[/\\_`]\S*"         transparent contained containedin=pythonComment,python.*String contains=@NoSpell

Измените pythonComment,python.*String на свой язык.

  • transparent означает, что совпадение наследует свои свойства выделения от содержащего его блока (т. е. эти правила не меняют способ отображения текста).
  • contained предотвращает распространение этих совпадений за пределы содержащего блока (последнее правило заканчивается на \S*, что, вероятно, соответствует концу блока)
  • containedin содержит список существующих синтаксических групп, в которые можно добавить эти новые правила.
  • contains=@NoSpell переопределяет любые и все унаследованные группы, тем самым указывая программе проверки орфографии пропустить совпадающий текст.
person RobM    schedule 01.06.2010