Déboguer comment vim appelle makeprg

Aug 26 2020

J'essaie de configurer pylint pour qu'il fonctionne avec la :makecommande dans Vim 8.2.

J'ai défini :compiler pylintmais l'exécution :makeme donne le message d'aide de pylint, donc certains arguments semblent être mal passés.

:set makeprg? est

makeprg=pylint --output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no

J'ai essayé d'exécuter cette commande directement dans le terminal (en ajoutant le nom de fichier) et cela a fonctionné - la sortie était la liste des erreurs, pas le message d'aide.

Malheureusement, je ne vois pas quelle commande exacte vim essaie d'exécuter. Des conseils sur ce que j'ai fait de mal ou comment le déboguer?

J'aimerais autant que possible m'en tenir aux fonctionnalités par défaut de vim et ne pas utiliser de plugins pour cela.

Réponses

3 filbranden Aug 26 2020 at 04:01

comment le déboguer?

Vous pouvez utiliser la :verbosecommande pour augmenter la verbosité d'une commande spécifique.

Dans ce cas particulier, vous avez besoin d'un niveau de verbosité supérieur à 3 pour voir la commande shell réelle exécutée par Vim , donc cela devrait fonctionner:

:4verbose make
Calling shell to execute: "pylint --output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no  2>&1| tee /tmp/abcde12/3"

Des indices sur ce que j'ai fait de mal?

Comme @D. Ben Knoble a fait remarquer, il vous manque le nom du fichier courant dans l'exécution de la commande. Vous pouvez le corriger en le passant à la :makecommande, avec :make %, ou vous pouvez réellement l'incorporer %en makeprglui-même, car il se développera %avant d'exécuter la commande:

:let &makeprg = 'pylint --output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no %'

Notez le %à la fin de la ligne de commande. Si vous intégrez %dans makeprg, alors simplement exécuter :makefonctionnera pour exécuter pylint sur votre fichier actuel.

2 xaxa Aug 26 2020 at 03:37

(Merci à @ d-ben-knoble)

makeprg n'inclut pas le nom de fichier, donc

:make %

doit être utilisé pour lint le fichier courant