Wie bearbeite ich einen vorhandenen Puffer in einem neuen Tab in vim?

51

Angenommen, ich habe vim folgendermaßen gestartet:

vim foo bar

Jetzt entscheide ich, dass ich jede dieser Dateien in einem eigenen Tab haben möchte. Gibt es eine Möglichkeit, dies zu tun, ohne vim zu beenden und die -pOption zu meiner Befehlszeile hinzuzufügen ?

innaM
quelle
Viele von Ihnen suchen wahrscheinlich nach etwas, tabe %das in der Antwort von liuyang1 unten erwähnt wird.
Mateusz Piotrowski
1
@MateuszPiotrowski Wie ich in diesem Kommentar zu dieser Antwort erwähnt habe , :tabe %funktioniert es nicht mit Puffern, die keinen gültigen Dateipfad haben. :tab sbfunktioniert immer.
JoL

Antworten:

30

Wenn Sie vim so starten, erhalten Sie keinen vim-Client, der Texteditor verwendet die Terminal- oder Cmd-Eingabeaufforderung - die beiden Dateien befinden sich in zwei verschiedenen Puffern. Verwenden Sie, :lsum die Puffer aufzulisten:

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

Das% a ist der aktive Puffer. Sie können :b2mit zu Puffer 2 wechseln oder mit :bnzum nächsten oder :bpvorherigen wechseln . Ich bevorzuge (STRG-W v), Fenster vertikal zu teilen, anstatt (STRG-W s), das horizontal geteilt wird.

Wenn Sie (noch) 2 Dateien und keine Tabs geladen haben, können Sie :tabnewund im neuen Tab-Typ:b2

Wenn Sie immer Puffer in ihre eigenen Registerkarten laden möchten, lesen Sie diesen Artikel .

DaveParillo
quelle
Ja, aber ich möchte Tabs haben.
INNAM
Sie haben vim also bereits so gestartet, dass Sie Ihre Dateien im vim-client haben, nicht in einer cmd / terminal-shell?
DaveParillo
1
Ich bin mir nicht sicher was du meinst. Ich benutze die Shell, um vim wie oben beschrieben zu starten und dann habe ich ein laufendes vim.
Uhr
Ah! Ich habe wohl nie wirklich verstanden, dass Puffer in Tabs nicht vor Ort sind. Ich habe immer gedacht (ohne wirklich viel darüber nachzudenken), dass jede Registerkarte eine eigene Pufferliste hat.
INNAM
Auf meinem Rechner vimwird ein Editor innerhalb der Shell gestartet. Um die vim grafische Benutzeroberfläche zu erhalten, muss ich verwenden gvim. Und Sie haben Recht - Puffer sind für die vim-Anwendung global.
DaveParillo
47

Sie möchten einen Puffer in einem neuen Tab öffnen?

Teilen Sie den Bildschirm auf (Strg-Ws), öffnen Sie ein Fenster und drücken Sie Strg-Wt

Turm
quelle
Hmm. Nicht ganz das, was ich mir vorgestellt hatte, aber zunächst nicht schlecht. Ich wusste es noch Ctrl-w Tnicht. Natürlich hat die erste Registerkarte auf diese Weise immer noch zwei Puffer.
Uhr
Nein. Nachdem Sie den Bildschirm in zwei Fenster aufgeteilt und eines davon in einer neuen Registerkarte geöffnet haben, wird die erste Registerkarte nicht mehr angezeigt. Es wird nicht bleiben (zumindest nicht auf meinem gvim72). Was die Puffer angeht, sind sie nicht mit Fenstern / Registerkarten verbunden. Sie ähneln eher dem Speicher, in dem vim Dateiinhalte speichert.
Rook
Ah! Du hast recht. Ich habe die Ausgabe von falsch interpretiert :ls.
INNAM
Außerdem teilt Strg-W V das Fenster vertikal.
Shannon Nelson
1
STRG-w v ist der richtige Befehl zum vertikalen Teilen von Fenstern
JRM
27

Sie können dies erreichen, indem Sie den tabBefehl mit dem sb[uffer]Befehl kombinieren .

Zuerst müssen Sie die Puffer-ID des Puffers kennen, den Sie in einem neuen Tab öffnen möchten. Dies können Sie mit dem lsBefehl herausfinden :

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

Sobald Sie die ID haben, können Sie sie ganz einfach in einem neuen Tab öffnen:

:tab sb 2

Der sbBefehl öffnet normalerweise den angegebenen Puffer in einem neuen geteilten Fenster, aber der tabBefehl bewirkt, dass er stattdessen in einer neuen Registerkarte geöffnet wird.

Mit dem tabBefehl können Sie auch angeben, wo in der Registerkartenliste die neue Registerkarte erstellt werden soll. :0tab sb 2Dies würde beispielsweise dazu führen, dass die neue Registerkarte "Leiste" am Anfang der Liste und nicht nach der aktuellen Registerkarte angezeigt wird.

