Öffnen Sie alle Dateien in einem Verzeichnis mit vim in umgekehrter Reihenfolge

Öffnen Sie alle Dateien in einem Verzeichnis mit vim in umgekehrter Reihenfolge

Wie öffne ich mit vim alle Dateien in einem bestimmten Verzeichnis in umgekehrter alphabetischer Reihenfolge? Der Befehl -

vim *

:nwü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 xargszum Spawnen vim. Dabei gibt es zwei Probleme:

  1. Im Allgemeinen können Dateinamen Zeilenumbruchzeichen enthalten. Daher ist es besser, sie mit Nullzeichen zu trennen und zu verwenden xargs -0.

  2. vimin einer Pipe erzeugt, xargsbeschwert sich, dass die Eingabe nicht von einem Terminal stammt. Es können seltsame Dinge passieren. Wenn Ihr System dies xargsunterstützt -o(öffnen Sie stdin erneut wie /dev/ttyim 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:

  • tacwird von POSIX nicht benötigt; xargsunterstützt die verwendeten Optionen möglicherweise nicht. Der gesamte Ansatz ist nicht portierbar.
  • Leere Zeichenfolge als Optionsargument, um tac -sscheinbar ein Nullzeichen als Trennzeichen festzulegen, ohne explizit ein Nullzeichen zu übergeben (dies kann problematisch sein).
  • Es gibtARG_MAXGrenze, können Sie keinen längeren Befehl ausführen. Wenn viele Dateien vorhanden sind, *kann die Erweiterung von die Grenze überschreiten, Sie erhalten möglicherweise Argument list too long. Wenn printfin Ihrer Shell integriert ist, gilt die Grenze an dieser Stelle möglicherweise nicht. Sie gilt dennoch, wenn xargsversucht wird, zu erzeugen vim. xargserkennt dies und führt vimbei 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, sodass ARG_MAXes kein Problem geben wird.

verwandte Informationen