Como encadear comandos externos no VIM?

0

Se eu selecionar o seguinte texto em um buffer VIM no modo VISUAL

f() { 
  echo "f"; 
} 
f 

e depois executar

:'<,'>w !xclip | !eval "$(xclip -o)"

Eu obtenho

/bin/bash: eval: line 3: syntax error near unexpected token '('
/bin/bash: eval: line 3: 'feval f() {'

Como eu posso encadear os 2 comandos corretamente para que o primeiro copie a seleção VISUAL para a área de transferência do sistema e o segundo a avalie usando eval ?

    
por ka3ak 10.01.2018 / 14:33

2 respostas

4

Tente isto:

'<,'>w !xclip | eval "$(xclip -o)"

O ! precisa ser usado uma vez e o vim executaria o comando como um comando.

    
por 10.01.2018 / 14:52
4
:'<,'>!xclip && eval "$(xclip -o)"

funciona perfeitamente no meu teste (Ubuntu 16.04 LTS, com bash 4.3, vim 7.4) e transforma as 4 linhas em um único caractere 'f'. Substituir && por | também funciona, embora não seja recomendado.

Eu não acho que rodar comandos shell com o vim é muito diferente de rodar no shell usual, e não deveria ser.

    
por 10.01.2018 / 14:49

Tags