Verwendung einer Pipe zum Bearbeiten einer Datei mit vi

15

Nehmen wir an, ich habe eine Datei namens file.txt. Darin befindet sich der Name einer Datei, die ich mit vi bearbeiten möchte. Ich möchte so etwas tun, damit ich die Datei bearbeiten kann:

cat file.txt | vi

Das geht aber nicht. Wie geht das?

Um Dinge zu klären:

Hier sind die Inhalte von file.txt:

textfile

Ich möchte also irgendwie den Inhalt von file.txt an vi senden, damit dasselbe passiert wie beim Tippen vi textfile.

Der Inhalt von file.txt kann sich ändern. Ich möchte, dass vi die in file.txt aufgeführte Datei bearbeitet.

tony_sid
quelle
Ich glaube nicht, dass vi = vim. Ich weiß nicht, dass das für diese Frage einen Unterschied macht, aber Ihr Tag ist irreführend.
soandos
Ich denke, es gibt vielleicht mehr zu Ihrer Frage, die Sie zu stellen versuchen. Das Öffnen einer beliebig benannten Datei ist die grundlegende Verwendung von vi. d.h. vi file.txt. Gibt es etwas Fortgeschrittenes, das Sie versuchen zu tun?
camster342
vi startet vim unter OSX und anderen modernen Linux-Systemen.
tony_sid
Ich versuche gerade, eine Datei zu bearbeiten, deren Name in der OSX-Zwischenablage gespeichert ist. Bei Eingabe von pbpaste wird der Dateiname angezeigt. Ich versuche, diese Datei zu bearbeiten, ohne sie tatsächlich eingeben zu müssen, sondern mit dem, was in der Zwischenablage gespeichert ist. Linux hat kein pbpaste, aber es ist im Wesentlichen dasselbe wie das Abrufen der Ausgabe von cat Dateiname.
tony_sid
Installieren xclip und dann verwenden xclip -o um auf die Zwischenablage in der Shell in x11 zuzugreifen. nur für den Fall, dass Sie ersetzen müssen pbpaste...
akira

Antworten:

9

Sie könnten dies versuchen:

% vi `cat file.txt`

oder, um die nutzlose Nutzung der Katze zu vermeiden:

% vi `< file.txt`

du sagst vi (m) nur ein paar willkürliche Dinge. Wenn Sie möchten, dass vi (m) etwas wie 'hey, diese Datei öffnen' ausführt, müssen Sie ihm die gleichen Befehle geben, die Sie in vi (m) verwenden würden, z. so etwas wie :e foo.txt. aber das ist nur komplizierter als das, was ich vorgeschlagen habe.

akira
quelle
Die haben nicht funktioniert.
tony_sid
4
das sind Backticks, haben Sie sie richtig eingetippt? Sie öffnen eine Subshell, führen die 'Katze' aus ... wenn das nicht funktioniert, versuchen Sie es vi $(cat file.txt)
akira
Oh ok, es funktioniert jetzt. Vielen Dank.
tony_sid
23

Zumindest für vim (nicht sicher über vi) kannst du das tun

cat file.txt | vim -

Das '-' weist vim an, von stdin zu lesen.

Jeff
quelle
1
Sorry, aber das ist nicht die richtige Antwort. Dies öffnet vim mit dem Inhalt 'Textdatei'. Der Fragesteller möchte, dass vim die 'Textdatei' selbst öffnet. Ich hätte abgelehnt, aber leider habe ich hier nicht genug Ansehen.
scubbo
Scubbo ist richtig! Meine Antwort ist eher nützlich, wenn Sie etwas von stdin leiten.
Jeff