構文強調表示の概要は次のとおりです。
でsyntax/<filetype>.vim
構文規則を使用して定義されている:syntax
コマンド。このコマンドは構文を定義します。「テキストがこの正規表現に一致する場合、文字列です」などと表示されます。これを行うには、ハイライトグループを割り当てます。色そのものについては何も述べていません。
:highlight
「これらの色でこのグループを強調表示します」と言います。これは、構文ファイルではなく配色で行われます。デフォルトのハイライトグループの束があります(String
、Function
、Special
、など)すべてのカラースキームを定義するべきです。
ただし、これらのデフォルトグループに限定されるわけではなく、必要な数のグループを作成できます(ただし、デフォルトの構文ファイルは通常は作成しません)。
indent/<filetype>.vim
ファイルは自動インデントを制御します。たとえば、Rubyの場合、「後の行でdef
インデントレベルを上げる」と「後の行でend
インデントを1レベル下げる」と表示されます。色や構文の強調表示では何もしません。
異なるプログラミング言語が異なるように強調表示されるのはなぜですか?個人的な美学とそれを書いた人の意見のせいもあります。たとえば、Rubyでは、Type
ハイライトグループがクラス名に使用されます。しかし、それはまたFunction
別の何かだったかもしれません。なんでType
?おそらく、作者が自分の配色の方がよく見えると思ったからでしょう。
しかし、より重要なのは、言語のセマンティクスと感性が異なることです。Rubyではself
、特別なキーワードです。あなたは行うことはできませんself = "foo"
かdef self()
。これらはエラーです。しかし、これはPythonには当てはまりません。これは、特別なプロパティを持たない別の変数です。実行:
x = Object()
x.foo()
Pythonによって実際に「翻訳」されます。
Object.foo(x)
名前self
は慣例にすぎませんが(ほとんど一般的に採用されています)、好きな名前を付けることができます。def x(this):
またはdef x(xxx):
同等に有効です。名前はself
どこでも使用できます。self = 'foo'
そしてdef self():
完全に罰金です。
それはself
特別なキーワードでも、事前定義された変数(などstr
)でもないので、強調表示しないでください。self
構文ファイルには単語の痕跡がないため、作成者も同じように推論したようです:-)
self
強調表示したい場合は、構文規則を作成する必要があります。
:syn keyword pythonBuiltin self
pythonBuiltin
グループ名はすでにデフォルトの構文ファイルに定義されているとにリンクされているFunction
ハイライトグループ。新しいハイライトグループを使用するには、次のようにします。
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
これらの変更を行うには、vimrcファイルにそのまま追加することはできません。構文ファイルはそれを上書きします。代わりに、構文ファイルのロード後に実行する必要があります。これは、次の2つの方法で実行できます。
FileType
autocmdを使用します。
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
使用しafter-directory
、~/.vim/after/syntax/python.vim
:
syn keyword pythonSelf self
highlight def link pythonSelf Special
どちらの方法も実質的に同じです。どちらでもお使いください。