
Ich habe eine Datei „filelist“, die die folgenden Zeilen enthält:
text1.txt
text2.txt
text3.txt
Ich suche nach einem Kommandozeilenaufruf, der die 3 Dateien in vim öffnet. Ich habe Folgendes versucht:
$ cat filelist | vim -
Und
$ vim < cat filelist
Diese führen jedoch nicht zum gewünschten Ergebnis.
Antwort1
Wenn die Dateinamen keine Leerzeichen oder andereproblematischZeichen können Sie verwenden
vim $(cat filelist)
Bei Dateinamen mit Leerzeichen xargs
ist die Verwendung robuster (hier werden GNU- xargs
spezifische Optionen verwendet):
xargs --delimiter '\n' --arg-file=filelist vim --
Antwort2
Mit zsh
:
vim -- ${(f)"$(<filelist)"}
Mit bash
4.0+:
readarray -r files < filelist &&
vim -- "${files[@]}"
Mit jeder Bourne-ähnlichen Shell (einschließlich zsh
und bash
):
(IFS='
'; set -f; exec vim -- `cat filelist`)
Mit GNU xargs
(wird ebenfalls verwendet, -r
um die Ausführung zu vermeiden vim
, wenn die Datei leer ist, aber im Gegensatz zu den anderen Ansätzen werden ggf. leere Zeilen nicht übersprungen):
xargs -rd '\n' -a filelist vim --
Antwort3
Zum Öffnen allerindex.phpim aktuellen Arbeitspfad
vim -p `find . -name index.php`
Antwort4
Wenn Sie sich bereits in vim befinden, können Sie :args
von vim aus Folgendes festlegen:
:args file-1 file-2 ... file-n
Bonus: Unter Unix können Sie außerdem Folgendes tun:
:args `find . -name Makefile`
(vorausgesetzt, Dateipfade enthalten keine Zeilenumbruchzeichen und es gibt mindestens eine passende Datei)
Oder in Ihrem Fall:
:args `cat filelist`