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?

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.