Удалить @Spell из синтаксического кластера - PullRequest
1 голос
/ 09 марта 2020

Я использую плагин vim-polyglot . В файле плагина JavaScript filetype он настраивает Vim для запуска проверки орфографии на строках. После просмотра реализации плагина я вижу, что это происходит для следующих синтаксических кластеров:

  • jsString
  • jsTemplateString
  • jsObjectKeyString
  • jsObjectStringKey

Вот пример того, как определяется кластер:

syntax region  jsString           start=+\z(["']\)+  skip=+\\\%(\z1\|$\)+  end=+\z1+ end=+$+  contains=jsSpecial,@Spell extend

Я попытался добавить строки ниже до ~/.config/nvim/init.vim, а также ~/.config.nvim/ftplugins/javascript.vim, но ни один из них не удаляет орфографию:

syntax cluster jsString remove=@Spell
syntax cluster jsTemplateString remove=@Spell
syntax cluster jsObjectKeyString remove=@Spell
syntax cluster jsObjectStringKey remove=@Spell

Как удалить орфографию из выбранных групп подсветки синтаксиса, предоставляемых vim-polyglot?

1 Ответ

1 голос
/ 09 марта 2020

На самом деле это не синтаксис кластеров , а просто синтаксис items .

В то время как @Spell и @NoSpell являются синтаксическими кластерами с ними важно то, где они содержатся, а не элементы, которые в них содержатся, поэтому мы не можем использовать syntax cluster для их изменения и включения или написания для существующих элементов синтаксиса ...

Так что лучше всего поспорим, что здесь действительно нужно переопределить элементы синтаксиса, удалив часть @Spell.

Вы можете переопределить только эти 4 элемента, но на самом деле не существует хороших способов просто изменить часть команды (просто удаляя часть @Spell), вам в конечном итоге придется снова устанавливать их с нуля, что означает, что вы должны скопировать их определение из исходного файла, а затем внести изменения.

Чтобы добавить в существующий файл синтаксиса см. :help mysyntaxfile-add.

Вкратце, вы должны создать ~/.vim/after/syntax/javascript.vim с содержанием:

syntax clear jsString
syntax clear jsTemplateString
syntax clear jsObjectKeyString
syntax clear jsObjectStringKey
syntax region  jsString           start=+\z(["']\)+  skip=+\\\%(\z1\|$\)+  end=+\z1+ end=+$+  contains=jsSpecial extend
syntax region  jsTemplateString   start=+`+  skip=+\\`+  end=+`+     contains=jsTemplateExpression,jsSpecial extend
syntax region  jsObjectKeyString   contained start=+\z(["']\)+  skip=+\\\%(\z1\|$\)+  end=+\z1\|$+  contains=jsSpecial skipwhite skipempty nextgroup=jsObjectValue
syntax region  jsObjectStringKey   contained start=+\z(["']\)+  skip=+\\\%(\z1\|$\)+  end=+\z1\|$+  contains=jsSpecial extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue

Эти команды сначала очистят элементы синтаксиса, а затем определить их снова, но это время без включения части contains=@Spell, поэтому они не включат проверку орфографии для этих правил.

...