Vim - dynamiczna lista otwartych buforów w oknie

22

Sprawdziłem kilka sposobów utrzymywania listy otwartych buforów w Vimie, a niektóre z nich są bardzo dobre, ale żaden z nich nie zachowuje się tak, jak bym chciał. Jest bardzo możliwe, że nie istnieje nic takiego, czego chcę, i pytanie nie może zaszkodzić.

Korzystam z NERDTree w GVim i podoba mi się pomysł umieszczenia informacji w smukłym oknie po lewej stronie. Przygotowałem przydatny schemat tego, jak chciałbym, aby moje środowisko wyglądało:

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

Moje pytanie brzmi więc: czy istnieje sposób na natywną obsługę vim lub obsługę wtyczek, aby utrzymywać listę aktualnie otwartych buforów i wybierać / edytować / zamykać z tej listy w oknie podobnym do NERDTree?

Rozumiem, że takie podejście może być niezgodne ze sposobem działania Vima , a jeśli czujesz, że brakuje mi czegoś do zarządzania wieloma plikami w sesji Vima, zostaw komentarz z sugestiami!

przedpola
źródło
Szukam także listy buforów poniżej (lub powyżej) okienka nerdtree. Spróbuję zapamiętać, aby zaktualizować ten post, jeśli znajdę dobre rozwiązanie (ale dziękuję, że mimo to poprosiłem)
Eric Drechsel

Odpowiedzi:

7

Czy przeszukiwałeś repozytorium wtyczek vim.org? Istnieje wiele wtyczek do przełączania buforów, z których możesz wybierać między innymi BufferGator lub SelectBuf . Alternatywnie, większość z nich jest skompilowana na ładnej liście na wiki Vima .


Jak wspomniałeś w ostatniej części pytania, taki system nie przypadnie do gustu każdemu.

I hate posiadające wszystkie te menu, przycisków i list to czy tamto otwarte przez cały czas: lista otwartych buforów jest przydatna tylko gdy rzeczywiście trzeba przeskoczyć do innego bufora, pozostawiając taką listę Rozwinąć wydaje się stratą przestrzeni do mnie . To samo można również zastosować do linii statusu doładowania.

Używam tej samej wtyczki do szybkiego przełączania między buforami i szybkiego odkrywania systemu plików wokół aktualnie edytowanego pliku. Wywołane z ,f(plikami) lub ,b(buforami), okno znika, kiedy skończę. Doskonały. Istnieją inne podobne wtyczki , wypróbuj je wszystkie, jeśli podoba Ci się ten pomysł.

EDYTOWAĆ

Czuję się zmuszony do dodania animowanego pliku GIF CtrlP w akcji, przełączając bufory:

Przełączanie buforów za pomocą CtrlP

ENDEDIT

Tubylec :sb <Tab>jest również dość schludny, ale mniej seksowny. To nie obsługuje dopasowania rozmyte, ale ma kilka dużych zalet: jest zbudowany i jak to działa :e <Tab>, :vs <Tab>i tak dalej.

romainl
źródło
Dziękuję za twoje sugestie. Wygląda na to, że zarówno BufferGator, jak i SelectBuf są przynajmniej zbliżone do funkcjonalności, której szukam, chociaż mogą potrzebować drobnych poprawek, aby wszystko działało. Zdecydowanie doceniam troskę o marnowanie miejsca, ale w moim obecnym przypadku użycia mam jedną instancję GVim otwartą przez wiele godzin z wieloma plikami naraz, przeskakując między nimi w razie potrzeby. W takich okolicznościach lista trwałych buforów jest niezwykle pomocna. Poświęcę jednak trochę czasu na poznanie bardziej typowych podejść Vima do zarządzania buforami.
odlotów
Wyobrażam sobie, że pracujesz na dużym monitorze. Niezależnie od tego, jaki system wybierzesz, nadal musisz 1. przełączyć się na listę buforów, 2. wybrać bufor, 3. nacisnąć klawisz, aby przejść do tego, czy lista buforów jest już widoczna, czy nie. Korzystanie z przełącznika bufora „na żądanie” jest więc równie skuteczne, jak utrzymywanie otwartej listy buforów i oszczędza miejsce.
romainl
Zdecydowanie doceniam to rozumowanie, dlatego nie boję się zbytnio możliwości, że opisana tutaj konfiguracja może nie być możliwa. Jedyną główną zaletą trwałej listy buforów jest to, że potrzeba 0 naciśnięć klawiszy, aby sprawdzić, które bufory są otwarte, co jest cenną informacją, a także bardzo źle się trzymam w pamięci krótkotrwałej. (I tak, pracuję na dość dużym monitorze.)
od
@romainl, jakiej komendy vimrc użyłeś do mapowania w ,bcelu wyszukiwania buforów za pomocą ctrlp?
ośnieżony
1
@snowbound, FWIW Przestałem używać CtrlP lub innych podobnych wtyczek jakiś czas temu. W każdym razie moje polecenie było nnoremap ,b :CtrlPBuffer<CR>.
romainl
5

