Como usar um canal para editar um arquivo com o vi

15

Digamos que eu tenho um arquivo chamado file.txt. Nele está o nome de um arquivo que eu quero editar com o vi. Eu quero fazer algo assim para que eu possa editar o arquivo:

cat file.txt | vi

No entanto, isso não funciona. Como pode ser feito?

Para esclarecer as coisas:

Aqui está o conteúdo do arquivo.txt:

textfile

Então, de alguma forma, quero enviar o conteúdo de file.txt para o vi, para que o mesmo aconteça ao digitar vi textfile.

O conteúdo do arquivo.txt pode mudar. Eu quero que o vi edite qualquer arquivo listado em file.txt.

tony_sid
fonte
Eu não acho que vi = vim. Não sei se isso faz diferença para essa pergunta, mas sua tag é enganosa.
soandos 31/05
Eu acho que pode haver mais na sua pergunta que você está tentando fazer. Abrir um arquivo nomeado arbitrariamente é o uso básico do vi. isto é: vi file.txt. Há algo mais avançado que você está tentando fazer?
Camster342
O vi inicia o vim no OSX e em outros sistemas Linux modernos.
Tony_sid 31/05
Na verdade, estou tentando editar um arquivo cujo nome está armazenado na área de transferência do OSX. Digitar pbpaste exibirá o nome do arquivo. Estou tentando editar esse arquivo sem precisar digitá-lo, mas usando o que estiver armazenado na área de transferência. O Linux não possui pbpaste, mas é essencialmente o mesmo que obter a saída do nome do arquivo cat.
Tony_sid 31/05
instale xclipe use xclip -opara acessar a área de transferência no shell no x11. apenas no caso de você precisar substituir pbpaste...
akira

Respostas:

9

você pode tentar o seguinte:

% vi `cat file.txt`

ou, para evitar o uso usual de gato:

% vi `< file.txt`

você está dizendo ao vi (m) apenas um monte de coisas arbitrárias. se você deseja que o vi (m) faça algo como 'ei, abra esse arquivo', você deve alimentar os mesmos comandos que você usaria no vi (m), por exemplo. algo parecido :e foo.txt. mas isso é apenas mais complicado do que fazer o que eu propus.

akira
fonte
Aqueles não funcionaram.
Tony_sid 31/05
4
esses são backticks, você os digitou corretamente? eles abrem uma subcama, executam o 'gato' ... se isso não funcionar, tente # vi $(cat file.txt)
2752 Akira
Oh ok, funciona agora. valeu.
tony_sid 31/05
23

Pelo menos para o vim (não tenho certeza sobre o vi), você pode fazer

cat file.txt | vim -

O '-' diz ao vim para ler a partir de stdin.

Jeff
fonte
11
Desculpe, mas esta não é a resposta correta. Isso abre o vim com o conteúdo 'textfile'. O questionador deseja que o vim abra o próprio 'arquivo de texto'. Eu teria voto negativo, mas infelizmente não tenho reputação suficiente aqui.
Scubbo 29/01
scubbo está certo! Minha resposta é mais útil apenas para canalizar algo do stdin.
Jeff