função para chamar shell script com argumentos


8

Estou criando minha própria função para chamar um script bash que compila e executa meu programa.

Aqui está o código que eu tentei.

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

O único problema é que parece analisar em a:gamevez do valor.

Como eu iria ficar a:game, a:major, a:minorpara analisar o seu valor para a função?

Respostas:


11

Usando :execute

Todos os argumentos de comando no Vim são interpretados literalmente, a menos que sejam projetados para serem avaliados. Para criar um comando dinamicamente, você pode usar :execute. Cada argumento para :executeé avaliado e todos eles são unidos por um espaço para produzir o comando final.

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

Incorporando shellescape()

É uma boa idéia escapar dos argumentos que estão sendo passados ​​para o shell usando shellescape(). Ele pega uma string e a escapa para uso em um comando shell.

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

Por que eu preciso ''para !_compileoutra do que outros argumentos?
Nn0p 23/04

1
:executeOs argumentos de são expressões VimScript que devem ser avaliadas em strings. Se você passar vários argumentos, eles serão unidos com espaços. Como o primeiro argumento é apenas uma string literal, o colocamos entre aspas.
Tommcdo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.