回答:
カスタム構文規則を追加して@nospell
キーワードを与えることができます。これにより、
Vimはこの構文の一致にスペルチェックを適用しなくなります。例えば:
:syn match UrlNoSpell "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell
上記はテキストファイルと一部のファイルタイプ(markdownなど)で機能しますが、すべてのファイルタイプで機能するわけではありません。
ここではかなり単純な正規表現を使用していることに注意してください。テキストからURLを解析する方法を参照してください。
他のファイルタイプについては、もう少し作業を行う必要があります。たとえば、python
ファイルの場合、コメントは次のpythonComment
グループに含まれます/usr/share/vim/vim74/syntax/python.vim
。
syn match pythonComment "#.*$" contains=pythonTodo,@Spell
これをオーバーライドするには、次のことを行う必要があります。
:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment
トリックは、以前に一致した構文一致のリストを追加することです。これには、カスタム構文一致を含めることができます。containedin=
これにより、一致内でUrlNoSpell
正規表現を検索するようにVimに指示します
。pythonComment
またhighlight
、これらは継承されないため、を使用して正しい色を設定する必要があります。
これは、Pythonストリングなど、いくつかの場所で行う必要があります。
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
正しい構文強調表示を適用できるように、2つの異なる構文一致グループが必要です。
もちろん、他のファイルタイプについてcontainedin=
は、他の構文一致を使用する必要があります... AFAIKには「ユニバーサル」な解決策は/usr/share/vim/vim74/syntax/*.vim
ありませんが、正しいファイルを探すのはそれほど難しくありません。
上記のコマンドはすべて、構文ファイルの後に実行する必要があることに注意してください。これを行うには2つの方法があります。
コマンドまたはキーマッピングから、毎回手動で呼び出す必要があります。例えば
fun! NoUrlSpell()
if &filetype == 'python'
:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
elseif &filetype == 'ruby'
" ...
else
syn match pythonComment "#.*$" contains=pythonTodo,@Spell
endif
endfun
command NoUrlSpell :call NoUrlSpell()
コマンドをに入れます~/.vim/after/syntax/[filetype].vim
。Vimはこれらのファイルを取得し、デフォルトの構文ファイルの後に実行します(参照:)
:help after-directory
。