Mogę gorąco polecić MiniBufExplorer . Zobacz także alternatywę dla minibufexplorer?

Zrzut ekranu

Marco
źródło
Dzięki za odpowiedź - znalazłem MiniBufExplorer i wygląda na to, że jest wyjątkowo dobry w tym, co robi, ale nie spełnia opisanych przeze mnie warunków dotyczących zarządzania buforami. Jeśli okaże się, że nie ma dobrego sposobu na zrobienie tego, co próbuję, lub zdecyduję, że nie jest to właściwy sposób, MBE jest dość wysoko na mojej liście, aby spróbować kolejnych rzeczy.
odlotów
1
Jedynym warunkiem, który nie jest spełniony, jest to, że lista znajduje się po lewej stronie. Zgadzam się, MiniBufExplorerjest na górze (gdzie nie marnuje tyle miejsca, jak po lewej). A może źle zrozumiałem twoje wymagania.
Marco
W mojej obecnej konfiguracji posiadanie listy buforów po lewej stronie, tak jak to pokazano, w rzeczywistości poprawia wykorzystanie przestrzeni, ponieważ NERDTree jest otwarte przez cały czas, ale nie zawsze jest w pełni pionowe. Dzielenie tego miejsca z listą buforów byłoby fajne. Warto zauważyć, że w ten sposób korzystam z GVim i nie chciałbym trwałej lewej kolumny, jeśli korzystam z Vima w konsoli. Większość korzystania z Vima na konsoli to „otwórz plik, dokonaj szybkiej edycji, zamknij vim”
asfallows
1

Jest sposób na zrobienie tego dokładnie za pomocą wtyczki winmanager . Na tym zrzucie ekranu łączę wtyczki NERDTree i MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, najnowsze zatwierdzenie atm 349a9fbb) w tym samym pionowym podziale i przełączam go za pomocą F4. Teoretycznie to rozwiązanie powinno działać z każdą inną kombinacją wtyczek.

Przykład mojego .vimrc

„{{{Konfiguracja MiniBufExpl
niech g: miniBufExplVSplit = 20 "otwiera się w pionie
let g: miniBufExplSplitToEdge = 0 "otwórz względem poprzedniego okna (NERDTree)
"}}} Konfiguracja MiniBufExpl

„{{{konfiguracja winmanager
„zarejestruj wtyczki
let g: NERDTree_title = 'Drzewo NERD'
let g: MiniBufExpl_title = 'MiniBufExpl'

„ustaw układ
let g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"moduł obsługi dla NERDTree
funkcjonować! NERDTree_Start ()
    exec „NERDTree”
funkcja końcowa

„moduł obsługi MiniBufExpl
funkcjonować! MiniBufExpl_Start ()
    exec „MBEOpen”
funkcja końcowa

”mapping, aby przełączyć podział na F4
nmap <F4>: WMToggle
"}}} konfiguracja winmanager

Problemy:

  • NERDTree nie używa bufora, który tworzy winmanager, ale otwiera się sam ...
  • ... dlatego bufor winmanager pozostaje nieużywany
  • MiniBufExpl nie aktualizuje się poprawnie podczas przeskakiwania między buforami

Zachowanie, które osiągnąłem, jest dalekie od ideału, ale to dobry początek.

Svlasov
źródło