Vi / Vim восстанавливает открытые файлы - PullRequest
44 голосов
/ 13 сентября 2009

Мне было интересно, доступна ли эта общая функция IDE.

Предположим, я открываю много файлов, используя Vim, используя vsplit и split. Затем я закрываю все.

На следующий день я хочу восстановить эти файлы. То есть, восстановите способ, которым они были открыты, не открывая каждый (используя split и vsplit) снова.

Это возможно?

UPDATE:

Использование команд mksession! и source, отображающих команды в файле .vimrc, есть ли способ параметризации отображений для записи определенного файла?

например:

map <F2> :mksession! ~/vim_session @INSERT_HERE<cr> "Save session to @INSERTHERE file

Заранее спасибо

Ответы [ 9 ]

92 голосов
/ 13 сентября 2009

Вы можете сопоставить, используя: mksession и: source, набор ключей для легкого сохранения и восстановления. Вот пример из моего .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
11 голосов
/ 13 сентября 2009

Посмотрите на команду :mksession, чтобы создать session:

Сессия хранит представления для всех окна, плюс глобальные настройки. Вы можете сохранить сеанс и когда вы восстановить его позже, расположение окон выглядит так же. Вы можете использовать сессию быстро переключаться между разными проекты, автоматически загружая файлы, над которыми вы в последний раз работали в этом проект.

2 голосов
/ 28 июля 2016

Лучший подход, который я нашел, это использовать плагин vim-session, http://github.com/xolox/vim-session, который можно установить, добавив:

Plugin 'xolox/vim-session'

на ваш .vimrc, затем:

:PluginInstall

Этот плагин поддерживает несколько сеансов: вы идентифицируете сеанс по имени, а затем управляете им с этим именем. Сессии могут быть добавлены, удалены, обновлены, перечислены, ...

Я использую его уже несколько месяцев; Настоятельно рекомендуется.

2 голосов
/ 18 сентября 2009

Вы можете рассмотреть возможность использования GNU Screen . Вкратце: это диспетчер окон командной строки, который позволяет пользователю получить доступ к нескольким отдельным сеансам терминала внутри одного сеанса терминала. Основным преимуществом для меня является то, что вы можете отсоединить сеанс, закрыть окно терминала, а затем повторно присоединить сеанс и продолжить работу.

1 голос
/ 16 января 2011

Мое решение, как показано ниже, поместите их в файл .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>

Кажется более сложным, но очень полезным, если у вас есть несколько сеансов для сохранения и загрузки.

приписка
Здесь я использую знакомые ярлыки <Ctrl-S> и <Ctrl-O> для сохранения и загрузки сессий. ИМХО, это удобнее, чем протягивать руку к клавише <Fn>. ; -)

1 голос
/ 28 июля 2010

SessionMan http://www.vim.org/scripts/script.php?script_id=2010 предлагает более простую функциональность. Будьте осторожны с miniBufExplorer. Это несовместимо, если вы не используете модифицированную версию, созданную andrew для vim_use (и даже тогда, она совместима только наполовину)

1 голос
/ 13 сентября 2009

Вас может заинтересовать эта книга:

http://www.swaroopch.com/notes/Vim#Download

Это одна из первых нескольких вещей, которые они показывают вам в качестве примера того, насколько велика Vim. ;)

Также <cr> означает возврат каретки.

0 голосов
/ 23 апреля 2015

На основании ответа 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)

  1. Выгрузка всех загруженных в данный момент буферов.
0 голосов
/ 14 января 2014

Я предлагаю использовать vim-obsession . Это намного лучше, чем значение по умолчанию mksession, так как оно остается в стороне от вас, все еще делая то, что вы хотите.

...