Isso também deve funcionar:
qual foo.sh | xargs vim
Isso é um pouco estranho, mas aprendi a não fazer suposições sobre as capacidades de qualquer coisa, já que frequentemente me surpreendo com recursos ocultos enterrados nas ferramentas UNIX / Linux, então aqui está.
Eu sempre me encontro executando comandos em que preciso localizar um arquivo em um sistema e, depois de ver a localização para sanidade, preciso fazer algo com o caminho.
Tome este fluxo de trabalho, por exemplo:
$ which foo.sh
/path/to/something/foo.sh
$ vim 'which foo.sh'
Esse segundo comando leva 1-2 segundos inteiros para ser digitado. É loucura. Eu faço isso com tanta freqüência que está começando a parecer um clichê que eu deveria ser capaz de fatorar.
O que eu adoraria seria magia fantasiosa que me permitiria fazer o seguinte:
$ which foo.sh
/path/to/something/foo.sh
$ which foo.sh |! vim
Este segundo caso é IMO muito superior. Eu acho muito mais fácil digitar "|! Vim" depois da seta para cima do que eu procurando o início da linha, digitando o backtick vim, depois procurando o final da linha e digitando um backtick final.
Imagine o operador de pipe-bang fazendo algo parecido com "| xargs, vim", mas de uma maneira que preserva o terminal para o vim e também como algo muito mais curto para digitar. Pipe-bang é, claro, um erro de sintaxe no bash e não pode ser aliado, então a coisa que eu quero fazer parece impossível.
Ou é? Eu suspeito que este é um caso de TMTOWTDI, mas estou tendo um bloqueio mental.
Não precisa ser literalmente "pipe-bang", mas algo próximo é o objetivo.
Isso também deve funcionar:
qual foo.sh | xargs vim
Eu faço a mesma coisa, geralmente (geralmente com o qual encontrar um binário, então rpm -qf para ver qual pacote o fornece)! Minha rota é melhor do que você, mas mais lenta do que você quer; Eu ofereço isso como uma casa a meio caminho.
$ which foo.sh
/path/to/something/foo.sh
$ vim '!!'
Na maioria dos teclados, o backtick e a tecla 1 também são muito próximos, então é bastante rápido digitar.
Dê isto ( v im p revious) uma tentativa:
$ alias vp='vim $(fc -s)'
$ which foo.sh
$ vp
O fc -s
re-executa o comando anterior com uma substituição (null neste caso).
Você pode colocar o alias no seu arquivo ~/.bashrc
. Eu tenho o meu em um arquivo aliases
que é originado pelo meu ~/.bashrc
.