it-swarm.com.de

Verwenden von Vim-Registerkarten wie Puffer

Ich habe mir die Möglichkeit angesehen, Tabs in Vim zu verwenden (mit :tabe, :tabnew, etc.) als Ersatz für meine derzeitige Praxis, viele Dateien in versteckten Puffern im selben Fenster zu öffnen.

Ich möchte, dass jede einzelne Datei, die ich geöffnet habe, immer auf einer eigenen Registerkarte angezeigt wird. Es gibt jedoch einige Dinge, die dem im Wege stehen. Wie behebe ich diese:

  1. Wenn Befehle wie gf und ^] springe zu einem Ort in einer anderen Datei, die Datei öffnet sich in einem neuen Puffer in der aktuellen Registerkarte. Gibt es eine Möglichkeit, mit all diesen Befehlen die Datei auf einer neuen Registerkarte zu öffnen oder auf die vorhandene Registerkarte mit der Datei zu wechseln, wenn diese bereits geöffnet ist?

  2. Beim Umschalten von Puffern kann ich :b <part of filename><tab> und es werden die Namen der Dateien in vorhandenen Puffern vervollständigt. <part of filename> kann sogar die Mitte eines Dateinamens anstelle des Anfangs sein. Gibt es ein Äquivalent zum Wechseln der Registerkarten?

352
indentation

Halt halt halt.

Auf diese Weise können die Registerkarten von Vim nicht verwendet werden. In der Tat sind sie falsch benannt. Ein besserer Name wäre "Ansichtsfenster" oder "Layout", da dies eine Registerkarte ist - es ist ein anderes Layout der Fenster aller Ihrer vorhandenen Puffer .

Der Versuch, Vim in 1 Tab == 1 Puffer zu schlagen, ist eine vergebliche Übung. Vim weiß es nicht oder kümmert sich nicht darum und respektiert es nicht bei allen Befehlen - insbesondere bei allem, was den Quickfix-Puffer verwendet (:make, :grep, und :helpgrep sind diejenigen, die in den Sinn kommen), die Tabs gerne ignorieren, und Sie können nichts dagegen tun.

Stattdessen:

  • :set hidden
    Wenn Sie dieses Set noch nicht haben, dann tun Sie es. Damit funktioniert vim wie jeder andere Multi-File-Editor der Welt. Sie können Puffer bearbeiten lassen, die in einem Fenster nicht sichtbar sind.
  • Verwenden :bn, :bp, :b #, :b name, und ctrl-6, um zwischen den Puffern zu wechseln. Ich mag ctrl-6 ich selbst (allein schaltet es auf den zuvor verwendeten Puffer um, oder #ctrl-6 wechselt zu Puffernummer #).
  • Verwenden :ls, um Puffer oder ein Plugin wie MiniBufExpl oder BufExplorer aufzulisten.
606
Zathrus

Ein bisschen zu spät zur Party hier, aber überrascht, dass ich das Folgende in dieser Liste nicht gesehen habe:

:tab sball - öffnet eine neue Registerkarte für jeden offenen Puffer.

:help switchbuf - Hiermit wird das Verhalten der Pufferumschaltung gesteuert. Versuchen Sie :set switchbuf=usetab,newtab. Dies sollte bedeuten, dass Sie zur vorhandenen Registerkarte wechseln, wenn der Puffer geöffnet ist, oder wenn nicht, eine neue erstellen.

268
robince

Vim :help window erklärt die Verwirrung "Tabs vs Puffer" ziemlich gut.

Ein Puffer ist der speicherinterne Text einer Datei.
Ein Fenster ist ein Ansichtsfenster in einem Puffer.
Eine Registerkarte ist eine Sammlung von Fenstern.

Das Öffnen mehrerer Dateien erfolgt in vim mit Puffer. In anderen Editoren (z. B. Notepad ++) wird dies mit Tabulatoren durchgeführt, sodass der Name-Tabulator in vim möglicherweise irreführend ist.

