web-dev-qa-db-ja.com

Vi / Vimで開いたファイルを復元する

この一般的なIDE機能が利用できるかどうか疑問に思っていました。

vsplitsplitを使用して、Vimを使用して多くのファイルを開くとします。次に、すべてを閉じます。

翌日、それらのファイルを復元したいと思います。つまり、それぞれを(splitvsplitを使用して)再度開く必要なく、それらが開かれた方法を回復します。

それは可能ですか?

更新:

mksession!およびsourceコマンドを使用して、.vimrcファイル内のマッピングコマンドを実行します。マッピングをパラメータ化して特定のファイルを書き込む方法はありますか?

例えば:

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

前もって感謝します

46
Tom

:mksessionと:sourceを使用して一連のキーにマッピングし、保存と復元を簡単に行うことができます。以下は、F2とF3を使用する.vimrcの例です。

map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2
map <F3> :source ~/vim_session <cr>     " And load session with F3
94
hgmnz

:mksession コマンド、作成 session

セッションは、すべてのウィンドウのビューとグローバル設定を保持します。セッションを保存でき、後で復元したときにウィンドウのレイアウトは同じに見えます。セッションを使用すると、さまざまなプロジェクトをすばやく切り替えて、そのプロジェクトで最後に作業していたファイルを自動的にロードできます。

11
CMS

私が見つけた最良のアプローチは、vim-sessionプラグイン http://github.com/xolox/vim-session を使用することです。

Plugin 'xolox/vim-session'

あなたの.vimrcに、続いて:

:PluginInstall

このプラグインは複数のセッションをサポートします。名前でセッションを識別し、その名前で管理します。セッションは、追加、削除、更新、一覧表示などができます。

私はこれを数か月間使用しています。強くお勧めします。

2
JESii

GNU Screen の使用を検討できます。つまり、ユーザーが単一のターミナルセッション内で複数の個別のターミナルセッションにアクセスできるようにするコマンドラインウィンドウマネージャーです。私にとっての主な利点は、セッションを切り離し、ターミナルウィンドウを閉じ、後でセッションを再接続して作業を続けることができることです。

2
klokop

私の解決策は以下のとおりです。それらを.vimrcファイルに入れます。 HTH。

" 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
jtuki

あなたはこの本に興味があるかもしれません:

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

これは、Vimの素晴らしさを示す最初のいくつかの例の1つです。 ;)

また、<cr>はキャリッジリターンの略です。

1
jluebbert

SessionMan http://www.vim.org/scripts/script.php?script_id=201 より簡単な機能を提供します。 miniBufExplorerに注意してください。 andmがvim_useで作成した修正バージョンを使用しない限り、互換性はありません(それでも、互換性は半分しかありません)。

1
autodidakto

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
Chris

vim-obsession を使用することをお勧めします。デフォルトのmksessionよりもはるかに優れており、必要なことを行っている間は邪魔になりません。

0
r.v