Pythonクラス名の強調表示を変更するにはどうすればよいですか?


7

MyClassvimでPythonクラス名を強調表示する構文を定義するにはどうすればよいですか?

class MyClass(object):
    ......

Vimはすでにクラス名を強調表示しています。ただし、関数名で同じように強調表示されているようです。2つのカテゴリを強調するより良い方法がありますか?

それは正しい方法syn match ...ですか?デフォルトでsyntax/python.vim、私はこれを見つけました:

syn match   pythonFunction  "\h\w*" display contained

私は試しましたが、私のsyn定義は間違っているはずです、それは機能しません。

syn match pythonClassName "^class \(*\):" display contained
call HI('pythonClassName',         124, '', 'bold', 'bold')

HI()は自己定義関数であり、pythonStatement正常に変更するために使用しました。

実際のところ、それが本当に何をしているのかはわかりません。それはただの試みです。誰かが私にいくつかのヒントをくれますか?ありがとう!


1
当サイトへようこそ!正確に何をしようとしていますか?Vimはすでにクラスを強調表示しているはずです(少なくとも私のシステムではそうです)。そうでない場合syntax onは、vimrcで使用してみてください。強調表示されているが強調表示を変更したい場合は:h mysyntaxfile-add、現在の構文強調表示ファイルを上書きする方法を参照してください。いずれにせよ、あなたはあなたがすでに試みたもの(どのコマンド、どのファイルなど)により具体的であるべきです。
statox

また、wikiaには、カーソルの下で使用されている構文グループを表示するのに役立つヒントがあります。
statox

@statoxコメントありがとうございます!Vimはすでにクラス名を強調しています。ただし、クラス名と関数名は同じように強調表示されています。クラス名と関数名を区別するより良い方法がありますか?ちなみに、私は質問をより具体的になるように変更しました、ありがとう!
ジミー

回答:


2

ただし、関数名で同じように強調表示されているようです。

これ:echo synIDattr(synID(line('.'), col('.'), 1), 'name')で、構文グループの名前を取得できますpythonFunction

これを見ると、次のよう/usr/share/vim/vim80/syntax/python.vimに強調表示されています。

syn keyword pythonStatement     class def nextgroup=pythonFunction skipwhite
syn match   pythonFunction  "\h\w*" display contained
hi def link pythonFunction      Function

クラスを個別に強調表示する機能はありません。これを追加したい場合は、次のようなものを使用できます。

" Clear default
syn clear pythonStatement

" Set it to what's in the Python file, minus the class.
syn keyword pythonStatement    False None True
syn keyword pythonStatement    as assert break continue del exec global
syn keyword pythonStatement    lambda nonlocal pass print return with yield
syn keyword pythonStatement    def nextgroup=pythonFunction skipwhite

" Now make seperate syntax groups for the class.
syn keyword pythonClassStmt class nextgroup=pythonClass skipwhite
syn match   pythonClass "\h\w*" display contained

" Avoid highlighting attributes as builtins – just added "pythonClass" here.
syn clear pythonAttribute
syn match   pythonAttribute /\.\h\w*/hs=s+1
    \ contains=ALLBUT,pythonBuiltin,pythonFunction,pythonClass,pythonAsync
    \ transparent

" Highlight the class statement and the class name.
hi def link pythonClassStmt Statement
hi pythonClass ctermfg=darkgreen guifg=darkgreen

Rubyが使用するのでダークグリーンを使用しましたが、好きな色を自由に使用してください。classキーワードは好きなように強調できます。

組み込みのPython構文ファイルの後にこれをロードするは、これをに追加し ~/.vim/after/syntax/python.vimます。

構文の強調表示に関する 一般的な入門書およびその他の詳細については、Pythonの「欠落している」構文の強調表示の修正も参照してください。


回答ありがとうございます!しかし、私だけではないだけでPythonのクラス名が強調されたが、いくつかの他のものは、例えば、同時に変更された見つけるためにあなたのソリューションを試したX_train中がself.X_train期待されていないのと同じ方法で強調されました。クラス名の強調表示のみを変更することは可能ですか?
ジミー

@ジミーおっと、私はこれを十分にテストしていないようです。ご指摘いただきありがとうございます。何が問題なのかはわかっていますが、今すぐ回答を更新する時間がありません。後で更新します。
Martin Tournoij、2016

@Jimmy Answerを更新しました。問題は、pythonAttribute構文グループを上書きするのを忘れていたことでした。
Martin Tournoij、16

どうもありがとう!できます。しかし、Pythonファイルを開いたときに、まだ小さなエラーが発生しますE28: No such highlight group name: pythonAttribute。もう一度テストしていただけますか?
ジミー

@ジミー私はそのエラーはありません。そのエラーはhighlightコマンドではなくコマンドに起因するため、私も混乱していますsyntax。このコードがそのエラーを引き起こしていると確信していますか?それとも他のスクリプトですか?
Martin Tournoij、2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.