Vim - dynamische Liste offener Puffer in einem Fenster

22

Ich habe einige Möglichkeiten untersucht, um eine Liste offener Puffer in Vim zu führen, und einige davon sind sehr gut, aber keiner von ihnen scheint sich so zu verhalten, wie ich es gerne hätte. Es ist sehr wahrscheinlich, dass nichts wie das existiert, was ich will, und es kann nicht schaden, zu fragen.

Ich habe NERDTree in GVim verwendet und ich mag die Idee, die Informationen in ein schmales Fenster auf der linken Seite zu stellen. Ich habe ein praktisches Diagramm zusammengestellt, wie meine Umgebung aussehen soll:

|--------|---------------------------------------|
|        |                                       | 
|        |                                       | 
|NERDTree|           Windows                     | 
|        |                                       | 
|        |                                       | 
|        |                                       | 
|--------|                                       |
|        |                                       | 
|        |                                       | 
|  List  |                                       | 
|   of   |                                       | 
|  Open  |                                       | 
| Buffers|                                       | 
|        |                                       | 
|        |                                       | 
|--------|---------------------------------------|

Meine Frage lautet also: Gibt es eine vim-native oder Plug-in-fähige Möglichkeit, eine Liste der aktuell geöffneten Puffer zu verwalten und aus dieser Liste in einem Fenster, das NERDTree ähnelt, auszuwählen, zu bearbeiten oder zu schließen?

Ich verstehe, dass dieser Ansatz möglicherweise nicht mit der Vorgehensweise von Vim übereinstimmt. Wenn Sie das Gefühl haben, dass mir etwas zum Verwalten mehrerer Dateien in einer Vim-Sitzung fehlt, hinterlassen Sie bitte einen Kommentar mit Vorschlägen!

asfallows
quelle
Ich suche auch nach einer Pufferliste unter (oder über) dem Nerdtree-Bereich. Ich werde versuchen, daran zu denken, diesen Beitrag zu aktualisieren, wenn ich eine gute Lösung finde (aber trotzdem danke für die Nachfrage)
Eric Drechsel

Antworten:

7

Haben Sie das Plugin-Repository von vim.org durchsucht? Es gibt Dutzende von Buffer-Switching-Plugins, aus denen Sie auswählen können, z . B. BufferGator oder SelectBuf . Alternativ werden die meisten von ihnen in einer schönen Liste im Vim-Wiki zusammengestellt .


Wie Sie im letzten Teil Ihrer Frage angedeutet haben, ist diese Art von System nicht jedermanns Sache.

Ich hasse es , all diese Menüs, Schaltflächen und Listen von diesem oder jenem immer geöffnet zu haben: Eine Liste von offenen Puffern ist nur dann nützlich, wenn Sie tatsächlich zu einem anderen Puffer springen müssen. Eine solche Liste offen zu lassen, erscheint mir als Platzverschwendung . Das Gleiche gilt auch für aufgeladene Statuslinien.

Ich verwende das gleiche Plugin, um schnell zwischen den Puffern zu wechseln und das Dateisystem um die Datei, die ich gerade bearbeite, zu erkunden. Wird mit ,f(files) oder ,b(puffers) aufgerufen, verschwindet das Fenster, wenn ich fertig bin. Perfekt. Es gibt andere ähnliche Plugins , probiere sie alle aus, wenn dir diese Idee gefällt.

BEARBEITEN

Ich fühle mich gezwungen, ein animiertes GIF von CtrlP in Aktion hinzuzufügen und die Puffer zu wechseln:

Puffer wechseln mit CtrlP

ENDEDIT

Die Eingeborene :sb <Tab>ist auch hübsch, aber weniger sexy. Es unterstützt keine Fuzzy Matching , aber es hat einige große Vorteile: es wird gebaut und es funktioniert wie :e <Tab>, :vs <Tab>und so weiter.