Windows dienen zum Aufteilen des Arbeitsbereichs und zum Anzeigen mehrerer Dateien (Puffer) auf einem Bildschirm. In anderen Editoren kann dies erreicht werden, indem mehrere GUI-Fenster geöffnet und auf dem Desktop neu angeordnet werden.

Schließlich würde in dieser Analogie vims Registerkarten mehreren Desktops entsprechen, dh unterschiedlichen Neuanordnungen von Fenstern.

Als vim help: tab-page erklärt, dass eine Registerkarte verwendet werden kann, wenn eine Datei vorübergehend bearbeitet werden soll, das aktuelle Layout von Fenstern und Puffern jedoch nicht geändert werden soll. In einem solchen Fall kann eine andere Registerkarte nur zum Bearbeiten dieser bestimmten Datei verwendet werden.

Natürlich müssen Sie bedenken, dass die Anzeige derselben Datei in vielen Registerkarten oder Fenstern zur Anzeige derselben Arbeitskopie (Puffer) führen würde.

160
crenate

Im Gegensatz zu einigen anderen Antworten hier sage ich, dass Sie Tabs verwenden können, wie Sie möchten. vim wurde entwickelt, um vielseitig und anpassbar zu sein, anstatt Sie zu zwingen, nach vordefinierten Parametern zu arbeiten. Wir alle wissen, wie sehr wir Programmierer es lieben, anderen unsere "Ethik" aufzuzwingen, daher ist diese Leistung mit Sicherheit ein Hauptmerkmal.

<C-w>gf Ist das Tabulatoräquivalent zum Befehl gf für Puffer. <C-PageUp> Und <C-PageDown> Wechseln zwischen den Registerkarten. (In Byobu funktionieren diese beiden Befehle nie für mich, aber sie funktionieren außerhalb von Byobu/tmux. Alternativen sind gt und gT.) <C-w>T Verschiebt das aktuelle Fenster nach eine neue Registerkarte.

Wenn Sie möchten, dass vim möglichst eine vorhandene Registerkarte verwendet, anstatt eine doppelte Registerkarte zu erstellen, fügen Sie Ihrer .vimrc-Datei :set switchbuf=usetab Hinzu. Sie können newtab zur Liste hinzufügen (:set switchbuf=usetab,newtab), Um zu erzwingen, dass QuickFix-Befehle, die Kompilierungsfehler anzeigen, in separaten Registerkarten geöffnet werden. Ich bevorzuge stattdessen split, wodurch die Kompilierungsfehler in einem geteilten Fenster geöffnet werden.

Wenn Sie die Mausunterstützung mit :set mouse=a Aktiviert haben, können Sie mit den Registerkarten interagieren, indem Sie darauf klicken. Außerdem gibt es standardmäßig eine Schaltfläche +, Mit der ein neuer Tab erstellt wird.

Geben Sie für die Dokumentation auf Registerkarten im normalen Modus :help tab-page Ein. (Danach können Sie üben, ein Fenster mit <C-w>T Auf eine Registerkarte zu verschieben.) Es gibt eine lange Liste von Befehlen. Einige der Fensterbefehle haben mit Tabulatoren zu tun, daher können Sie diese Dokumentation auch über :help windows Anzeigen.

Ergänzung: 19.12.201

Verwenden Sie vim -p file1 file2 ..., Um mehrere Dateien in vim mit jeder Datei in einem separaten Tab zu öffnen. Wenn Sie wie ich sind und immer vergessen, -p Hinzuzufügen, können Sie es am Ende hinzufügen, da vim den normalen Regeln für das Parsen von Befehlszeilenoptionen folgt. Alternativ können Sie ein Bash-Alias-Mapping vim zu vim -p Hinzufügen.

50
Zenexer

Ich bin auf dasselbe Problem gestoßen. Ich wollte, dass Tabs wie Puffer funktionieren und ich schaffe es nie ganz, sie zu bekommen. Die Lösung, auf die ich mich endgültig festgelegt habe, bestand darin, Puffer so zu gestalten, dass sie sich wie Tabs verhalten!

