@ldigas Myślę, że ppl czuje się bardziej komfortowo, znajdując pytanie tutaj (z dużą czcionką, świetnym formatowaniem ...) niż na oldschoolowym forum lub w dokumentacji terminala lub, nie daj Boże, manstrona
puk
6
@ldigas Ja osobiście zawsze mnie przerażały strony man, bo nie wystarczająco głupie rzeczy. Podobnie jak wszystko inne w systemie Linux, ma stromą krzywą uczenia się.
puk
45
@Idigas - myślę, że brakuje Ci punktu, że między zbiorowymi mądrościami nas, Google i zarządzaniem metakonwertowaniem przepełnienia stosu - jest to po prostu lepszy sposób na uzyskanie odpowiedzi - czego potrzebujesz, a nie długiej listy ezoterycznych opcji, także, ponieważ ta strona ilustruje rzeczywiste wrażenia z pułapek i często naprawdę fajne skróty, aby ułatwić Ci życie. Odnosi się to w równym stopniu do niemal każdego podręcznika, na który patrzyłem ( może z wyjątkiem podręcznika php online). Przepełnienie stosu Viva!
ErichBSchulz
2
@ldigas i ludzie mogą z niego korzystać w przyszłości, ponieważ ktoś inny może go potrzebować.
Mansuro,
4
@idigas Myślę, że te pytania są prawdziwe w tym sensie, że początkujący vim nie wie dużo o systemie pomocy i jak z niego korzystać, ale jeśli będzie bardziej doświadczony, będzie wiedział, jak znaleźć drogę w vimie.
Edgar Klerks
Odpowiedzi:
494
Chcesz coś takiego
:mksession ~/mysession.vim
Następnie możesz pobrać ten plik vim i odzyskać starą sesję:
Ooo, a ja prawie zapomniałem, że możesz załadować go z powrotem, wpisując: gvim -S ~ / mysession.vim
Benj
1
Dzięki @Benj. Jestem nowy w vimie. Jak mogę „źródło” w wierszu poleceń?
Jogusa
1
Ups! Przepraszam Benj, miałem na myśli tryb poleceń. Znalazłem to: ``: source ~ / mysession.vim´´.
Jogusa
8
Krótki to: so ~ / file. Jeśli zechcesz źródła bieżącego pliku, proste: więc% wykona pracę za Ciebie.
Daniel Baulig
14
Jeśli nie określisz nazwy pliku sesji, domyślnie będzie zapisywać i odczytywać Session.vim. Więc jeśli chcesz mieć tylko jedną sesję zapisaną w bieżącym katalogu, możesz użyć :mksessionlub :mksz vima, aby zapisać bieżącą sesję i po prostu vim -Sotworzyć ją ponownie.
anishpatel
59
Możesz ustawić te opcje sesji w swoim vimrc. Szczególnie denerwujące są opcje, gdy zmieniłeś vimrc po zapisaniu sesji.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
Świetny! Wczoraj miałem dokładnie ten problem. Wielkie dzięki!
Jogusa
40
Zauważ, że: mksession nie zapisze zmian w żadnym utworzonym pliku. Popełniłem ten błąd zamykając vima po zapisaniu sesji, zakładając, że zacznę od tego. Ale kiedy następnym razem otworzyłem sesję, zmiany, które wprowadziłem do plików, zniknęły.
Powinno to przynieść każdą odpowiedź związaną z :mksession.
Morgan Wilde
1
tak, prawdopodobnie chcesz śledzić:wqa
JonnyRaa
11
lub tylko :xajeden klawisz mniej. Tak!
robin
Możesz także ustawić vim, aby automatycznie zapisywał pliki (jeśli ci się podobają) w twoim .vimrc: vimrc au FocusLost * silent! wa To automatycznie zapisuje się za każdym razem, gdy bufor przestanie być aktywny.
grego
32
Jeśli używasz NERDTree jako eksploratora plików / dash, poleciłbym wtyczkę xolox / vim-session zamiast wbudowanej komendy: mksession. Z jakiegoś powodu: mksession nie przywraca buforów NERDTree. Twój przebieg może się różnić, ale pomyślałem, że podzielę się moim doświadczeniem.
W przypadku macvim muszę zapewnić: let g:nerdtree_tabs_open_on_gui_startup=0i let g:nerdtree_tabs_open_on_new_tab=0aby xolox / vim-session działał.
Nianliang
18
Jeśli chcesz zautomatyzować proces bez korzystania z żadnych wtyczek, możesz skorzystać z funkcji Przejdź i wróć z Wiki Vim Tips .
Za każdym razem, gdy wyjdziesz z Vima, zapisze bieżącą sesję ~/.vim/sessionsi załaduje ją ponownie po otwarciu Vima. Opiera się również na twojej bieżącej ścieżce, więc jeśli otworzysz Vima z różnych katalogów, będziesz miał różne sesje, co jest bardzo przydatne podczas pracy nad różnymi projektami.
Po prostu edytuj ~/.vimrcplik i dodaj:
function! MakeSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()
Nawet dla początkujących ten skrypt jest dość łatwy do zrozumienia i dostosowania.
Uwaga: ten skrypt będzie działał poprawnie tylko w systemach Unix (MacOS / Linux), należy go dostosować do pracy w systemie Windows.
AKTUALIZACJA: Dodając sugestię 0xc0de , możesz zastąpić VimEnterwiersz tymi, jeśli chcesz, aby Vim ładował sesję tylko wtedy, gdy nie podano argumentów :
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
Możesz chcieć otworzyć sesję tylko wtedy, gdy nie podano argumentu dla vima, np. if argc() == 0 au VimEnter * nested :call LoadSession() end
0xc0de,
Dzięki @ 0xc0de, świetna sugestia (nawet sam zacząłem z niej korzystać). Zaktualizowałem odpowiedź.
mathielo,
jak bym to zmodyfikował, aby po otwarciu vima z argumentami nie zapisał on również tej sesji
Dr Manhattan
bardzo dobrze, ale `exe 'source' b: sessionfile` potrzebuje tam kropki? problem polega na tym, że sesja autoloadu zależy od bieżącego katalogu domowego (get by pwd). Jak ustawić go jako ostatni katalog roboczy przed wyjściem z vima? aby mógł załadować ostatnią sesję roboczą, a nie sesję poniżej ~/?
van abel
Jeśli chcesz mieć sesje, ale nadal otwierasz pojedyncze pliki w katalogu bez nadpisywania, sprawdź moją zmodyfikowaną wersję w osobnej odpowiedzi: stackoverflow.com/questions/1642611/…
PMunch
6
Istnieje bardzo przydatna wtyczka do tego zadania vim-startify, która obsługuje wiele innych rzeczy, takich jak ostatnio otwierane pliki itp. Ma również bardzo łatwy interfejs.
Używam go od kilku dni i do tej pory działa idealnie. Mam nadzieję, że to ci pomoże.
Ponieważ jest to dla mnie (i prawdopodobnie innych) pierwsze trafienie w Google dotyczące pracy z sesjami w Vimie, postanowiłem dodać trochę do odpowiedzi @ mathielo na temat tego, jak to zrobić automatycznie.
Podobał mi się jego kod, ale trochę brakowało dodania rozwiązania „tylko jeśli bez argumentów”. To jest moja zmodyfikowana wersja:
function! MakeSession(overwrite)
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
if a:overwrite == 0 && !empty(glob(b:filename))
return
endif
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
if(argc() == 0)
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession(1)
else
au VimLeave * :call MakeSession(0)
endif
Istotną zmianą tutaj jest opcjonalne zastąpienie. Jeśli otworzysz Vima bez opcji, otworzy on każdą istniejącą sesję i zastąpi zmiany dokonane podczas wychodzenia. Jeśli Vim zostanie otwarty z opcjami, utworzy nową sesję tylko wtedy, gdy żadna nie istnieje, oznacza to, że możesz otwierać pojedyncze pliki w katalogu, który ma sesję bez nadpisywania. Następnie możesz otworzyć Vima bez opcji, aby zamiast tego uruchomić sesję. Jeśli sesja nie istnieje, tworzona jest nowa.
Właśnie wypróbowałem powyższe rozwiązanie w Neovim 0.2.2 i umieściłem twój fragment kodu, $HOME/.vim/plugin/sessions.vimale nie zapisuje on plików sesji. ¯ \ _ (ツ) _ / ¯
Teraz w trybie normalnym po prostu wpisz, <leader>ssa zobaczysz takie polecenie
:SaveSession
Teraz dodaj nazwę swojej sesji
:SaveSession namesession
i to wszystko.
Kiedy zamkniesz Vima i otworzysz go ponownie, po prostu zrób to
:OpenSession
i zobaczysz swoją sesję otwartą.
Istnieje wiele innych konfiguracji do dodania w .vimrcpliku, patrz przykłady w dokumentacji:
let g:session_directory = "~/.vim/tmp/session" // the directory must be created before the sessions will be saved there
let g:session_autoload = "no" // automatic reload sessions
let g:session_autosave = "no" // autosave
let g:session_command_aliases = 1
miałem określone problemy z wtyczką i sesjami Airline. Przejście na korzystanie z Obsession naprawiło problemy, było to niesamowite odkrycie po tygodniach zmagań. Zobacz github.com/vim-airline/vim-airline/issues/…
icc97
1
Dzięki @mathielo Zgodnie z przykładem z @mathielo dodałem poniższy wiersz do .vimrc, aby zapisać aktywną sesję (jeśli istnieje):
au VimLeave * if this_session != "" | exe "mksession! ".this_session
Jeśli chcesz wstawić więcej linii, musisz użyć endif:
au VimLeave * if v:this_session != ""
au VimLeave * exe "mksession! ".this_session
au VimLeave * endif
Musisz tylko zapisać nową sesję w vimie
:mks [Session filename]
i po rozpoczęciu z
$ vim -S [Session filename]
vim rozpocznie sesję i nie musisz się martwić, aby zapisać sesję za każdym razem, gdy zamkniesz vima.
Jeśli nie masz aktywnej sesji .vimrc nic nie zrobi. Jak wcześniej.
Właśnie tego szukałem! Jeszcze raz dziękuję @mathielo!
Aby zarządzać wieloma sesjami (na podstawie katalogu / repo), niedawno przełączyłem się z wtyczki vim-session na vim-workspace . Zarządzanie sesjami jest stosunkowo proste i działa całkiem dobrze.
man
stronaOdpowiedzi:
Chcesz coś takiego
Następnie możesz pobrać ten plik vim i odzyskać starą sesję:
lub otwórz vim z opcją -S:
źródło
Session.vim
. Więc jeśli chcesz mieć tylko jedną sesję zapisaną w bieżącym katalogu, możesz użyć:mksession
lub:mks
z vima, aby zapisać bieżącą sesję i po prostuvim -S
otworzyć ją ponownie.Możesz ustawić te opcje sesji w swoim vimrc. Szczególnie denerwujące są opcje, gdy zmieniłeś vimrc po zapisaniu sesji.
źródło
Zauważ, że: mksession nie zapisze zmian w żadnym utworzonym pliku. Popełniłem ten błąd zamykając vima po zapisaniu sesji, zakładając, że zacznę od tego. Ale kiedy następnym razem otworzyłem sesję, zmiany, które wprowadziłem do plików, zniknęły.
źródło
:mksession
.:wqa
:xa
jeden klawisz mniej. Tak!.vimrc
:vimrc au FocusLost * silent! wa
To automatycznie zapisuje się za każdym razem, gdy bufor przestanie być aktywny.Jeśli używasz NERDTree jako eksploratora plików / dash, poleciłbym wtyczkę xolox / vim-session zamiast wbudowanej komendy: mksession. Z jakiegoś powodu: mksession nie przywraca buforów NERDTree. Twój przebieg może się różnić, ale pomyślałem, że podzielę się moim doświadczeniem.
źródło
let g:nerdtree_tabs_open_on_gui_startup=0
ilet g:nerdtree_tabs_open_on_new_tab=0
aby xolox / vim-session działał.Jeśli chcesz zautomatyzować proces bez korzystania z żadnych wtyczek, możesz skorzystać z funkcji Przejdź i wróć z Wiki Vim Tips .
Za każdym razem, gdy wyjdziesz z Vima, zapisze bieżącą sesję
~/.vim/sessions
i załaduje ją ponownie po otwarciu Vima. Opiera się również na twojej bieżącej ścieżce, więc jeśli otworzysz Vima z różnych katalogów, będziesz miał różne sesje, co jest bardzo przydatne podczas pracy nad różnymi projektami.Po prostu edytuj
~/.vimrc
plik i dodaj:Nawet dla początkujących ten skrypt jest dość łatwy do zrozumienia i dostosowania.
Uwaga: ten skrypt będzie działał poprawnie tylko w systemach Unix (MacOS / Linux), należy go dostosować do pracy w systemie Windows.
AKTUALIZACJA: Dodając sugestię 0xc0de , możesz zastąpić
VimEnter
wiersz tymi, jeśli chcesz, aby Vim ładował sesję tylko wtedy, gdy nie podano argumentów :źródło
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
). Jak ustawić go jako ostatni katalog roboczy przed wyjściem z vima? aby mógł załadować ostatnią sesję roboczą, a nie sesję poniżej~/
?Istnieje bardzo przydatna wtyczka do tego zadania vim-startify, która obsługuje wiele innych rzeczy, takich jak ostatnio otwierane pliki itp. Ma również bardzo łatwy interfejs.
Używam go od kilku dni i do tej pory działa idealnie. Mam nadzieję, że to ci pomoże.
źródło
Ponieważ jest to dla mnie (i prawdopodobnie innych) pierwsze trafienie w Google dotyczące pracy z sesjami w Vimie, postanowiłem dodać trochę do odpowiedzi @ mathielo na temat tego, jak to zrobić automatycznie.
Podobał mi się jego kod, ale trochę brakowało dodania rozwiązania „tylko jeśli bez argumentów”. To jest moja zmodyfikowana wersja:
Istotną zmianą tutaj jest opcjonalne zastąpienie. Jeśli otworzysz Vima bez opcji, otworzy on każdą istniejącą sesję i zastąpi zmiany dokonane podczas wychodzenia. Jeśli Vim zostanie otwarty z opcjami, utworzy nową sesję tylko wtedy, gdy żadna nie istnieje, oznacza to, że możesz otwierać pojedyncze pliki w katalogu, który ma sesję bez nadpisywania. Następnie możesz otworzyć Vima bez opcji, aby zamiast tego uruchomić sesję. Jeśli sesja nie istnieje, tworzona jest nowa.
źródło
$HOME/.vim/plugin/sessions.vim
ale nie zapisuje on plików sesji. ¯ \ _ (ツ) _ / ¯Jest taka cudowna sesja wywołania wtyczki vim-session . Jest bardzo potężny. Aby zainstalować:
Zamapowałem jego funkcjonalność w moim
.vimrc
pliku w następujący sposób:Teraz w trybie normalnym po prostu wpisz,
<leader>ss
a zobaczysz takie polecenieTeraz dodaj nazwę swojej sesji
i to wszystko.
Kiedy zamkniesz Vima i otworzysz go ponownie, po prostu zrób to
i zobaczysz swoją sesję otwartą.
Istnieje wiele innych konfiguracji do dodania w
.vimrc
pliku, patrz przykłady w dokumentacji:Jest dobry tutorial YouTube .
źródło
Osobiście po prostu owijam wtyczkę Obsesji Tima Pope'a, aby umożliwić zdefiniowanie
sessiondir
i unikanie wpisywania ścieżki:źródło
Dzięki @mathielo Zgodnie z przykładem z @mathielo dodałem poniższy wiersz do .vimrc, aby zapisać aktywną sesję (jeśli istnieje):
Jeśli chcesz wstawić więcej linii, musisz użyć endif:
Musisz tylko zapisać nową sesję w vimie
i po rozpoczęciu z
vim rozpocznie sesję i nie musisz się martwić, aby zapisać sesję za każdym razem, gdy zamkniesz vima.
Jeśli nie masz aktywnej sesji .vimrc nic nie zrobi. Jak wcześniej.
Właśnie tego szukałem! Jeszcze raz dziękuję @mathielo!
źródło
:q
zamiast:bd
... Dzięki!Jeśli planujesz mieć tylko 1 sesję dla projektu, po prostu zrób
który utworzy
Session.vim
plik w bieżącym katalogu, a następnie otworzy sesję (z tego samego katalogu):Jeśli zmienisz sesję i chcesz ją zapisać:
Jeśli planujesz mieć wiele sesji , wolę zapisać je w ukrytych plikach w katalogu projektu:
Aby go otworzyć (z tego samego katalogu):
Zapisz sesję:
Ponieważ sesje są zapisywane w ukrytych plikach, aby je wyświetlić, nie zapomnij
-a
źródło
Możesz przechowywać sesję w dowolnym miejscu.
Dawny:
Spowoduje to zapisanie sesji na dysku D.
Można to otworzyć, pisząc
w dowolnym pliku vim.
źródło
Poniżej znajduje się jedyny conf. to naprawdę dla mnie zadziałało. Wziąłem go stąd , gdzie możesz również wziąć bardziej kompletną / złożoną wersję.
źródło
Aby zarządzać wieloma sesjami (na podstawie katalogu / repo), niedawno przełączyłem się z wtyczki vim-session na vim-workspace . Zarządzanie sesjami jest stosunkowo proste i działa całkiem dobrze.
źródło