Comment pré-traiter les arguments de ligne de commande fournis à vim?
Je veux ajouter la prise en charge de divers formats de nom de fichier avec numéro de lin pour que vim comprenne. Par exemple, je reçois une sortie git grep <keyword>comme ceci:
first/foo.py:123:
first/bar.py:333:
second/foo.py:777:
Pour ouvrir ces fichiers et passer à une ligne spécifique, je dois changer le format par exemple:
first/foo.py +123
first/bar.py +333
second/foo.py +777
Je me demande s'il existe un moyen de faire automatiquement cette conversion afin qu'en ligne de commande cette instruction:
vim first/foo.py:123:
aurait le même résultat que cette commande:
vim first/foo.py +123
Ce serait également formidable si vim pouvait comprendre le format de ligne de trace Python, par exemple:
File "/third/foo.py", line 55,
Réponses
Je me demande s'il y a un moyen de faire automatiquement cette conversion afin que la ligne de commande cette déclaration:
vim first/foo.py:123:aurait le même résultat que cette commande:vim first/foo.py +123.
Il existe un plug-in Vim qui implémente précisément cela: lervag / file-line .
Il reconnaît les séparateurs communs tels que les deux points ou également parens ( first/foo.py(123)), et il peut prendre un deuxième nombre facultatif pour indiquer la colonne vers laquelle basculer.
Cela fonctionne à la fois sur la ligne de commande ( vim first/foo.py:123:) ou sur la :editcommande dans Vim ( :e first/foo.py:123:).
Comment pré-traiter les arguments de ligne de commande fournis à vim?
Vous pouvez regarder l'implémentation de ce plug-in pour voir comment il le fait ... C'est un peu compliqué, mais c'est moins de 100 lignes de Vimscript.
Cela dit, l'utilisation de la fonction de correction rapide de Vim est probablement le moyen le plus approprié de gérer cela. Vous pouvez définir de 'errorformat'manière appropriée pour gérer d'autres fichiers: formats de ligne (tels que celui des exceptions Python.) Et vous pouvez utiliser l' -qoption de ligne de commande pour démarrer Vim avec une liste de références aux lignes pour remplir la liste de correctifs rapides lorsque vous ouvrez Vim.
Cela ne répond pas à votre question, mais cela répond à votre cas d'utilisation.
Si vous le faites, l' :let &grepprg = "git grep --line-number"exécution :grep <keyword>à l' intérieur de vim remplira votre liste de correctifs rapides. Avec lequel vous pouvez naviguer :cnextet autres.
Alors, comment cela fonctionne-t-il à un niveau élevé? La commande vim :grepappelle une commande spécifiée par l'option vim grepprget essaie d'analyser la sortie avec l'option vim errorformat(en fait une liste de scanf"matchers" de style -style). Les lignes qui peuvent être mises en correspondance avec un "matcher" de format d'erreur sont analysées en fonction du matcher et utilisées pour remplir la liste de correctifs rapides. Les lignes de sortie d'une invocation de grepprg qui ne peuvent pas être mises en correspondance sont ignorées.
Sachant cela, vous pouvez écrire un correcteur de format d'erreur pour tout ce que vous voulez, y compris File "/third/foo.py", line 55,:
:let &errorformat += 'File "%f", line %l,'
Pour une compréhension complète / bas niveau, consultez:
:help 'grepprg'et:help quickfixet:help 'errorformat'