funzione per chiamare lo script di shell con argomenti


8

Sto facendo la mia funzione per chiamare uno script bash che compila ed esegue il mio programma.

Ecco il codice che ho provato.

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

L'unico problema è che sembra analizzare a:gameinvece del valore.

Come vorrei avere a:game, a:major, a:minorper analizzare il loro valore per la funzione?

Risposte:


11

utilizzando :execute

Tutti gli argomenti di comando in Vim sono interpretati letteralmente a meno che non siano progettati per essere valutati. Per creare un comando in modo dinamico, è possibile utilizzare :execute. Ogni argomento :executeviene valutato e sono tutti uniti da uno spazio per produrre il comando finale.

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

incorporando shellescape()

È una buona idea evitare gli argomenti passati alla shell usando shellescape(). Prende una stringa e la sfugge per l'uso in un comando shell.

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

Perché ho bisogno ''di !_compilealtro che di altri argomenti?
nn0p,

1
:executeGli argomenti di VimScript sono espressioni che dovrebbero valutare in stringhe. Se si passano più argomenti, verranno uniti con spazi. Poiché il primo argomento è solo una stringa letterale, la racchiudiamo tra virgolette.
Tommaso,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.