romainl
quelle
Vielen Dank für Ihre Anregungen. Es sieht so aus, als ob BufferGator und SelectBuf beide der Funktionalität, die ich suche, zumindest nahe kommen, obwohl sie möglicherweise etwas verbessert werden müssen, um die Dinge in Gang zu bringen. Ich weiß die Besorgnis über die Verschwendung von Speicherplatz auf jeden Fall zu schätzen, aber in meinem aktuellen Anwendungsfall ist eine GVim-Instanz stundenlang geöffnet, und es werden nach Bedarf viele Dateien gleichzeitig geöffnet. Unter diesen Umständen ist eine permanente Pufferliste äußerst hilfreich. Ich werde mir jedoch etwas Zeit nehmen, um die typischeren Vim-Ansätze für das Puffermanagement kennenzulernen.
Asfallows
Ich stelle mir vor, Sie arbeiten an einem großen Monitor. Welches System Sie auch wählen, Sie müssen immer noch 1. zur Pufferliste wechseln, 2. einen Puffer auswählen, 3. eine Taste drücken, um dorthin zu springen, ob die Pufferliste bereits sichtbar ist oder nicht. Die Verwendung eines "On-Demand" -Pufferschalters ist daher genauso effektiv wie das Öffnen einer Pufferliste und spart Platz.
Romainl
Ich schätze diese Argumentation auf jeden Fall, weshalb ich mir keine Gedanken über die Möglichkeit mache, dass die genaue Konfiguration, die ich hier beschreibe, möglicherweise nicht möglich ist. Der einzige große Vorteil einer dauerhaften Pufferliste besteht darin, dass 0 Tastatureingaben erforderlich sind, um zu überprüfen, welche Puffer geöffnet sind. Dies ist eine Information, die ich für wertvoll halte und die ich sehr schlecht im Kurzzeitgedächtnis finde. (Und ja, ich arbeite auf einem ziemlich großen Monitor.)
asfallows
@romainl, welchen vimrc-Befehl haben Sie verwendet ,b, um mit ctrlp nach Puffern zu suchen?
Eingeschneit
1
@snowbound, FWIW Ich habe vor einiger Zeit die Verwendung von CtrlP oder ähnlichen Plugins eingestellt. Jedenfalls war mein Befehl nnoremap ,b :CtrlPBuffer<CR>.
Romainl
5

Ich kann den MiniBufExplorer nur empfehlen . Siehe auch eine Alternative zum Minibufexplorer?

Bildschirmfoto

Marco
quelle
Danke für die Antwort - Ich habe MiniBufExplorer gefunden und es sieht so aus, als ob es sehr gut funktioniert, aber es erfüllt nicht die Bedingungen, die ich für die Verwaltung von Puffern beschrieben habe. Wenn sich herausstellt, dass es keinen guten Weg gibt, das zu tun, was ich versuche, oder ich beschließe, dass es nicht der richtige Weg ist, dann steht MBE ganz oben auf meiner Liste, wenn es darum geht, es als Nächstes zu versuchen.
Asfallows
1
Die einzige Bedingung, die nicht erfüllt ist, ist, dass sich die Liste auf der linken Seite befindet. Ich stimme zu, MiniBufExplorerist oben (wo es nicht so viel Platz verschwendet wie links). Oder vielleicht habe ich Ihre Anforderungen falsch verstanden.
Marco
In meinem aktuellen Setup ist die abgebildete Liste der Puffer auf der linken Seite tatsächlich eine Verbesserung der Speicherplatznutzung, da NERDTree jederzeit geöffnet ist, uns aber nicht immer die volle Vertikale bietet. Diesen Platz mit einer Pufferliste zu teilen wäre schön. Es ist erwähnenswert, dass ich GVim auf diese Weise verwende und keine dauerhafte linke Spalte verwenden möchte, wenn ich Vim in der Konsole verwende. Der Großteil meiner Konsolenbenutzung von Vim ist "Datei öffnen, schnell bearbeiten, vim schließen"
asfallows
1

Es gibt eine Möglichkeit, genau das mit dem WinManager- Plugin zu tun . In diesem Screenshot kombiniere ich sowohl NERDTree- als auch MiniBufExpl-Plugins (github: techlivezheng / vim-plugin-minibufexpl, aktuelles Commit atm 349a9fbb) auf der gleichen vertikalen Aufteilung und schalte es mit F4 um. Theoretisch sollte diese Lösung für jede andere Plugin-Kombination funktionieren.

Beispiel für meine .vimrc

"{{{MiniBufExpl config
lass g: miniBufExplVSplit = 20 "vertikal offen
let g: miniBufExplSplitToEdge = 0 "relativ zum vorherigen Fenster geöffnet (NERDTree)
"}}} MiniBufExpl config

"{{{winmanager config
msgstr "registriere die Plugins
let g: NERDTree_title = 'NERD Tree'
let g: MiniBufExpl_title = 'MiniBufExpl'

msgstr "das Layout einstellen
let g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"Handler für NERDTree
Funktion! NERDTree_Start ()
    exec 'NERDTree'
Endfunktion

"Handler für MiniBufExpl
Funktion! MiniBufExpl_Start ()
    exec 'MBEOpen'
Endfunktion

msgstr "Zuordnung zum Umschalten der Aufteilung auf F4
nmap <F4>: WMToggle
"}}} winmanager config

Probleme:

  • NERDTree verwendet nicht den Puffer, den der Winmanager erstellt, sondern öffnet in ...
  • ... daher bleibt der winmanager buffer ungenutzt
  • MiniBufExpl aktualisiert sich beim Wechseln zwischen Puffern nicht richtig

Das Verhalten, das ich erreicht habe, ist alles andere als perfekt, aber es ist ein guter Anfang.

svlasov
quelle