Vim executar processo em segundo plano

6

Gostaria de executar um processo em segundo plano no Vim no Mac OS X (ou Unix em geral).

Espero e espero que o seguinte, ou alguma variante, consiga isso:

execute "!my_command &"

ou

!my_command &

ou

!my_command \&

ou alguma outra alternativa.

Infelizmente, isso não parece ser executado my_command. Eu esperaria que houvesse alguma opção leve.

Uma opção seria escrever um script de wrapper que bifurque o comando e saia, mas tenho certeza que alguém já fez isso ( GNU Parallel ?).

Qual é o melhor jeito de concluir isso?

Brian M. Hunt
fonte
Funciona para mim no cygwin ...
nm
@ nm: Obrigado. Parece ser um problema de escape (e comercial não está sendo escapado adequadamente) com o MacVim (e talvez apenas desde o MacVim 65?); outros encontraram isso no FreeBSD , por exemplo , mas essa solução não funciona aqui.
11788 Brian Brian Hunt

Respostas:

7

Isso pode ocorrer porque my_commandprecisa de um terminal para interagir. Você pode fornecer um com a tela GNU ou tmux, por exemplo:

!screen -dm "my_command"

Ou:

!tmux new -d "my_command"
Thor
fonte
Boa ideia. tmuxfuncionou como esperado. Muito obrigado @Thor.
11788 Brian Brian Hunt
8

Todos os comandos abaixo funcionam conforme o esperado quando executados no MacVim (instantâneo 66), e tenho certeza de que funcionariam na minha caixa do Ubuntu em casa:

!mplayer song.mp3 &
:execute "!mplayer song.mp3 &"
:call system("mplayer song.mp3 &")

Se não funcionar, você pode tentar um dos poucos scripts que permitem executar comandos assíncronos:

(e acabei de ver que Thor resolveu seu problema)

romainl
fonte
Obrigado romainl. Em um ponto, eu poderia jurar que tudo o que foi mencionado também funcionou para mim, mas eles parecem ter parado sem motivo aparente. Qualquer que seja a causa, antes da sugestão de Thor, eu também observei os plugins que você sugere, mas achei que eles poderiam ser um exagero para a tarefa em questão - embora a sugestão seja apreciada.
11788 Brian Brian Hunt
Você alterou a opção shellou shellcmdflag?
Romainl
Não; eles são /bin/bashe -crespectivamente.
11383 Brian Brian Hunt