14 ответов:
вы хотите что-то вроде
:mksession ~/mysession.vimзатем вы можете отправить этот файл vim, и вы вернете свой старый сеанс:
:source ~/mysession.vimили откройте vim с опцией-S:
$ vim -S ~/mysession.vim
вы можете установить эти параметры сеанса в ваш vimrc. Особенно параметры раздражает, когда вы изменили свой vimrc после сохранения сеанса.
set ssop-=options " do not store global and local values in a session set ssop-=folds " do not store folds
обратите внимание, что :mksession не будет сохранить изменения в любые файлы, которые вы сделали. Я сделал эту ошибку, закрыв vim после сохранения сеанса, предполагая, что я возьмусь оттуда. Но в следующий раз, когда я открыл сеанс, изменения, которые я внес в файлы, исчезли.
Если вы используете NERDTree как ваш проводник/тире, я бы порекомендовал xolox/vim-session плагин вместо встроенной команды mksession. По какой-то причине :mksession не удается восстановить буферы NERDTree. Ваш пробег может отличаться, но я подумал, что поделюсь своим опытом.
если вы хотите автоматизировать процесс без использования каких-либо плагинов, вы могли бы использовать уходи и возвращайся С ВИМ Советы Вики.
каждый раз, когда вы выходите из Vim он будет сохранять текущую сессию под
~/.vim/sessionsи загрузите его снова после открытия Vim. Он также основан на вашем текущем пути, поэтому, если вы откроете Vim из разных каталогов, у вас будут разные сеансы, что очень полезно при работе над разными проектами.просто редактировать ваш
~/.vimrcфайл и добавить следующее: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()даже для новичка этот скрипт несколько легко понять и настроить.
обратите внимание этот скрипт будет работать правильно только для систем Unix (MacOS/Linux), он должен быть адаптирован для работы на Windows.
обновление: добавлять 0xc0de's предложение, вы можете заменить
VimEnterлиния для этих, Если вы хотите Vim для загрузки сессия только если аргументы не указаны:if(argc() == 0) au VimEnter * nested :call LoadSession() endif
есть очень полезный плагин для этой задачи vim-startify который обрабатывает многие другие вещи, такие как недавно открытые файлы и т. д., Он также имеет очень простой интерфейс.
Я использую его с пару дней и до сих пор его работает отлично. Надеюсь, это поможет вам.
есть этот замечательный плагин вызова vim-сессия. Он очень мощный. Чтобы установить его:
cd ~/.vim/bundle git clone https://github.com/xolox/vim-session.gitя сопоставил его функциональность в моем такой:
nnoremap <leader>so :OpenSession nnoremap <leader>ss :SaveSession nnoremap <leader>sd :DeleteSession<CR> nnoremap <leader>sc :CloseSession<CR>теперь в обычном режиме просто типа
<leader>ssи вы увидите команду:SaveSessionтеперь добавьте имя вашего сеанса
:SaveSession namesessionи это все.
когда вы закрываете Vim и снова открываете его просто делай
:OpenSessionи вы увидите, что ваша сессия открыта.
есть много других конфигураций, чтобы добавить в ваш
.vimrcфайл смотрите документацию для примеров: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есть хорошая учебник на YouTube.
поскольку это первый хит в Google для меня (и, вероятно, других) для работы с сессиями в Vim, я решил добавить немного к ответу @mathielo о том, как сделать это автоматически.
Мне нравится его код, но добавление "только если без args" решение, казалось, немного не хватает. Это моя измененная версия:
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заметным изменением здесь является необязательное переопределение. Если вы откроете Vim без опций, он откроет любую существующую сессию и перепишите изменения, внесенные при уходе. Если Vim открывается с параметрами, он будет создавать новый сеанс только в том случае, если он не существует, это означает, что вы можете открывать отдельные файлы в каталоге, в котором есть сеанс, не перезаписывая его. Затем вы можете открыть Vim без параметров для запуска сеанса вместо этого. Если сеанс не существует, он создает новый.
спасибо @mathielo Следуя примеру из @mathielo, я добавил нижеприведенную строку .vimrc для сохранения активного сеанса (если есть):
au VimLeave * if this_session != "" | exe "mksession! ".this_sessionесли вы хотите поставить больше строк, вам нужно использовать endif:
au VimLeave * if v:this_session != "" au VimLeave * exe "mksession! ".this_session au VimLeave * endifвам нужно только сохранить новый сеанс в vim с
:mks [Session filename]и после старта с
$ vim -S [Session filename]vim начнет сеанс, и вам не нужно беспокоиться, чтобы сохранить сеанс каждый раз, когда вы закрываете vim.
если у вас нет активный сеанс .vimrc ничего не будет делать. Как раньше.
это то, что я искал! Еще раз спасибо @mathielo!
лично я просто обертываю Тима Поупа одержимость плагин, чтобы разрешить определение
sessiondirи не набирать путь:let g:sessiondir = $HOME . ".vim/sessions" command! -nargs=1 MkSession call MkSession(<f-args>) function! MkSession(sessionfile) if !isdirectory(g:sessiondir) call mkdir(g:sessiondir, "p") endif exe 'Obsession' g:sessiondir . '/' . a:sessionfile endfunction command! -nargs=1 LoadSession call LoadSession(<f-args>) function! LoadSession(sessionfile) let a:sessionpath = g:sessiondir . a:sessionfile if (filereadable(a:sessionpath)) exe 'source ' a:sessionpath else echo "No session loaded." endif endfunction
вы можете хранить сессии, где вы хотите.
Ex:
:mksession! D:/session.sesэто сохраняет сеанс в диске D.
Это можно открыть, введя
:so D:/session.sesв любом из файлов vim.
Ниже приведен только conf. это действительно сработало для меня. Я взял его у здесь, где вы также можете взять более полную/сложную версию.
set viewoptions+=cursor,folds,slash,unix set viewoptions-=options augroup vimrc autocmd BufWritePost * \ if expand('%') != '' && &buftype !~ 'nofile' \| mkview \| endif autocmd BufRead * \ if expand('%') != '' && &buftype !~ 'nofile' \| silent loadview \| endif augroup END
если вы планируете иметь только 1 сеанс для проекта просто сделать
:mksкоторый создаст
Session.vimфайл в текущем каталоге, а затем открыть сеанс (из того же каталога):vim -Sесли вы измените сеанс и хотите сохранить его:
:mks!это сохраняет сеанс, а не сами файлы!
если вы планируете иметь несколько сессий, Я предпочитаю сохранить их в скрытых файлах в каталоге проекта:
:mks .session-name.vimчтобы открыть его (из того же каталога):
vim -S .session-name.vimсохранить сеанс:
:mks! .session-name.vimтак как сеансы сохраняются в скрытых файлах, для их просмотра не забывайте
-als -a
для управления несколькими сеансами (на основе каталога/РЕПО) я недавно переключился с плагина vim-session на vim-workspace. Его управление сеансами относительно простое и работает довольно хорошо.
Comments