rkjnsn
quelle
2
Sie brauchen die Puffernummer nicht, geben Sie ihr einen eindeutigen Teil des Puffernamens und VIM erledigt den Rest für Sie.
Dessert
1
Dies war die Antwort, die ich suchte und brauchte. Ich war bestürzt, als ich :tab buffer part-of-namekeinen neuen Tab öffnete! Aber :tab sb part-of-namewie ein Zauber gearbeitet. Danke!!!!
Sukima,
Dies ist nicht die genaue Frage von OP, aber genau das, wonach ich gesucht habe :)
jackcogdill
25

Ein besserer Weg, um das zu erreichen, wonach OP gefragt hat, ist der folgende:

:bufdo tab split

Dadurch wird jeder Puffer in einem eigenen Tab geöffnet, egal wie viele es gibt. Wenn Sie so viel verwenden, ist es einfach, eine Zuordnung in Ihrer .vimrc zu erstellen. In Kombination mit so etwas wie diesem kleinen Vim-Plugin öffnet das Folgende jedes Item von :grep(oder : Ack ) in einem eigenen Tab:

:grep foo
:QuickFixOpenAll
:bufdo tab split

Wenn Sie auf ein Plugin zurückgreifen, ist es natürlich einfach genug, es zu ändern, um den Inhalt der Quickfix-Liste direkt in Registerkarten zu öffnen.

UPDATE : Ich muss den Kommentar von ggustafsson unbedingt begrüßen. Es ist bei weitem die beste Antwort und zeigt auf wunderbare Weise Vims Tendenz zum kompositorischen Verhalten. Der Vorschlag ist:

 :tab sball

Es lohnt sich, die Vim-Hilfe für : tab und : sball aufzurufen, um zu sehen, was hier vor sich geht.

John Whitley
quelle
Ein ähnlicher Ansatz aus einer früheren Ausgabe für die Nachwelt ist :bufdo execute "tabnew %". Ich denke, der neue Ansatz ist etwas klarer.
John Whitley
Eine Einschränkung: Wenn der Startpuffer in vim nicht leer ist, scheint dies den letzten Puffer zweimal zu öffnen. Ich werde ein Update veröffentlichen, wenn ich eine einfache Lösung finde.
John Whitley
12
:tab sballscheint besser zu funktionieren.
ggustafsson
6

1. Öffnen Sie zwei Dateien in Vim.

$ Vim Foo Bar

2. Überprüfen Sie die Anzahl der Puffer.

: ls
  1% a "foo"
  2 "bar"

3. Verketten Sie zwei Befehle tabnew, um eine neue Registerkarte zu öffnen und b <buffer_number>den gewünschten Puffer in die Registerkarte zu laden.

: tabnew | b 2
Schamaoke
quelle
8
Das Problem bei Schritt 3 besteht darin, dass zuerst eine neue Registerkarte mit einem leeren Puffer erstellt und dann Puffer 2 geöffnet wird, was zu einem zusätzlichen Puffer ohne Titel in der Pufferliste führt. Besser zu bedienen:tab sb 2
rkjnsn
1
@rkjnsn du solltest das als antwort posten - es beantwortet am besten die frage 'wie bearbeite ich einen vorhandenen puffer in einem neuen tab in vim?'
JonnyRaa
1
@JonnyLeeds erledigt.
rkjnsn
4

Füge nur einen Punkt hinzu, den andere nicht erwähnt haben.

  • Aktuelles Fenster zur neuen Registerkarte

Wenn Sie mehrere Fenster haben, <C-W>Twird dieses Fenster auf eine neue Registerkarte verschoben. Diese Verknüpfung gilt jedoch nur für "Fenster", nicht für "Puffer". Wenn Sie diesen Stil bevorzugen :spoder <C-W>sden aktuellen Puffer in ein weiteres Fenster kopieren möchten <C-W>T, verschieben Sie ihn in eine neue Registerkarte.

4 Tastenanschläge oder 7 Tastenanschläge.

  • aktueller Puffer zum neuen Reiter

:tabe % um eine neue Registerkarte für den aktuellen Puffer zu öffnen.

7 Tastenanschläge.

  • Auf neuen Tab puffern

Wenn Sie das CtrlP-Plugin verwenden, können Sie auch "CtrlPBuffer" verwenden und dann mit der <C-t>Verknüpfung eine neue Registerkarte öffnen. Dieser Stil, leicht zu verschiedenen Puffern zu wechseln.

Mit der Tastenkombination "CtrlPBuffer" 4 oder mehr Tastenanschläge.

liuyang1
quelle
:tabe %habe ich lange gesucht, danke!
Pevik
Nein, :tabe %öffnet nicht wirklich eine neue Registerkarte für den aktuellen Puffer. Was passiert, ist, dass es %auf den Dateipfad des aktuellen Puffers erweitert wird und :tabediesen Pfad öffnet. Vim erkennt, dass Sie versuchen, eine bereits geöffnete Datei zu öffnen, und verwendet den vorhandenen Puffer erneut. Dies bedeutet, dass dies bei Puffern ohne Dateipfad nicht funktioniert. Wenn Sie eine neue Datei mit öffnen :newund diese noch nicht gespeichert haben, können Sie sie damit nicht auf einer neuen Registerkarte ablegen. Der eigentliche Befehl, den Sie brauchen, ist der, den rkjnsn in ihrer Antwort angegeben hat: :tab sb %oder kürzer::tab sb
JoL