Восстановление открытых файлов через Vi / Vim
Вопрос
Мне было интересно, доступна ли эта распространенная функция IDE.
Предположим, я открываю много файлов с помощью Vim, используя vsplit
и split
.Затем я все закрываю.
На следующий день я хочу восстановить эти файлы.То есть восстановите способ, которым они были открыты, без необходимости открывать каждый из них (используя split
и vsplit
) еще раз.
Возможно ли это?
Обновить:
Используя mksession!
и source
команды, отображающие команды в .vimrc
файл, есть ли способ параметризовать сопоставления таким образом, чтобы записать конкретный файл?
например:
map <F2> :mksession! ~/vim_session @INSERT_HERE<cr> "Save session to @INSERTHERE file
Заранее спасибо
Решение
Вы можете сопоставить использование :mksession и :source с набором ключей для удобства сохранения и восстановления.Вот пример из my .vimrc , который использует F2 и F3:
map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2
map <F3> :source ~/vim_session <cr> " And load session with F3
Другие советы
Взгляните на :mksession
команда, позволяющая создать session
:
Сеанс сохраняет представления для всех windows, плюс глобальные настройки.Вы можете сохранить сеанс, и когда вы восстановите его позже, макет окна будет выглядеть так же.Вы можете использовать сеанс для быстрого переключения между различными проектами, автоматически загружая файлы, с которыми вы в последний раз работали в этом проекте.
Вы могли бы рассмотреть возможность использования Экран GNU.Короче говоря:это менеджер окон командной строки, который позволяет пользователю получать доступ к нескольким отдельным сеансам терминала внутри одного сеанса терминала.Главное преимущество для меня заключается в том, что вы можете отсоединить сеанс, закрыть окно вашего терминала, а позже повторно подключить сеанс и продолжить работу.
Лучший подход, который я нашел, - это использовать плагин vim-session, http://github.com/xolox/vim-session который может быть установлен путем добавления:
Plugin 'xolox/vim-session'
в ваш .vimrc, за которым следует:
:PluginInstall
Этот плагин поддерживает несколько сеансов:вы идентифицируете сеанс по имени, а затем управляете им с помощью этого имени.Сеансы могут быть добавлены, удалены, обновлены, перечислены...
Я пользуюсь им уже несколько месяцев;настоятельно рекомендуется.
Возможно, вас заинтересует эта книга:
http://www.swaroopch.com/notes/Vim#Download
Это одна из первых вещей, которые они показывают вам в качестве примера того, насколько хорош Vim.;)
Также, <cr>
расшифровывается как Возврат каретки.
Сессионный мастер http://www.vim.org/scripts/script.php?script_id=2010 предлагает более простую функциональность.Будьте осторожны с MiniBufExplorer.Это несовместимо, если вы не используете модифицированную версию, созданную andrew на vim_use (и даже тогда она совместима только наполовину).
Мое решение, как показано ниже, поместите их в файл .vimrc.ХТХ.
" session related.
" Default session is located `~/.session_'. The suffix `_' is a dirty
" solution, just like the one-element tuple `(tuple_eliment,)' in Python..
cnoremap <C-O> source ~/.session_
cnoremap <C-S> mksession! ~/.session_
nnoremap <silent> <C-S><C-S> :mksession! ~/.session_ <CR>
Кажется, это более сложно, но очень полезно, если у вас есть несколько сеансов для сохранения и загрузки.
P.S.
Здесь я перенимаю знакомый <Ctrl-S>
и <Ctrl-O>
ярлыки для сохранения и загрузки сеансов.ИМХО, это удобнее, чем протягивать руку к <Fn>
Клавиша.;-)
Я предлагаю использовать vim-одержимость.Это намного лучше, чем по умолчанию mksession
поскольку это остается в стороне от вас, все еще делая то, что вы хотите.
Основано на ответе hgmnz и расширяется для обновления.
Вы можете отбросить <cr>
из сопоставления, и это переведет вас в командный режим для завершения выполнения команды.
map <F2> :mksession! ~/<will stop here and you can type>
При переходе в командный режим вы можете ввести %, затем нажать tab, и он развернется до абсолютного пути текущего файла, вы также можете ввести %: p: h и нажать tab, чтобы развернуться до каталога текущего файла.
Вы также можете сохранять каждый сеанс в рабочий каталог, а используя локальные буферные каталоги, вы можете иметь несколько сеансов для рабочих каталогов.
map <F2> :mksession! ./.vim_sessions <cr> " Will save session to current buffers directory.
map <F3> :source ./.vim_sessions <cr>
:lcd " Changes the current's buffer directory
Также будьте осторожны с перезагрузкой сеансов, так как это выгружает все текущие загруженные буферы (http://vimdoc.sourceforge.net/htmldoc/starting.html#%3Amksession)
- Выгружает все загруженные в данный момент буферы.