Ich habe an der Fähigkeit sieht Tabs in Vim zu verwenden (mit :tabe
, :tabnew
usw.) als Ersatz für meine derzeitige Praxis mit vielen Dateien im selben Fenster in versteckten Puffern öffnen.
Ich möchte, dass jede einzelne Datei, die ich geöffnet habe, immer in einem eigenen Tab angezeigt wird. Es gibt jedoch einige Dinge, die dem im Wege stehen. Wie behebe ich diese:
Wenn Befehle wie
gf
und^]
zu einem Speicherort in einer anderen Datei springen, wird die Datei in einem neuen Puffer auf der aktuellen Registerkarte geöffnet. Gibt es eine Möglichkeit, alle diese Arten von Befehlen die Datei in einer neuen Registerkarte öffnen zu lassen oder zur vorhandenen Registerkarte mit der Datei zu wechseln, wenn diese bereits geöffnet ist?Beim Wechseln der Puffer kann ich verwenden
: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?
Etwas spät zur Party hier, aber überrascht, dass ich Folgendes in dieser Liste nicht gesehen habe:
:tab sball
- Dies öffnet eine neue Registerkarte für jeden geöffneten Puffer.:help switchbuf
- Dies steuert das Pufferumschaltverhalten. Versuchen Sie es: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.quelle
switchbuf
-set switchbuf=useopen
ist groß , das lästige Verhalten zu vermeiden:make
,:vimgrep
und ähnliche Befehle, die die Puffer in der Fenster - Layout ändert sich auch dann , wenn der Puffer bereits angezeigt wurde.:se switchbuf=usetab,newtab
wird bei einer Verwendungbn
zum Wechseln des Puffers die Pufferdatei weiterhin in der aktuellen Registerkarte geöffnet, anstatt zur vorhandenen Registerkarte zu wechseln. Stimmt irgendetwas nicht?Vim
:help window
erklärt die Verwirrung "Tabs vs Puffer" ziemlich gut.Das Öffnen mehrerer Dateien erfolgt in vim mit Puffern . In anderen Editoren (z. B. Notepad ++) erfolgt dies mit Registerkarten, sodass die Registerkarte "Name" in vim möglicherweise irreführend ist.
Windows dazu, den Arbeitsbereich aufzuteilen und mehrere Dateien (Puffer) zusammen auf einem Bildschirm anzuzeigen. In anderen Editoren kann dies erreicht werden, indem mehrere GUI-Fenster geöffnet und auf dem Desktop neu angeordnet werden.
Schließlich in dieser Analogie vim Registerkarten mehreren Desktops entsprechen, dh unterschiedlichen Neuanordnungen von Fenstern.
Als vim
help: tab-page
erklärt, kann eine Registerkarte verwendet werden, wenn eine Datei vorübergehend bearbeitet werden soll, aber nichts am aktuellen Layout von Fenstern und Puffern 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 das Anzeigen derselben Datei auf vielen Registerkarten oder Fenstern dazu führen würde, dass dieselbe Arbeitskopie (Puffer) angezeigt wird.
quelle
buffer
= Objekt ,window
= Fenster undtab
= Fenster . Ich kann mich im Raum bewegen und aus verschiedenen Fenstern hineinschauen (tabs
). Unterschiedliche Fenster können unterschiedliche Anzahl, Anordnung und Größe von haben Scheiben . Das gleiche Objekt kann gleichzeitig von verschiedenen betrachtet werden Scheiben in verschiedenen Fenstern .vim
Verwendung erkennen. Am Anfang war nur ein Fenster . Mit den Fenstermanagern konnten Sie die Fenster dann in Fenster (Kacheln von WM) oder in überlappende Fenster (schwebendes WM) aufteilen, aber sie bezeichneten jedes Fenster weiterhin als Fenster. Fügen Sie nun das Konzept eines Arbeitsbereichs hinzu, in dem der Bereich in mehreren Arbeitsbereichen angezeigt werden kann. In diesem Paradigma alsobuffer
= App ,window
= Fenster undtab
= Arbeitsbereich .Im Gegensatz zu einigen anderen Antworten hier sage ich, dass Sie Registerkarten verwenden können, wie Sie möchten. vim wurde so konzipiert, dass es vielseitig und anpassbar ist, anstatt Sie zu zwingen, nach vordefinierten Parametern zu arbeiten. Wir alle wissen, wie sehr wir Programmierer es lieben, allen anderen unsere "Ethik" aufzuzwingen, daher ist diese Leistung sicherlich ein Hauptmerkmal.
<C-w>gf
ist das Tab-Äquivalent zum Pufferbefehlgf
.<C-PageUp>
und<C-PageDown>
wechselt zwischen den Registerkarten. (In Byobu funktionieren diese beiden Befehle nie für mich, aber sie funktionieren außerhalb von Byobu / tmux. Alternativen sindgt
undgT
.)<C-w>T
Verschiebt das aktuelle Fenster auf eine neue Registerkarte.Wenn Sie möchten, dass vim nach Möglichkeit eine vorhandene Registerkarte verwendet, anstatt eine doppelte Registerkarte
:set switchbuf=usetab
zu erstellen , fügen Sie sie Ihrer .vimrc-Datei hinzu. Sie könnennewtab
der Liste (:set switchbuf=usetab,newtab
) hinzufügen, um zu erzwingen, dass QuickFix-Befehle, die Kompilierungsfehler anzeigen, in separaten Registerkarten geöffnet werden. ich bevorzugesplit
stattdessen, was die Kompilierungsfehler in einem geteilten Fenster öffnet.Wenn Sie die Mausunterstützung aktiviert haben
:set mouse=a
, können Sie mit den Registerkarten interagieren, indem Sie darauf klicken. Es gibt auch ein+
Standardmäßig Schaltfläche, mit der eine neue Registerkarte erstellt wird.Geben Sie für die Dokumentation zu Registerkarten den
:help tab-page
normalen Modus ein. (Danach können Sie üben, ein Fenster mit auf eine Registerkarte zu verschieben<C-w>T
.) Es gibt eine lange Liste von Befehlen. Einige der Fensterbefehle haben mit Registerkarten zu tun, daher möchten Sie möglicherweise auch diese Dokumentation über anzeigen:help windows
.Ergänzung: 2013-12-19
Verwenden Sie, um mehrere Dateien in vim mit jeder Datei auf einer separaten Registerkarte zu öffnen
vim -p file1 file2 ...
. Wenn Sie wie ich sind und immer vergessen, etwas hinzuzufügen-p
, können Sie es am Ende hinzufügen, da vim den normalen Parsing-Regeln für Befehlszeilenoptionen folgt. Alternativ können Sie ein Bash - Alias - Mapping hinzufügenvim
zuvim -p
.quelle
vim -p
jedoch, dass standardmäßig nur bis zu 10 Registerkarten angezeigt werden. Zusätzliche Dateien werden in Puffer geladen, aber nicht auf einer eigenen Registerkarte angezeigt.tabpagemax
EinstellungIch bin auf das gleiche Problem gestoßen. Ich wollte, dass Tabs wie Puffer funktionieren, und ich schaffe es nie ganz, sie zu erreichen. Die Lösung, für die ich mich schließlich entschieden habe, bestand darin, Puffer wie Tabs zu verhalten!
Schauen Sie sich das Plugin namens Mini Buffer Explorer an . Sobald es installiert und konfiguriert ist, können Sie mit Puffern praktisch wie mit Registerkarten arbeiten, ohne an Funktionalität zu verlieren.
quelle
Dies ist eine Antwort für diejenigen, die mit Vim nicht vertraut sind und von anderen Texteditoren stammen (in meinem Fall Sublime Text).
Ich habe all diese Antworten durchgelesen und es war immer noch nicht klar. Wenn Sie sie genug durchlesen, beginnen die Dinge Sinn zu machen, aber ich habe Stunden gebraucht, um zwischen den Fragen hin und her zu gehen.
Das erste ist, wie andere erklärt haben:
Registerkarten klingen sehr nach Registerkarten , verhalten sich wie Registerkarten und sehen in den meisten anderen GUI-Editoren wie Registerkarten aus, sind es aber nicht. Ich denke, es ist ein schlechtes mentales Modell, das in Vim aufgebaut wurde und das leider die zusätzliche Leistung trübt, die Sie auf einer Registerkarte haben.
Die erste Beschreibung, die ich verstanden habe, stammt aus der Antwort von @ crenate, dass sie mehreren Desktops entsprechen. In dieser Hinsicht haben Sie immer nur ein paar Desktops geöffnet, aber in jedem sind viele GUI-Fenster geöffnet.
Ich würde sagen, dass sie anderen Editoren / Browsern ähnlich sind:
Wenn Sie sie so sehen, erkennen Sie die Leistungsfähigkeit, mit der Sie Dateigruppen (Puffer) einfach gruppieren können, z. B. Ihre CSS-Dateien, Ihre HTML-Dateien und Ihre JS-Dateien auf verschiedenen Registerkarten. Welches ist eigentlich ziemlich genial.
Andere Beschreibungen, die ich verwirrend finde
Ansichtsfenster
Das macht für mich keinen Sinn. Ein Ansichtsfenster, das zwar einen definierten Wörterbuchbegriff enthält , ich jedoch nur gehört habe, dass es sich im
:help window
Dokument auf Vim-Fenster bezieht . 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 seltsam, einen Desktop als einzelnes Fenster zu bezeichnen.
Arbeitsbereiche
Dies ist möglicherweise sinnvoller. Die Wörterbuchdefinition lautet:
Es ist also wie ein Ort, an dem Sie eine Gruppe von Puffern speichern.
Ich habe mich anfangs nicht wie das Konzept von Sublime Text für einen Arbeitsbereich angehört, bei dem es sich um eine Liste aller Dateien handelt, die Sie in Ihrem Projekt geöffnet haben:
Wenn man jedoch mehr darüber nachdenkt, stimmt dies tatsächlich zu. Wenn Sie eine Vim-Registerkarte wie ein Sublime Text-Projekt betrachten, erscheint es seltsam, in jedem Projekt nur eine Datei zu öffnen und zwischen 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 diese Weise auf Registerkarten. Plus zahlreiche andere Antworten verwenden das gleiche Konzept. Doch bis Sie sich ein Bild davon machen, was ein Vim-Fenster ist, nützt das nicht viel, wie das Bauen einer Burg auf Sand.Wie oben erwähnt, entspricht ein VIM-Fenster einem Ansichtsfenster und ist in diesem Artikel auf linux.com hervorragend erklärt :
Ich finde es seltsam, dass eine Registerkarte als Sammlung von Fenstern anstelle einer 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 bisher.
quelle
Betrachten: Hilfe-Registerkarten Es sieht nicht so aus, als ob vim so arbeiten möchte, wie Sie es tun ...
Puffer werden von 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.
Sie könnten wahrscheinlich den gewünschten Effekt erzielen, indem Sie ein Terminal verwenden, das Registerkarten wie Multi-Gnome-Terminal unterstützt, und dann vim-Instanzen in jeder Terminal-Registerkarte ausführen. Nicht perfekt ...
quelle
Sie können Befehle zuordnen, die normalerweise Puffer bearbeiten, um Registerkarten zu bearbeiten, wie ich es mit gf in meiner .vimrc getan habe:
Ich bin sicher, dass Sie dasselbe mit [^ tun können
Ich glaube nicht, dass vim dies (noch) für Tabs unterstützt. Ich benutze gt und gT, um zur nächsten bzw. vorherigen Registerkarte zu wechseln. 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 einige Funktionen am Ende meiner .vimrc-Datei eingefügt (ich habe hier nicht eingefügt , weil es lang ist und nicht richtig formatiert wurde).
quelle
<c-w>gf
öffnet den Dateinamen unter dem Cursor in einem neuen TabIch verwende Puffer wie Tabs, das BufExplorer- Plugin und einige Makros:
Mit BufExplorer haben Sie oben keine Registerkartenleiste, aber auf der anderen Seite spart es Platz auf Ihrem Bildschirm. Außerdem können Sie unendlich viele Dateien / Puffer öffnen und die Pufferliste kann durchsucht werden ...
quelle
Wenn Sie möchten, dass Puffer wie Registerkarten funktionieren, lesen Sie das Tabline-Plugin .
Das verwendet ein einzelnes Fenster und fügt oben eine Linie hinzu, um die Registerkarten zu simulieren (nur die Liste der Puffer wird angezeigt). 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.
quelle