Wenn ich benutze:
:tabedit file1 file2
Ich bekomme:
E172: Only one file name allowed
Gibt es eine Möglichkeit, :tabedit
mit mehreren Dateinamen zu arbeiten? Oder eine andere Möglichkeit, mehrere Registerkarten gleichzeitig zu öffnen?
tabbed-user-interface
Martin Tournoij
quelle
quelle
:args *.c | tab all
. Die andere Frage ist populärer als diese, daher ist es gut, sie auch zu verknüpfen.Antworten:
In Anbetracht der Probleme und der Komplexität meiner anderen Antwort auf die "eingebaute" Art und Weise, indem ich die Argumentliste ändere, habe ich dazu eine eigene kleine Funktion hinzugefügt:
Sie können jetzt verwenden
:Tabedit *.vim
. Diese Funktion erweitert alle Globbing-Muster und wird:tabedit <f>
für jede Datei ausgeführt. Sie können so viele Pfadnamen hinzufügen, wie Sie möchten. Dies funktioniert beispielsweise wie folgt:Nun, und so weiter ...
Ich habe dies in einem kleinen globedit.vim Plugin, welches auch Befehl enthält für
:Edit
,:Split
usw.quelle
[<f-args>]
anstelle von"<args>"
-. Auf diese Weise ist derpattern
Parameter eine Liste (Array) und Sie müssen die Zeichenfolge nicht manuell aufteilen. (2) Übergeben Sie als drittes Argument einen Wert ungleich Nullglob()
, damit eine Liste zurückgegeben wird. Dann können Sie auch hier das manuelle Teilen vermeiden. Sie werden übergeben müssen0
als zweites Argument , es zu überspringen , ohne das Verhalten zu beeinflussen:glob(l:p, 0, 1)
.Soweit ich weiß, ist der einzige eingebaute Weg, dies zu tun:
Zunächst
:args
wird die Argumentliste durch die ersetzt. In der Argumentliste werden die Dateien aufgelistet, mit denen Sie Vim geöffnet haben. Dasvim file1 file2
bedeutet, dass die Argumentlistefile1
und enthältfile2
.Wir können dies zur Laufzeit ändern und Vim öffnet einen Puffer für jeden neuen Eintrag in der Argumentliste.
Siehe
:help argument-list
für weitere Informationen.Der
:all
Befehl öffnet ein Fenster für jeden Eintrag in der Argumentliste, der:tab
Befehl führt einen Befehl aus und öffnet eine neue Registerkarte, wenn der angegebene Befehl ein neues Fenster öffnen würde.Vorbehalte
Diese Methode weist einige Einschränkungen auf.
Erstens gibt es keine Überprüfung auf Duplikate, sodass Sie zwei oder mehr Registerkarten für denselben Puffer haben können.
Das größte Problem ist jedoch, dass alle Tabs durch die Argumentliste ersetzt werden. so dass Sie verloren alle vorhandenen Tabs.
Sie können diese leicht umgehen , indem Sie
:argadd *.vim
auf hinzufügen zu der Liste der Argumente, anstatt sie zu ersetzen; Befehle wie:edit
oder ändern:tabedit
jedoch nicht die Argumentliste, und Sie verlieren diese Registerkarten, wenn Sie sie nicht zur Argumentliste hinzufügen (Sie haben sie jedoch immer noch in der Pufferliste). Möglicherweise möchten Sie auch nicht alle Elemente in Ihrer Argumentliste auf einer Registerkarte öffnen. Vielleicht möchten Sie nur zwei Dateien als zusätzliche Registerkarte öffnen.Sie könnten dies vielleicht etwas verbessern, indem Sie zuerst alle derzeit geöffneten Tabs zur Argumentliste hinzufügen (was ich nicht wirklich zur Arbeit bringen kann), aber das ist noch lange nicht perfekt. Wenn eine Registerkarte zwei oder mehr Fenster enthält, werden diese trotzdem geändert ...
quelle
:argdo tabedit %
eine neue Registerkarte für jedes Argument geöffnet habe. Wenn Sie mit einem Tab beginnen und n neue öffnen , erhalten Sie natürlich n + 1 Tabs.:tab all
ist eine viel bessere Lösung.Sie können
:next
stattdessen den Befehl verwenden, in Beispiel:oder:
quelle
:args *.vim
? Zumindest verhält es sich genauso und:help next_f
dokumentiert es als dasselbe ...Über die Befehlszeile können Sie Folgendes verwenden:
Und wenn Sie vergessen haben,
-p
noch zu verwenden , können Sie verwendenÜbrigens, vergessen Sie nicht, dass die Variable
tabpagemax
(Standardwert 10) die Anzahl der Registerkarten begrenzt, die Sie auf diese Weise öffnen können.quelle
Sie können tatsächlich neue Registerkarten öffnen und Ihre aktuellen Registerkarten beibehalten, ohne neue Funktionen zu schreiben (siehe diese Antwort zum Stapelüberlauf ):
Möglicherweise möchten Sie
:tabe
vorher eine neue leere Registerkarte ( ) öffnen, da die erste Datei in der aktuellen Registerkarte geöffnet wird. Außerdem bleibt ein zusätzlicher leerer Tab offen (um:help argdo
zu verstehen, warum).quelle
:tabnew | args file1 file2 | argdo tabe | tabdo syntax on
Drücken Sie die Eingabetaste, um die Eingabeaufforderung zu löschen, und geben Sie Folgendes ein:close
, um die letzte zu entfernen ( leer) tab ... es ist sehr viel tippen und nur wert, wenn Sie viele tabs öffnen (für 2 oder 3 dateien:tabe
wäre es schneller, wenn Sie nur zweimal tippen).