Tente isto:
'<,'>w !xclip | eval "$(xclip -o)"
O !
precisa ser usado uma vez e o vim executaria o comando como um comando.
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
?
:'<,'>!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.