Wenn ich gleichzeitig an verschiedenen Projekten arbeiten muss, habe ich den folgenden Workflow:
- Ich erstelle eine Registerkarte für jedes Projekt.
- In jeder Registerkarte öffne ich die Dateien, die ich bearbeiten möchte, was mehrere Puffer macht.
- Optionnaly, wenn ich zwei (oder mehr) Dateien gleichzeitig sehen muss, erstelle ich geteilte Fenster, so dass ich eine Registerkarte mit verschiedenen Fenstern habe, die einen Puffer zeigt.
Zum Navigieren zwischen meinem Puffer uns nicht wirklich verwenden :ls
und :b [name or number of buffer]
stattdessen habe ich einige praktischen Zuordnungen erlauben mich zwischen den Puffern zu wechseln mit :bnext
und:bprevious
Diese Art zu arbeiten ist ziemlich gut, aber etwas stört mich: Die Puffer werden zwischen den Registerkarten geteilt.
Wenn ich öffne file1
und file2
in tab1
und file3
in tab2
, wenn tab1
ich es mehrmals benutze, :bnext
sehe ich file3
in dieser Registerkarte, was ich nicht möchte. Der Workflow, den ich erhalten möchte, ist der folgende :
- Starte vim (ich habe einen ersten Tab mit einem Puffer darin):
$ vim foo
- Fügen Sie dieser Registerkarte einen Puffer hinzu:
:e bar
- Öffne einen neuen Tab und wechsle dorthin:
:tabnew
- Öffnen Sie einen neuen Puffer in dieser Registerkarte:
:e baz
- Wenn ich in diesem Puffer bleibe und mache
:bnext
oder:bprevious
ich bleibe imbaz
Puffer (da dies der einzige in diesem Tab ist) - Wenn ich in den vorherigen Tab gehe
:tabprevious
und mehrmals ausführe, wechsle:bnext
ich nur zwischenfoo
undbar
puffere, sehe aber nichtsbaz
Hier kommt also meine Frage: Ist es möglich, einen Satz von Puffern an einen Tab zu binden und vim den Zugriff auf einige Puffer von einem anderen Tab als dem, in dem sie sein sollen, zu verweigern?
Hinweis: Mir ist bewusst, dass die Verwendung von :b [myBuffer]
eine Möglichkeit ist, einen Puffer in einem Tab zu behalten. Wenn ich jedoch 3 oder 4 Dateien zum Bearbeiten habe, habe ich das Gefühl, dass ich meine Zuordnungen schneller verwende als den Puffernamen einzugeben (selbst wenn ich kann) Geben Sie nur einige Zeichen ein, die mit dem Namen des Puffers übereinstimmen .
alt+tab
(oder noch schlimmer das Verwenden der Maus) fühlt sich viel weniger einfach an als das Wechseln der Registerkarte in vim.Antworten:
Mhh, ich habe da draußen kein Plugin gefunden, aber du könntest es selbst schreiben. Sie müssen Vimscript dafür lernen. Ich habe gerade die Funktionalität implementiert, mit der Sie in einem Tab zwischen den Puffern wechseln können (noch keine Löschung). Sie können dies in Ihr vimrc kopieren:
Schließen Sie Ihr vimrc und öffnen Sie es erneut. Um den nächsten Puffer zu finden, verwenden Sie einfach
oder definieren Sie Ihren eigenen Befehl oder Zuordnung. Dies funktioniert, solange Sie eine Registerkarte oder einen Puffer nicht schließen oder löschen. Es funktioniert auch nicht für mehrere Puffer. Es würde etwas mehr Arbeit erfordern, um diese Funktionen hinzuzufügen, aber es ist definitiv machbar.
quelle
Puffer sind global und Sie können nichts dagegen tun, als Ihre eigene Abstraktionsebene über Registerkarten, Fenstern und Puffern zu schreiben. Die Antwort von philolo1 zeigt eine vernünftige Herangehensweise an das Problem, aber Sie finden schnell die Grenzen einer solchen "Lösung" und müssen viele integrierte Funktionen wie
:bufdo
oder die alternative Datei duplizieren ..."Argumente" hingegen können für ein Fenster lokal sein, sodass sie in Ihrem Workflow möglicherweise nützlicher sind als "Puffer" (im engeren Sinne des Wortes):
Argumente sind nicht so flexibel wie Puffer, bieten jedoch möglicherweise eine zuverlässigere Grundlage für Ihren Workflow.
Aber die Arbeit an jedem Projekt in einer eigenen Vim-Instanz ist meiner Meinung nach die einzig praktikable Lösung.
quelle
Mit einiger Verspätung glaube ich, eine (zumindest für mich!) Zufriedenstellende Antwort gefunden zu haben. Sie benötigen zwei von Shougos Plugins:
und eine Schnellzugriffskarte, die anstelle von verwendet wird
:ls
, um nur Puffer auf der aktuellen Registerkarte anzuzeigen (und auszuwählen) .Zum Beispiel so etwas wie:
Sie können jetzt durch die Pufferliste (
j
,k
) des aktuellen Registers navigieren , eine (CR
) auswählen , abbrechen (q
), in den Eingabemodus (Einfügen) wechseln, um die Pufferauswahl schnell durch Eingabe einiger Buchstaben zu filtern, oder die Aktionsliste durch DrückenTab
von öffnen für das aktuell ausgewählte Element (z. B. um den Puffer über dem aktuell aktiven Element zu öffnen ) - kurz, Sie verhalten sich generisch wie "Unite".(Siehe auch
:h unite_default_key_mappings
und Hilfe allgemein vereinen).Und jetzt zum letzten (noch optionalen) Trick. Mit altercmd können Sie Ihren eigenen, tabulatorgesteuerten
ls
Befehl erstellen (basierend auf der oben genannten Unite-Funktionalität):... und jedes Mal
:ls
, wenn Sie drücken , führt Vim stattdessen Ihren Befehl aus.Beachten Sie, dass Sie auch nicht
:bn
oder benötigen:bp
, da die Anzeige und Auswahl der Puffer in den Registerkarten jetzt derselbe Befehl ist.quelle
Ich kann keinen Kommentar abgeben, da mein Konto neu ist. Das tut mir leid, aber ++++ 1 für Strg-Leertaste.
Ich war verkauft, als ich es nach der Hälfte der Hilfe geschafft hatte. Ctrlspace hat eine Struktur wie diese:
Sie können also für jedes Projekt, an dem Sie arbeiten, einen Arbeitsbereich speichern und ihn dann sofort laden, wann immer Sie möchten. Dies bedeutet, dass Sie bei jedem Schließen von vim alle Puffer- und Tabulatoraufteilungen speichern können.
Sie können Ihre Registerkarten auch benennen. Wenn dies nicht ausreicht, können Sie auch Arbeitsverzeichnisse ganz einfach ändern und Lesezeichen für Verzeichnisse erstellen, die Sie häufig verwenden.
Es passt gut zu nerdtree, wenn Sie das benutzen (obwohl Sie ehrlich gesagt wahrscheinlich nicht einmal das Gefühl haben, dass Sie es nach einer Woche mit ctrlspace brauchen).
Betrachten Sie diesen Anwendungsfall:
Sie haben ein Projekt. Es geht darum, Bäume zu pflanzen. Es gibt Obstbäume und Geldbäume. Geldbäume enthalten Dollar und Cent, während Obstbäume Äpfel und Orangen enthalten.
In diesem Beispiel sind Äpfel, Orangen, Dollar und Cent "Puffer".
Mit Ctrlspace können Sie Äpfel und Orangen in einem "Tab" trennen, den Sie als "Frucht" bezeichnen können. Dieses Etikett wird in der Tag-Zeile oben in Ihrem Fenster angezeigt. Ebenso werden Dollar und Cent in einen "Geld" -Reiter eingegeben.
Der Arbeitsbereich "Bäume" speichert diese gesamte Konfiguration und ermöglicht den sofortigen Zugriff, sobald Sie vim öffnen.
Jetzt, da ich mir seiner Existenz bewusst bin, kann ich mir wirklich nicht vorstellen, objektorientierte Entwicklung in vim ohne dieses Plugin durchzuführen. Für alle Fälle ist hier der Link: https://github.com/szw/vim-ctrlspace
quelle
Also endlich beschlossen, mein eigenes Plugin zu erstellen, um mein Problem zu lösen, es ist auf Github verfügbar .
Ich habe die Idee von @ philolo1 benutzt und versucht, sie zu vervollständigen. Während ich diese Antwort schreibe, ist sie noch in Arbeit.
BEARBEITEN Ich behalte das Plugin nicht mehr bei, während sich mein Workflow weiterentwickelt, und ich stellte fest, dass das Binden von Puffern an einen Tab mehr Probleme verursacht, als es löst.
Das Plugin bindet Puffer an Registerkarten: Wenn der Benutzer einen Puffer öffnet, wird er automatisch in der Registerkarte "gespeichert" und kann nicht von einer anderen Registerkarte aus aufgerufen werden.
Die Installation sollte "Plugin Manager-freundlich" sein (zumindest funktioniert es gut mit Vim-Plug und Vundle )
Einige der Hauptmerkmale sind:
:NextBuf
und:PrevBuf
ersetzen:bn
und:bN
einen konsistenten Zustand der Registerkarten zu halten:ListBuf
Ermöglicht es, die Puffer auf ähnliche Weise:ls
aufzulisten, mit der Ausnahme, dass sie in Registerkarten getrennt sind und ein Zeichen den Benutzer leicht erkennen lässt, in welcher Registerkarte er sich gerade befindet.:ChangeBuf
Akzeptieren Sie eine Puffernummer oder einen Puffernamen, um den Puffer und die Registerkarte automatisch zu ändern:CloseBuf
:CloseTab
Für andere Operationen soll der Benutzer in der Lage sein , die Funktionen in integrierten zu verwenden (wie
:tabopen
,:tabnext
usw ...)Für jeden Befehl werden einige Standardzuordnungen bereitgestellt, die durch Hinzufügen
let g:betterTabsVim_map_keys = 0
zu Ihrem einfach deaktiviert werden können.vimrc
.Ich habe auch versucht, eine explizite Hilfedatei (
:h betterTabs.txt
) zu erstellen : Sie ist noch nicht vollständig, aber Benutzer sollten das Minimum finden, um das Plugin zu verwenden.Ich muss noch viel testen, um sicherzustellen, dass das Plugin kein natives Verhalten beeinträchtigt.
Wenn jemand helfen möchte, ist es immer möglich, Probleme auf der Github-Seite zu erstellen oder Pull-Anfragen zu erstellen.
quelle
Schauen Sie sich dieses Plugin an. Mir scheint, es passt perfekt zu Ihren Bedürfnissen. https://github.com/szw/vim-ctrlspace
quelle