Como posso alterar o realce do nome da classe python?

7

Como posso definir uma sintaxe para destacar o nome da classe python MyClassno vim?

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

O Vim já destacou o nome da classe. No entanto, aparentemente o destaca com o nome da função da mesma maneira. Posso ter uma maneira melhor de destacar as duas categorias?

É o caminho certo syn match ...? No padrão syntax/python.vim, encontrei o seguinte:

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

Eu tentei, mas minha syndefinição deve estar errada, não funciona.

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

HI()é uma função autodefinida, usei-a para modificar com pythonStatementêxito.

De fato, não sei o que realmente faz. É apenas uma tentativa. Alguém poderia me dar algumas dicas? Obrigado!

Jimmy
fonte
11
Bem-vindo ao nosso site! O que você está tentando fazer exatamente? O Vim já deve destacar a classe (pelo menos no meu sistema). Caso contrário, talvez você deva tentar usar syntax onno seu vimrc. Se estiver realçado, mas você desejar alterar o realce, :h mysyntaxfile-addsaiba como substituir o arquivo de realce da sintaxe atual. De qualquer forma, você deve ser mais específico com o que você já tentou (qual comando, em qual arquivo, etc).
statox
Observe também que a wikia tem uma dica útil para mostrar o grupo de sintaxe usado sob o cursor.
statox
@statox Obrigado pelo seu comentário! O Vim realmente já destacou o nome da classe. No entanto, aparentemente destaca o nome da classe e o nome da função da mesma maneira. Eu poderia ter uma maneira melhor de distinguir o nome da classe e o nome da função? A propósito, modifiquei a pergunta para ser mais específica, obrigado!
Jimmy

Respostas:

2

No entanto, aparentemente o destaca com o nome da função da mesma maneira.

Com :echo synIDattr(synID(line('.'), col('.'), 1), 'name')podemos obter o nome do grupo de sintaxe, que é realmente pythonFunction.

Observando /usr/share/vim/vim80/syntax/python.vim, podemos ver que isso é destacado com:

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

Não há facilidade para destacar as aulas separadamente. Se você deseja adicionar isso, pode usar algo como:

" 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

Usei greengreen porque é isso que Ruby usa, mas fique à vontade para usar a cor que desejar. Você pode destacar a classpalavra - chave da maneira que desejar.

Para fazer isso carregar após o arquivo de sintaxe Python interno, adicione-o a ~/.vim/after/syntax/python.vim.

Veja também: Corrigindo o destaque de sintaxe “ausente” para python para um iniciador geral de destaque de sintaxe e mais alguns detalhes.

Martin Tournoij
fonte
Obrigado pela sua resposta! No entanto, tentei sua solução apenas para encontrar não apenas o nome da classe python destacado, mas algumas outras coisas foram alteradas simultaneamente, por exemplo, o X_trainin self.X_trainfoi destacado da mesma maneira, o que não é esperado. Seria possível alterar apenas o realce do nome da classe?
21716 Jimmy
@ Jimmy Oops, parece que eu não testei isso o suficiente. Obrigado por apontar isso. Acho que sei o que há de errado, mas não tenho tempo para atualizar minha resposta agora . Vou atualizá-lo mais tarde.
Martin Tournoij
@ Jimmy Resposta atualizada. O problema era que eu havia me esquecido de substituir o pythonAttributegrupo de sintaxe.
Martin Tournoij
Muito Obrigado! Funciona. Mas ainda existe um pequeno erro quando o arquivo python é aberto E28: No such highlight group name: pythonAttribute,. Você poderia testá-lo novamente?
Jimmy
@ Jimmy Eu não tenho esse erro. Também estou confuso, pois esse erro vem do highlightcomando e não do syntaxcomando. Tem certeza de que este código está dando esse erro? Ou é algum outro script?
Martin Tournoij 20/12/16