Das Öffnen von Dateien in vim mit einer Dateiliste funktioniert nicht

Das Öffnen von Dateien in vim mit einer Dateiliste funktioniert nicht

Ich habe versucht, Dateien mit vim zu öffnen, vim $(cat filelist)wie zuvor vorgeschlagen.Frage.

Angenommen, ich habe die folgende Datei:

~/Workspace/bar/foo.cpp

Die korrekte Ausführung von vim $(cat filelist)öffnet , wenn enthält . Der Befehl öffnet die Datei jedoch nicht, wenn enthält . Ich möchte wissen, warum die Verwendung des absoluten Pfads dazu führt, dass der Befehl fehlschlägt.~/Workspacefoo.cppfilelistbar/foo.cppfilelist~/Workspace/bar/foo.cpp

Antwort1

Dies liegt an der Reihenfolge, in der die verschiedenen Erweiterungstypen in einer Shell ausgeführt werden. Die bashManpage lautet:

Die Erweiterung wird in der Befehlszeile durchgeführt, nachdem diese in Wörter aufgeteilt wurde. Es gibt sieben Arten der Erweiterung: Klammernerweiterung, Tilde-Erweiterung, Parameter- und Variablenerweiterung, Befehlsersetzung, arithmetische Erweiterung, Wortaufteilung und Pfadnamenerweiterung.

Ersetzen Sie die ~Tilde-Erweiterung, während Sie $(...)den Befehl ersetzen. Jetzt sehen Sie, dass nach der Befehlsersetzung keine Tilde-Ersetzung mehr erfolgt. Mit echten absoluten Pfaden (beginnend beim Stammverzeichnis des Dateisystems /) würde es funktionieren.

Sie können die Erweiterung aber auch selbst durchführen mit sed:

vim $(sed "s_~_${HOME}_g" filelist)

verwandte Informationen