引数付きのシェルスクリプトを呼び出す関数


8

私は自分のプログラムをコンパイルして実行するbashスクリプトを呼び出す独自の関数を作成しています。

これが私が試したコードです。

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

唯一の問題はa:game、値の代わりに解析されるようです。

どのように私はなるだろうa:gamea:majora:minor関数にその値を解析するために?

回答:


11

使用する :execute

Vimのすべてのコマンド引数は、評価されるように設計されていない限り、文字どおりに解釈されます。コマンドを動的に作成するには、を使用できます:execute。への各引数:executeが評価され、それらはすべてスペースで結合され、最終的なコマンドを生成します。

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

組み込む shellescape()

を使用してシェルに渡される引数をエスケープすることをお勧めしますshellescape()。文字列を受け取り、シェルコマンドで使用するためにエスケープします。

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

なぜ必要なのでしょ''ために!_compile他の引数以外の?
nn0p

1
:executeの引数は、文字列として評価されるVimScript式です。複数の引数を渡すと、それらはスペースで結合されます。最初の引数は単なるリテラル文字列なので、引用符で囲みます。
tommcdo 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.