Jak zapisać układ okna, podział i bufor?

56

Mam kilka zadań, nad którymi pracuję w jednym repozytorium. Chciałbym stworzyć „obszary robocze” do pracy nad nimi.

Jeden „obszar roboczy” lub „układ bufora” zawierałby wszystkie pliki, na których muszę pracować, w otwartym układzie, który chcę (używając ^w+v, ^w+sdo podziału okna).

Następnie, kiedy zaczynam pracę nad innym zadaniem, chciałbym zapisać mój obecny układ, przejść do innego, ale chciałbym móc wrócić do poprzednich układów.

Jaki jest najlepszy sposób na osiągnięcie tego?

Nebril
źródło

Odpowiedzi:

48

Możesz użyć vima :mksessioni zapisać każdy „obszar roboczy” do innego pliku, a następnie ponownie otworzyć sesję, używając vim -S session_filejednak, jeśli jesteś otwarty na używanie wtyczki, to uważam, że wtyczka Startify jest dokładnie tym, czego potrzebuję w tego rodzaju scenariuszu: https : //github.com/mhinz/vim-startify

Doskonale radzi sobie z zarządzaniem sesjami w vim i mccvim, a także daje listę ostatnich plików podczas otwierania vima. Automatycznie zmieni również odpowiedni katalog roboczy dla Ciebie. Pozwala także przypinać pliki do ekranu startowego startify, co jest miłe dla łatwego dostępu do takich rzeczy jak twój.vimrc

Craigp
źródło
23

Za pomocą wtyczki vim- obsession tpope możesz łatwo zarządzać sesjami. Jest jak opakowanie dla wbudowanego Vima mksession, ale zapewnia również szereg innych drobiazgów.

Możesz zapisać bieżącą sesję (lub układ bufora), wydając polecenie :Obsess. Jeśli nie podasz argumentu, zapisuje on plik sesji wywoływany Session.vimdomyślnie.

Aby przeładować sesję, użyj vim -S <session-name>albo :source <session-name>jeśli jesteś już w Vimie.

Fajną rzeczą jest to, że nie musisz pamiętać o zapisywaniu sesji przy każdym wyjściu z Vima. Jest automatycznie zarządzany przez wtyczkę.

Inną bardzo ważną cechą vim-obessy jest to, że nie zapisuje ona opcji i map. mksessionprzechwytuje bieżące opcje i mapy, których nie chcesz, jeśli chcesz tylko zapisać układ bufora. Zakłóca także aktualizację wtyczki itp.

Thameera
źródło
Czy może zarządzać wieloma plikami sesji?
Nebril
1
@Nebril It can. Podczas zapisywania sesji użyj formatu :Obsess <session-name>. Użyj konkretnej nazwy sesji, którą chcesz przeładować.
thameera
Odkryłem, że Obsession nie pamięta podziałów pionowych, podczas gdy mksession tak. Ale dopiero dziś się z tym bawię, czy jest coś, za czym tęskniłem?
baxx
1
@baxx Obsession pamięta wszystkie rodzaje podziałów. Może zamknąłeś split przed wyjściem z Vima?
thameera
2
@baxx To jest stare, ale chciałem dodać notatkę na wypadek, gdyby to pomogło komukolwiek innemu. Powodem, dla którego wygląda na to, że obsesja jest zapominanie o podziałach, jest prawdopodobnie to, że porzucasz wszystkie swoje podziały, aby opuścić vim. Oznacza to, że stan końcowy jest twoim ostatnim oknem po zamknięciu vima, to właśnie przechowuje obsesja. Miałem ten sam problem z kartami i odpowiedź brzmi: qa, aby zamknąć wszystkie otwarte okna, podziały, karty. Jeśli ktoś ma lepszą opcję, daj nam znać.
TC0072,
12

Na marginesie chciałbym zauważyć, że zbudowałem kolejną wtyczkę dhruvasagar / vim-prosession jako rozszerzenie tpope / vim-obsession, które jeszcze bardziej usprawnia tworzenie i zarządzanie sesjami vim w scentralizowanym repozytorium jako na konfigurację dla poszczególnych katalogów i ładuje je automatycznie po uruchomieniu vima bez żadnych argumentów w katalogu. Umożliwia także przełączanie między różnymi sesjami dla wygody.

Dhruva Sagar
źródło
Brzmi niesamowicie. Gdybym mógł zarządzać plikami sesji w folderze podobnym do plików cofania i tworzenia kopii zapasowych, aby moje projekty nie były zapchane plikami wymiany, które mogłyby po prostu oszalać.
dragon788
1

Możesz wypróbować wtyczkę vim-workspace , jej funkcje zarządzania sesjami są zautomatyzowane, mają zasięg dla bieżącego katalogu roboczego i są dość proste (wystarczy uruchomić ToggleWorkspacetylko raz).

jaybay
źródło