Antworten:
Sie können benutzerdefinierte Syntaxregeln hinzufügen und ihnen das @nospell
Schlüsselwort geben.
Dadurch wird Vim angewiesen, die Rechtschreibprüfung nicht auf diese Syntaxübereinstimmung anzuwenden. Zum Beispiel:
:syn match UrlNoSpell "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell
Das Obige funktioniert für Textdateien und einige Dateitypen (z. B. Markdown), jedoch nicht für alle Dateitypen.
Beachten Sie, dass ich hier einen ziemlich einfachen regulären Ausdruck verwendet habe. Einige Alternativen finden Sie unter Wie analysiere ich URLs aus dem Text?
Für andere Dateitypen müssen Sie etwas mehr arbeiten. Beispielsweise sind für python
Dateien Kommentare in einer pythonComment
Gruppe enthalten, von /usr/share/vim/vim74/syntax/python.vim
:
syn match pythonComment "#.*$" contains=pythonTodo,@Spell
Um dies zu überschreiben, müssen wir Folgendes tun:
:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment
Der Trick besteht darin, eine Liste zuvor übereinstimmender Syntaxübereinstimmungen hinzuzufügen, in denen unsere benutzerdefinierte Syntaxübereinstimmung enthalten sein kann. containedin=
Dies weist Vim an, nach dem UrlNoSpell
regulären Ausdruck in den pythonComment
Übereinstimmungen zu suchen
.
Wir müssen auch verwenden highlight
, um die richtigen Farben festzulegen, da diese nicht vererbt werden.
Sie müssen dies an mehreren Stellen tun, beispielsweise für Python-Zeichenfolgen:
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
Wir benötigen 2 verschiedene Syntax-Übereinstimmungsgruppen, damit wir die richtige Syntaxhervorhebung anwenden können.
Natürlich müssen Sie für andere Dateitypen andere containedin=
Syntaxübereinstimmungen verwenden ... Es gibt, AFAIK, keine "universelle" Lösung, aber das Nachschlagen der richtigen /usr/share/vim/vim74/syntax/*.vim
sollte nicht allzu schwierig sein.
Beachten Sie, dass alle oben genannten Befehle nach den Syntaxdateien ausgeführt werden müssen . Es gibt zwei Möglichkeiten, dies zu tun:
Bei einer Befehls- oder Schlüsselzuordnung muss dies jedes Mal manuell aufgerufen werden. z.B
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()
Geben Sie die Befehle in das Feld ein ~/.vim/after/syntax/[filetype].vim
. Vim nimmt diese Dateien auf und führt sie nach den Standard-Syntaxdateien aus (siehe :)
:help after-directory
.