Schauen Sie sich das Plugin Mini Buffer Explorer an. Sobald es installiert und konfiguriert ist, können Sie mit Puffern praktisch wie mit Registerkarten arbeiten, ohne die Funktionalität zu verlieren.

15

Dies ist eine Antwort für diejenigen, die nicht mit Vim vertraut sind und aus anderen Texteditoren stammen (in meinem Fall Sublime Text).

Ich habe all diese Antworten durchgelesen und es war immer noch nicht klar. Wenn Sie genug durchlesen, ergeben die Dinge allmählich Sinn, aber ich habe Stunden gebraucht, um zwischen den Fragen hin und her zu gehen.

Das erste ist, wie andere erklärt haben:

Registerkarten klingen ähnlich wie Registerkarten , sie verhalten sich wie Registerkarten und In den meisten anderen GUI-Editoren sehen sie Tabs sehr ähnlich, sind es aber nicht. Ich denke, es ist ein schlechtes mentales Modell, auf das in Vim aufgebaut wurde, was leider die zusätzliche Kraft trübt, die Sie auf einer Registerkarte haben.

Die erste Beschreibung, die ich verstanden habe, stammt von @ crenates Antwort , dass sie mehreren Desktops entsprechen. In dieser Hinsicht wären immer nur ein paar Desktops geöffnet, aber in jedem sind viele GUI-Fenster geöffnet.

Ich würde sagen, dass sie in anderen Editoren/Browsern ähnlich sind:

  1. Tab-Gruppierungen
  2. Erhabene Textarbeitsbereiche (d. H. Eine Liste der geöffneten Dateien in einem Projekt)

Wenn Sie sie so sehen, erkennen Sie ihre Leistungsfähigkeit, dass Sie Dateigruppen (Puffer) leicht zusammenfassen können, z. Ihre CSS-Dateien, Ihre HTML-Dateien und Ihre JS-Dateien in verschiedenen Registerkarten. Welches ist eigentlich ziemlich genial.

Andere Beschreibungen, die ich verwirrend finde

Ansichtsfenster

Das ergibt für mich keinen Sinn. Ein Ansichtsfenster, das, obwohl es einen definierten Wörterbuchbegriff hat , nur im :help window - Dokument auf Vim-Fenster verweisen kann. Viewport ist kein Begriff, den ich jemals in Bezug auf Editoren wie Sublime Text, Visual Studio, Atom, Notepad ++ gehört habe. Tatsächlich hatte ich für Vim noch nie davon gehört, bis ich anfing, Registerkarten zu verwenden.

Wenn Sie Registerkarten wie mehrere Desktops anzeigen, erscheint es ungewöhnlich, auf einen Desktop als ein einziges Fenster zu verweisen.

Arbeitsbereiche

Dies ist möglicherweise sinnvoller, die Wörterbuchdefinition lautet:

Eine Speichereinrichtung zur vorübergehenden Verwendung.

Es ist also wie ein Ort, an dem Sie eine Gruppe von Puffern speichern.

Ich hörte mich anfangs nicht wie Das Konzept von Sublime Text eines Arbeitsbereichs an, der eine Liste aller Dateien enthält, die Sie in Ihrem Projekt geöffnet haben:

die sublime-workspace-Datei, die benutzerspezifische Daten enthält, z. B. die geöffneten Dateien und die jeweiligen Änderungen.

Wenn man jedoch mehr darüber nachdenkt, stimmt dies tatsächlich überein. Wenn Sie eine Vim-Registerkarte wie ein Sublime-Text-Projekt betrachten, erscheint es seltsam, in jedem Projekt nur eine Datei zu öffnen und zwischen den Projekten zu wechseln. Daher ist es ungerade, eine Registerkarte zu verwenden, um nur eine Datei zu öffnen.

Sammlung von Fenstern

Das :help window Verweist auf Registerkarten auf diese Weise. Plus zahlreiche andere Antworten verwenden das gleiche Konzept. Solange Sie nicht wissen, was ein Vim-Fenster ist, ist es nicht sinnvoll, ein Schloss auf Sand zu bauen.

