Как изменить распознавание слов в заклинании vim?
Мне нравится, что vim 7.0 поддерживает проверку орфографии через: set spell, и мне нравится, что по умолчанию он проверяет только комментарии и текстовые строки в моем C-коде. Но я хотел найти способ изменить поведение, чтобы vim знал, что когда я пишу слова, содержащие подчеркивания, я не хочу, чтобы это слово проверялось по буквам.
Проблема в том, что я часто буду ссылаться на имена переменных или функций в своих комментариях, и поэтому прямо сейчас vim думает, что каждый фрагмент текста, который не является полным правильным словом, является орфографическая ошибка. Напр..
/* The variable proj_abc_ptr is used in function do_func_stuff' */
2 ответа:
Вам нужно будет переместить его в свою собственную группу. Что-то вроде этого:
hi link cCommentUnderscore cComment syn match cCommentUnderscore display '\k\+_\w\+' syn cluster cCommentGroup add=cCommentUnderscore
В некоторых маркерах вам может понадобиться
contains=@NoSpell
в конце строки соответствия, но в C по умолчанию используется@NoSpell
, поэтому это должно быть нормально.
Вот еще несколько общих правил проверки орфографии, которые нужно поместить в файлы
.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
переопределяет любые и все унаследованные группы, тем самым приказывая проверяющему орфографию пропустить соответствующий текст.