# Vimのセッション管理プラグイン
こんにちは。 ゴリラ.vim (opens new window)を運営しているゴリラです。
Vimを始めたての頃にこちらの記事 (opens new window)でセッション管理プラグイン (opens new window)を作りましたが、最近Vimにポップアップウィンドウが入ったのでその機能を使ってアップデートしてみました。
# セッションとは
Vimの日本語マニュアルより引用
セッションとは、全てのウィンドウのビューとグローバルな設定のことである。セッ ションを保存しておいて、あとからそれを復元することで、各ウィンドウのレイアウト を元に戻すことができる。
つまりセッションを保存すれば開いているファイル、ウィンドウのサイズ、vimrcの設定などがそのまま復元^1できます。かなり強力な機能です。
# セッションの基本
セッションの保存
:mksession {filename}
セッションの復元
:s {filename}
orvim -S {filename}
これだけです、とても簡単です。
# セッション管理プラグイン
vsessionの使い方はREADMEを読んで頂ければと思います。 今回は保存したセッションを読み込むときにポップアップウィンドウで選べるようにしました。
仕組みとしては簡単で、vsessionはデフォルト~/.vim/sessions
配下にセッションファイルを保存する様になっています。
ディレクトリ配下のファイル一覧をreaddir
組み込み関数で取得してそれをポップアップウィンドウに渡します。
" ['blog', 'docker.vim']
let l:sessions = readdir(g:session_path)
2
ポップアップウィンドウを作成に関しては簡易ではあるがこちらの記事 (opens new window)を書いたので軽く読んでおくと理解しやすいかもしれないです。
filter
オプションにpopup_filter_menu
コールバックを指定するとメニュー選択画面を作成できます。では選択したアイテムをどう特定するかというとcallback
オプションを使います。
こちらはウィンドウが閉じられたときに呼ばれるコールバックを指定します。popup_filter_menu
を使用した場合、コールバック関数の第2引数に選択したメニューのインデックス(1番目か2番目か...)が渡ってくるのでそれを利用します。
let s:result = ["banana", "apple", "gorilla"]
" popup_filter_menuではxで画面を閉じ、idxが-1で渡ってくるので
" -1の場合は何もしない
function! s:cb(id, idx) abort
if a:idx !=# -1
return
endif
echo s:result[a:idx-1]
endfunction
" popup_filter_menuを使用する場合
" enter でウィンドウを閉じ選択したメニューのインデックスとウィンドウIDをcallbackで指定した関数にわたす
call popup_create(s:result, {
\ "filter": "popup_filter_menu",
\ "callback": function("s:cb"),
\ 'borderchars': ['-','|','-','|','+','+','+','+'],
\ })
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
基本なロジックは上記通りで、選択したファイルを取得しsource
で読み込むことでセッションを復元しています。
# 最後に
セッションは便利ですね。ぜひプラグイン使ってみてください。
ポップアップウィンドウを駆使すればfilter
とcallback
でカレントディレクトリのファイルをポップアップウィンドウで表示し選択して開くこともできます。
興味ある方はぜひチャレンジしてみてください。