fonction pour appeler le script shell avec des arguments

8

Je crée ma propre fonction pour appeler un script bash qui compile et exécute mon programme.

Voici le code que j'ai essayé.

function Compile_and_run(game, major, minor)
    !_compile a:game a:major a:minor
endfunction

Le seul problème est qu'il semble analyser a:gameau lieu de la valeur.

Comment puis-je obtenir a:game, a:major, a:minorpour analyser leur valeur à la fonction?

iProgramme
la source

Réponses:

11

En utilisant :execute

Tous les arguments de commande dans Vim sont interprétés littéralement sauf s'ils sont conçus pour être évalués. Pour créer une commande dynamiquement, vous pouvez utiliser :execute. Chaque argument de :executeest évalué et ils sont tous joints par un espace pour produire la commande finale.

function Compile_and_run(game, major, minor)
    execute '!_compile' a:game a:major a:minor
endfunction

Incorporation shellescape()

C'est une bonne idée d'échapper aux arguments transmis au shell à l'aide de shellescape(). Il prend une chaîne et l'échappe pour une utilisation dans une commande shell.

function Compile_and_run(game, major, minor)
    execute '!_compile' shellescape(a:game) shellescape(a:major) shellescape(a:minor)
endfunction
tommcdo
la source
Pourquoi ai-je besoin ''d' !_compileautre que d' autres arguments?
nn0p
1
:executeLes arguments de sont des expressions VimScript qui doivent être évaluées en chaînes. Si vous passez plusieurs arguments, ils seront joints avec des espaces. Comme le premier argument n'est qu'une chaîne littérale, nous le mettons entre guillemets.
tommcdo