J'ai du mal à apprendre les expressions rationnelles de vim (je ne connais pas très bien d'autre expression régulière), donc le problème principal est de définir une expression rationnelle qui correspondrait
some_function_call(simple_value, keyword=value)
dans cet exemple.
Il doit donc correspondre à un mot s'il se trouve à l'intérieur de parens et avoir un signe égal après.
Le problème suivant est de savoir comment définir des fichiers de syntaxe dans vim. J'apprécierais de l'aide pour cela, mais cela ne devrait pas être si difficile à apprendre, donc je peux probablement le faire moi-même.
EDIT basé sur la réponse que j'ai fournie mon propre script de syntaxe pour python. N'hésitez pas à l'essayer. entrez la description du lien ici
Réponses:
Avec ces paramètres:
Je reçois:
Ici:
contains
option me permet d'imbriquer les appels de fonction.\i*
) suivis=
, mais pas==
, de sorte que les tests d'égalité ne correspondent pas.En utilisant des régions, j'arrive à imbriquer les correspondances autant que je le souhaite, ce qui aurait été très compliqué (impossible?) Si j'avais opté pour une
match
expression régulière.Je crois que les expressions régulières utilisées pour faire correspondre l'appel de fonction et le mot-clé peuvent être affinées, mais compte tenu de ce qui est valide dans Python 3 , ce n'est pas une tâche que je suis prêt à assumer.
En option, je pense que vous pouvez l'utiliser pour mettre en évidence les appels de fonction, en utilisant
matchgroup
:la source
pythonBuiltin
groupe de syntaxe par défautsyntax/python.vim
. Cependant, il ne fait pas de distinction entre les fonctions et les variables intégrées (True
,False
et seNone
trouvent également danspythonBuiltin
). Vous pourriez probablement copier les définitions pour votre usage.query(...).***filter***()
filtre est mis en évidence alors qu'il n'a rien à voir avec les fonctions de filtre intégrées.syntax.vim
fait des mots clés. Voir github.com/vim/vim/blob/master/runtime/syntax/python.vim#L184syntax/python.vim
fichiers supplémentaires (seulement la valeur par défaut, et je ne vois pas le comportement que vous faites: i.stack.imgur.com/LgF6F.png , et je suis d'accord avec la définition du mot clé - c'est la forme la plus proche, et je ne pensez pas que les mots-clés sont mis en correspondance dans des cas commenonkeyword.keyword
. En ce qui concerne les variables, notez que ces prédéfinis sont des variables, ce sont des variables contenant des objets fonction, et peuvent être assignées à tout comme les autres variables. Rien ne vous empêche de fairesorted = filter
et d'utiliser ensuitesorted
commefilter
.Voici où vous pouvez commencer:
Décomposition:
Cela nécessite des améliorations mais vous donne un aperçu de la façon dont vous pouvez le faire.
la source
En plus de la réponse @ Nobe4, vous pouvez effectuer les opérations suivantes:
~/.vim/after/syntax/python.vim
Mettez cette ligne dans le fichier:
Cela créera un fichier de syntaxe qui ajoutera une correspondance de syntaxe pour vos arguments suivi d'un
=
et définira le style à utiliser. Ce sujet:h mysyntaxfile-add
devrait être intéressant pour vous.J'ai également utilisé un regex différent de l'autre réponse, voici le détail (je ne sais pas lequel fonctionne mieux, vous devrez probablement essayer):
la source
J'ai trouvé que la réponse de @ Wolfie capture le déballage d'un tuple en tant que mot clé et qu'il a également eu du mal à capturer les arguments de mots clés interrompus.
Inspiré par son expression régulière, j'ai trouvé ce qui suit pour mettre dans mon
python.vim
fichier de syntaxe. (Gardez à l'esprit que j'utilise à l'origine lepython.vim
fichier de syntaxe de sheerun / vim-polyglot )Et la ventilation des regex est très similaire à la réponse de @ Wolfie :
Notez que ce ne sera pas la couleur d' un mot - clef argument écrit:
key = value
. Ce que je considère comme une bonne chose, car cela va à l'encontre de la recommandation officielle des espaces blancs PEP-8 pour les arguments de mots clés .la source
La réponse acceptée au moment de l' écriture a cassé la mise en évidence des chaînes dans les listes d'arguments de fonction pour moi (par quelle alchimie je ne sais pas), alors voici une version, je l'espère, plus sûre, basée sur celle de Statox .
ctermfg
est pour le terminal de console,guifg
est pour gui. Bien sûr, vous êtes libre de changer les couleurs selon vos envies. Voici une liste pratique .Comme toujours, tu ferais mieux de mettre ça à l'intérieur
~/.vim/after/syntax/python.vim
Pour une ventilation regex, vous allez ici:
La vérification finale arrête la mise en évidence des couleurs conditionnelles. Vous pouvez le supprimer si vous le souhaitez.
la source