Wie kann ich in Vim mehrere Dateien gleichzeitig öffnen?

86

Gibt es eine Möglichkeit, alle Dateien in einem Verzeichnis in Vim zu öffnen? Also ein :command, das in der Tat sagen würde "Öffnen Sie alle Dateien unter /some/pathin Puffer".

Im Idealfall wäre es großartig, alle Dateien unter einem Verzeichnis rekursiv zu öffnen.

Ethan
quelle

Antworten:

104

Der Befehl, den Sie suchen, lautet args:

Beispielsweise:

:args /path_to_dir/*

öffnet alle Dateien im Verzeichnis

skinp
quelle
31
Verwenden Sie **diese Option , um Dateien rekursiv abzugleichen. ZB:args /path_to_dir/**
daf
1
Um Dateien ohne Erweiterung zu öffnen, geben Sie das übergeordnete Verzeichnis an, z. B. args ** /. Hg / hgrc funktioniert, ** / hgrc jedoch nicht.
79E09796
11
Sobald die Dateien geöffnet sind :tab all, können Sie sie in einzelne Registerkarten einfügen.
Backlin
"Alle Dateien" enthalten Unterverzeichnisse, die möglicherweise nicht erwünscht sind. (Meine vim Fehler "/path_to_dir/subdir/" Illegal file name). Schnelle Lösung besteht darin, den zweiten Befehl auszuführen argd */, um diese wieder aus der Liste zu entfernen
lessthanideal
Es wäre wirklich schön, die Antwort mit dem folgenden Vorschlag zu vervollständigen: Als bewährte Methode und um zu zeigen, wie derselbe Befehlssatz auf alle geöffneten Dateien angewendet wird, können Sie den folgenden Befehl ausführen, um alle Befehle anzuwenden enthalten in my_commands_batch.vim Datei:argdo source my_commands_batch.vim
aturegano
21

Warum funktioniert es nicht, wenn ich alle Dateien öffnen möchte, die mit einer bestimmten Erweiterung enden? Ich habe es versucht

:n ./**.cs

und öffnet nur die Dateien im aktuellen Verzeichnis.

Ich habe die Antwort gefunden. Der richtige Code ist :n **/*.cs

Für mehr Informationen :h find

mp.
quelle
9

Hast du versucht

:n /some/path/*

Es werden alle Dateien in / some / path geöffnet

Ich glaube nicht, dass die Datei rekursiv geöffnet wird.

BEARBEITEN

Möglicherweise wird die Verwendung von ** rekursiv geöffnet, wie von daf erwähnt

Luc M.
quelle
Was bedeutet das: n? Ein Blick in die Hilfe von vim weist mich nur darauf hin, "das letzte Muster zu wiederholen". Ich verstehe, dass dies der Tastenanschlag ist. Gibt es eine Möglichkeit, Hilfe nur für den Befehlsmodus zu erhalten?
U0001
1
Zu einfach: h: n .. Hilfe für ": n" bekommen. Beantworte ich nicht gerne meine eigenen Fragen;)
U0001
4

Eine Methode, mit der Sie nicht herumspielen müssen, argsbesteht darin, die Liste der Dateien in eine Textdatei einzufügen und dann mit dem :soBefehl die Befehle in dieser Datei auszuführen.

Wenn Sie beispielsweise alle Dateien öffnen möchten, die .phpin einem bestimmten Verzeichnis enden , erstellen Sie zunächst eine files.txtListe mit Dateien, denen der Befehl vorangestellt ist, mit dem Sie sie öffnen möchten.

sp alpha.php
sp bravo.php
sp charlie.php

Dann innerhalb von vim:

:so files.txt

Wenn die Liste der Dateien groß ist, ist es relativ einfach, die files.txtDatei schnell zu generieren , indem Sie die Ausgabe lsin eine Datei umleiten und dann spvor jedem Dateinamen ein vim-Makro voranstellen .

Dies ist offensichtlich nicht so elegant wie die Verwendung der Befehle argsund argdo, aber diese Befehle sind auch viel komplizierter.

Es könnte auch eine Möglichkeit geben, dies mit einem einzigen Befehl in der Befehlszeile zu tun, aber selbst nach 16 Jahren finde ich die Vim-Programmierung immer noch seltsam und geheimnisvoll.

Dirtside
quelle
Interessant! Klingt nach einer guten Möglichkeit, die Kontrolle darüber zu behalten, welche Dateien geöffnet werden müssen, anstatt blind alle Dateien eines bestimmten Verzeichnisses zu öffnen, wenn diese Dateien nicht alle erforderlich sind.
Cram2208
1

Eine andere Möglichkeit, Dateien rekursiv zu öffnen

find . -type f -exec vi {} \;
Schurke-eins
quelle
4
Erfüllt nicht die Einschränkung "aus Vim heraus".
ZyX
und tut doch, was gebraucht wird :)
Rogue-One
3
Es tut nicht. Was benötigt wird, sind Dateien aus dem angegebenen Verzeichnis rekursiv aus vim heraus . Wenn Sie Bedingungen wegwerfen, können Sie auch sagen, dass kate **/*(^/)(unter Verwendung der zsh-Globbing-Syntax) das Notwendige getan wird: Dateien aus dem angegebenen Verzeichnis werden rekursiv geöffnet. Es ist nicht "von innen" und es verwendet überhaupt kein vim, aber es "tut noch, was benötigt wird". Oder sogar kate ~/.vimrc ~/.bashrc. Weglassen von "from withing", "from the gegebenes Verzeichnis" und "rekursiv" insgesamt, aber es "tut noch, was benötigt wird": öffnet Dateien.
ZyX
Dies öffnet die Dateien
Paul
1

Wenn Sie der Argumentliste hinzufügen möchten;

:arga what_you-d_like_to_add

sehen

:he arga

von / in vim für weitere Informationen.

ich bin ich
quelle