54 votes

Mettre en évidence les arguments dans le corps de la fonction dans vim

Un petit quelque chose qui pourrait être emprunté à partir de l'Ide. Donc, l'idée serait de mettre en évidence les arguments de la fonction (et peut-être l'étendue des noms de variables) à l'intérieur de la fonction des organes. C'est le comportement par défaut pour certains C:

plain vim highlighting

Eh bien, si je place le curseur à l'intérieur d' func je voudrais voir les arguments foo et bar en surbrillance pour suivre la logique de l'algorithme mieux. Notez que le même nom que la foo en func2 n'auraient pas de highlit. Cet hôtel de luxe peut être omis si...

func hilighted

En utilisant localement étendue variables, j'aimerais aussi avoir localement initialisé les variables highlit:

highlight <code>i</code> inside for

Enfin pour redemonstrate le luxe:

luxury again

Pas si trivial pour écrire ce. J'ai utilisé le C pour donner une idée générale. Vraiment je pouvais l'utiliser pour le Régime de/Clojure programmes mieux:

for clojure tooinside let construct

Cela devrait reconnaître let, loop, for, doseq fixations par exemple.

Mon vimscript-fu n'est pas forte; je pense que nous aurions besoin de

  • Parse (non-regexply?) les arguments de la définition de la fonction sous le curseur. Ce serait spécifique à une langue bien sûr. Ma priorité serait Clojure.
  • définir une syntaxe de la région pour couvrir la donnée de la fonction/champ d'application aux seules
  • donner la syntaxe requise correspond à

En fonction de ce qui pourrait être associé à une touche (si beaucoup de ressources) ou CursorMoved si pas si lent.

Ok, maintenant. Quelqu'un a écrit/trouvé quelque chose de ce genre? Faire le vimscript gourous ont une idée sur la façon de réellement commencer la rédaction d'un tel script?

Désolé légère offtopicness et la mauvaise mise en forme. N'hésitez pas à modifier/format. Ou voter pour fermer.

6voto

jimrandomh Points 503

C'est beaucoup plus difficile qu'il n'y paraît, et à la limite-impossible avec le vimscript API comme il est, parce que vous n'avez pas seulement besoin d'analyser le fichier; si vous voulez qu'elle fonctionne bien, vous devez analyser le fichier de manière incrémentielle. C'est pourquoi régulière des fichiers de syntaxe sont limitées à ce que vous pouvez faire avec regexes - lorsque vous changez de quelques caractères, vim peut comprendre ce qui a changé dans la syntaxe, sans avoir à refaire tout le dossier.

Le vim de la coloration syntaxique est limité à traiter avec les regexes, mais si vous êtes acharnement à faire cela, vous pouvez rouler votre propre parser en vimscript, et de générer un tampon de la syntaxe locale qui fait référence à des jetons dans le fichier par ligne et par colonne, à l'aide de l' \%l et \%atomes de c dans une regex. Cela devrait être ré-exécuté après chaque modification. Malheureusement il n'y a pas de autocmd pour "fichier", mais il est le CursorHold autocmd, qui s'exécute lorsque vous avez été inactif pendant une durée configurable.

1voto

gkaran89 Points 433

Une solution possible peut être trouvé ici. Pas la meilleure façon, car il met en évidence toutes les occurrences dans l'ensemble du fichier et vous devez donner la commande à chaque fois (probablement le deuxième peut être évité, ne connaissent pas le premier). Lui donner un look.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X