Wie ich oben erwähnt habe, ist ein vim-Fenster dasselbe wie ein Ansichtsfenster und wird in diesem linux.com-Artikel ausgezeichnet erklärt :

Eine wirklich nützliche Funktion in Vim ist die Möglichkeit, den sichtbaren Bereich auf eine oder mehrere Dateien aufzuteilen oder einfach das Fenster zu teilen, um zwei Bits derselben Datei einfacher anzuzeigen. In der Vim-Dokumentation wird dies austauschbar als Ansichtsfenster oder Fenster bezeichnet.

Sie sind möglicherweise bereits mit dieser Funktion vertraut, wenn Sie die Hilfefunktion von Vim bereits mithilfe des folgenden Hilfethemas oder durch Drücken der F1-Taste verwendet haben. Wenn Sie die Hilfe eingeben, teilt Vim das Ansichtsfenster und öffnet die Hilfedokumentation im oberen Ansichtsfenster. Das Dokument bleibt im unteren Ansichtsfenster geöffnet.

Ich finde es seltsam, dass eine Registerkarte als Sammlung von Fenstern anstatt als Sammlung von Puffern bezeichnet wird. Aber ich denke, Sie können zwei separate Registerkarten mit jeweils mehreren Fenstern öffnen, die alle auf denselben Puffer zeigen, zumindest verstehe ich das so weit.

8
icc97

Betrachtet man: Hilfetabs sieht es nicht so aus, als ob Vim so arbeiten möchte, wie Sie es tun ...

Puffer werden auf mehreren Registerkarten gemeinsam genutzt, sodass es nicht möglich zu sein scheint, einen bestimmten Puffer so zu sperren, dass er nur auf einer bestimmten Registerkarte angezeigt wird.

Es ist jedoch eine gute Idee.

Möglicherweise können Sie den gewünschten Effekt erzielen, indem Sie ein Terminal verwenden, das Registerkarten unterstützt, z. B. ein Multi-Gnome-Terminal, und dann auf jeder Registerkarte des Terminals vim-Instanzen ausführen. Nicht perfekt, aber ...

4
Mike G.
  • Sie können Befehle zuordnen, die normalerweise Puffer manipulieren, um Registerkarten zu manipulieren, wie ich es mit gf in meiner .vimrc getan habe:

    map gf :tabe <cfile><CR>
    

    Ich bin mir sicher, dass Sie dasselbe mit [^ tun können

  • Ich glaube nicht, dass vim dies für Tabs unterstützt. Ich benutze gt und gT, um zum nächsten bzw. vorherigen Tab zu gelangen. Sie können auch Ngt verwenden, wobei N die Registerkartennummer ist. Ein Ärger, den ich habe, ist, dass die Tab-Nummer standardmäßig nicht in der Tab-Zeile angezeigt wird. Um dies zu beheben, habe ich am Ende meiner .vimrc-Datei einige Funktionen eingefügt (ich habe sie hier nicht eingefügt, weil sie lang ist und nicht formatiert wurde korrekt).

4
Lucas Oman

Ich benutze Puffer wie Tabs, benutze das BufExplorer Plugin und ein paar Makros:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

Mit BufExplorer haben Sie keine Tab-Leiste oben, aber andererseits spart es Platz auf Ihrem Bildschirm, und Sie können eine unbegrenzte Anzahl von Dateien/Puffern öffnen und die Pufferliste ist durchsuchbar ...

4
jkramer

Wenn Sie möchten, dass Puffer wie Tabs funktionieren, lesen Sie das tabline plugin .

Das verwendet ein einzelnes Fenster und fügt eine Zeile oben hinzu, um die Registerkarten zu simulieren (zeigt nur die Liste der Puffer an). Dies kam vor langer Zeit heraus, als Registerkarten nur in GVim, nicht aber in der Befehlszeile vim unterstützt wurden. Da es nur mit Puffern arbeitet, lässt sich alles gut in den Rest von vim integrieren.

2
thien.vuong