「self」などのPythonキーワードの「欠落」構文強調表示を修正するにはどうすればよいですか?


12

Pythonの構文強調表示を修正しようとしています。私の色は、さまざまなvimの配色で「あるはず」に見えるスクリーンショットの色とは異なります。.rb(正しく表示されます)と.pyを比較すると違いがわかります。

ここに画像の説明を入力してください

たとえば、selfが強調表示されていないことに注意してください。(これはbase16にありますが、比較は他の配色でも同様です)。一般に、オブジェクト構文の強調表示が間違っているようです。

私が試したいくつかのこと:

  1. vimがロードする構文スクリプトを見る。下の例の.pyと.rbの唯一の違いは、もちろん、rubyはindent / ruby​​.vimとsyntax / ruby​​.vimを取得するのに対し、pythonはindent / python.vimとsyntax / python.vimを取得することです。これらは、homebrew vimに付属するファイルです。
  2. 同じファイルをターミナル(iterm2)vimではなくmacvimにロードします。同じ問題、ファイルは図とまったく同じに見えます。
  3. 新しいpython.vimファイルを追加します。.vim/afterスクリプトとして使用しても問題は解決しません。

どんな提案も大歓迎です。私は何時間もこれに頭を悩ませており、ハイライトが期待どおりに機能しない理由を理解できません。


Pythonにはシンボルがないことに注意してください。新しいコードにはPython 3構文を使用することを強くお勧めします。
Martin Tournoij 2016

回答:


12

構文強調表示の概要は次のとおりです。

  • syntax/<filetype>.vim構文規則を使用して定義されている:syntaxコマンド。このコマンドは構文を定義します。「テキストがこの正規表現に一致する場合、文字列です」などと表示されます。これを行うには、ハイライトグループを割り当てます。色そのものについては何も述べていませ

  • :highlight「これらの色でこのグループを強調表示します」と言います。これは、構文ファイルではなく配色で行われます。デフォルトのハイライトグループの束があります(StringFunctionSpecial、など)すべてのカラースキームを定義するべきです。

    ただし、これらのデフォルトグループに限定されるわけではなく、必要な数のグループを作成できます(ただし、デフォルトの構文ファイルは通常は作成しません)。

  • 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つの方法で実行できます。

  1. FileTypeautocmdを使用します。

    augroup python
        autocmd!
        autocmd FileType python
                    \   syn keyword pythonSelf self
                    \ | highlight def link pythonSelf Special
    augroup end
    
  2. 使用しafter-directory~/.vim/after/syntax/python.vim

    syn keyword pythonSelf self
    highlight def link pythonSelf Special
    

どちらの方法も実質的に同じです。どちらでもお使いください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.