Funktion zum Aufrufen eines Shell-Skripts mit Argumenten

8

Ich mache meine eigene Funktion, um ein Bash-Skript aufzurufen, das mein Programm kompiliert und ausführt.

Hier ist der Code, den ich versucht habe.

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

Das einzige Problem ist, dass es a:gameanstelle des Werts zu analysieren scheint .

Wie sollte ich das bekommen a:game, a:major, a:minordessen Wert auf die Funktion zu analysieren?

iProgramm
quelle

Antworten:

11

Verwenden von :execute

Alle Befehlsargumente in Vim werden wörtlich interpretiert, sofern sie nicht zur Auswertung bestimmt sind. Um einen Befehl dynamisch zu erstellen, können Sie verwenden :execute. Jedes Argument zu :executewird ausgewertet, und alle werden durch ein Leerzeichen verbunden, um den endgültigen Befehl zu erzeugen.

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

Einarbeiten shellescape()

Es ist eine gute Idee, Argumente zu vermeiden, die mit an die Shell übergeben werden shellescape(). Es nimmt eine Zeichenfolge und maskiert sie zur Verwendung in einem Shell-Befehl.

function Compile_and_run(game, major, minor)
    execute '!_compile' shellescape(a:game) shellescape(a:major) shellescape(a:minor)
endfunction
tommcdo
quelle
Warum benötige ich ''für !_compileandere als andere Argumente?
nn0p
1
:executeDie Argumente von sind VimScript-Ausdrücke, die als Zeichenfolgen ausgewertet werden sollen. Wenn Sie mehrere Argumente übergeben, werden diese mit Leerzeichen verknüpft. Da das erste Argument nur eine Literalzeichenfolge ist, setzen wir es in Anführungszeichen.
tommcdo