Estou tendo dificuldades para aprender regexps do vim (também não conheço nenhum outro regexp muito bem), então o principal problema é definir o regexp que corresponda
some_function_call(simple_value, keyword=value)
palavra-chave neste exemplo.
Por isso, deve corresponder a uma palavra se estiver dentro de parênteses e tiver um sinal de igual após ela.
O próximo problema é como definir arquivos de sintaxe no vim. Eu apreciaria a ajuda com isso, mas não deve ser tão difícil de aprender, para que eu possa fazer isso sozinho provavelmente.
EDIT com base na resposta que eu criei meu próprio script de sintaxe para python. Sinta-se livre para experimentar. insira a descrição do link aqui
syntax-highlighting
regular-expression
filetype-python
user1685095
fonte
fonte
Respostas:
Com estas configurações:
Eu recebo:
Aqui:
contains
opção permite aninhar chamadas de função.\i*
) seguidos por=
, mas não==
, para que os testes de igualdade não sejam correspondidos.Usando regiões, consigo aninhar as correspondências quantas vezes eu precisar, o que seria muito complicado (impossível?) Se eu tivesse usado apenas
match
expressões regulares.Acredito que as expressões regulares usadas para combinar a chamada de função e a palavra-chave possam ser refinadas, mas considerando o que é válido no Python 3 , essa não é uma tarefa que estou disposto a assumir.
Opcionalmente, acho que você pode usar isso para destacar chamadas de função, usando um
matchgroup
:fonte
pythonBuiltin
grupo de sintaxe no padrãosyntax/python.vim
. No entanto, ele não distingue entre funções e variáveis internas (True
,False
eNone
também estão dentropythonBuiltin
). Você provavelmente pode copiar as definições para seu uso.query(...).***filter***()
filtro Like é destacado enquanto não tem nada a ver com as funções de filtro embutidas.syntax.vim
torna palavras-chave. Veja github.com/vim/vim/blob/master/runtime/syntax/python.vim#L184syntax/python.vim
arquivos adicionais (apenas o padrão e não vejo o comportamento que você faz: i.stack.imgur.com/LgF6F.png , e concordo com a definição de palavra-chave - esse é o ajuste mais próximo e eu não pense que as palavras-chave são correspondidas em casos como ononkeyword.keyword
. Quanto às variáveis, observe que esses componentes internos são variáveis, são variáveis que contêm objetos de função e podem ser atribuídos a qualquer outra variável. Nada impede que você façasorted = filter
e usesorted
comofilter
.Aqui é onde você pode começar:
Decomposição:
Isso precisa de melhorias, mas fornece uma visão geral de como você pode fazer isso.
fonte
Além da resposta no @ Nobe4, você pode fazer o seguinte:
~/.vim/after/syntax/python.vim
Coloque estas linhas no arquivo:
Isso criará um arquivo de sintaxe que adicionará uma correspondência de sintaxe aos seus argumentos, seguida por a
=
e definirá o estilo a ser usado. Este tópico:h mysyntaxfile-add
deve ser interessante para você.Também usei um regex diferente do que a outra resposta, aqui está o detalhe (não sei qual funciona melhor, então você provavelmente terá que tentar):
fonte
Descobri que a resposta de @ Wolfie captura o desempacotamento de uma tupla como uma palavra-chave e também teve problemas para capturar argumentos de palavras-chave com quebra de linha.
Inspirado pelo regex dele, criei o seguinte para colocar no meu
python.vim
arquivo de sintaxe. (Lembre-se de que estou usando opython.vim
arquivo de sintaxe originalmente de sheerun / vim-polyglot )E a divisão do regex é muito semelhante à resposta de @ Wolfie :
Note que isso não irá colorir um argumento palavra-chave escrita como:
key = value
. O que considero uma coisa boa, pois isso vai contra a recomendação oficial de espaço em branco do PEP-8 para argumentos de palavras-chave .fonte
A resposta aceita no momento da redação quebrou o destaque para seqüências de caracteres dentro de listas de argumentos de funções para mim (pelo que a alquimia eu não sei), então aqui está uma versão esperançosamente mais segura, baseada na Statox ' .
ctermfg
é para terminal de console,guifg
é para GUI. É claro que você pode mudar as cores para o que achar melhor. Aqui está uma lista útil .Como sempre, é melhor colocar isso dentro
~/.vim/after/syntax/python.vim
Para uma divisão de regex, aqui está:
A verificação final interrompe o realce das condicionais de coloração. Você pode remover se quiser.
fonte