Wie öffne ich mit vim alle Dateien in einem bestimmten Verzeichnis in umgekehrter alphabetischer Reihenfolge? Der Befehl -
vim *
:n
würde alle Dateien in alphabetischer Reihenfolge öffnen. Wie kann ich die Dateien in umgekehrter Reihenfolge durchlaufen ? Ich fand die Verwendung vontac
Hier, eine weitere Lösung hier, die den Dateiinhalt anzeigtHierund eine Lösung für EmacsHier, aber sie sind keine Lösungen für vim
.
Antwort1
Die allgemeine Idee könnte darin bestehen, das Ergebnis umzukehren *
:
printf '%s\n' * | tac
und verwenden Sie dies mit xargs
zum Spawnen vim
. Dabei gibt es zwei Probleme:
Im Allgemeinen können Dateinamen Zeilenumbruchzeichen enthalten. Daher ist es besser, sie mit Nullzeichen zu trennen und zu verwenden
xargs -0
.vim
in einer Pipe erzeugt,xargs
beschwert sich, dass die Eingabe nicht von einem Terminal stammt. Es können seltsame Dinge passieren. Wenn Ihr System diesxargs
unterstützt-o
(öffnen Sie stdin erneut wie/dev/tty
im untergeordneten Prozess, bevor Sie den Befehl ausführen), verwenden Sie es.
Die gesamte Lösung dann:
printf '%s\0' * | tac -s "" | xargs -0o vim
Anmerkungen:
tac
wird von POSIX nicht benötigt;xargs
unterstützt die verwendeten Optionen möglicherweise nicht. Der gesamte Ansatz ist nicht portierbar.- Leere Zeichenfolge als Optionsargument, um
tac -s
scheinbar ein Nullzeichen als Trennzeichen festzulegen, ohne explizit ein Nullzeichen zu übergeben (dies kann problematisch sein). - Es gibt
ARG_MAX
Grenze, können Sie keinen längeren Befehl ausführen. Wenn viele Dateien vorhanden sind,*
kann die Erweiterung von die Grenze überschreiten, Sie erhalten möglicherweiseArgument list too long
. Wennprintf
in Ihrer Shell integriert ist, gilt die Grenze an dieser Stelle möglicherweise nicht. Sie gilt dennoch, wennxargs
versucht wird, zu erzeugenvim
.xargs
erkennt dies und führtvim
bei Bedarf zwei oder mehr Prozesse nacheinander aus. Dies ist jedoch möglicherweise nicht das, was Sie wollen. Da Sie manuell mit iterieren werden:n
, gehe ich davon aus, dass die Anzahl der Dateien hoffentlich nicht so groß ist, sodassARG_MAX
es kein Problem geben wird.