SidePanel.vimを公開しました
どんなプラグイン?
サイドバーっぽい機能を提供するvimのプラグインを一元管理するプラグインです。
ブラウザやファイラーやIDEなどでよくあるサイドバー、便利ですよね。VimでもNERDTreeやTagbarやGundo、VimFilerなどを使うことで同じような機能が得られます。しかし、それぞれが独立したプラグインのため、これらのプラグインを複数使おうとすると悲しいことが起こります。
(例)
これは極端な例で、実際にはこまめに閉じたりすればいいわけですが、それでも横のWindowが閉じたり開いたりすることで編集中のバッファが左右にずれるのは悲しいものです。また、プラグインが異なると幅の設定もそれぞれ異なってしまったり、あるいはきちんと設定しても使っているうちに幅が変わったりして悲しいものです。
ということで
これらのプラグインをまとめて管理するプラグインとしてSidePanel.vimを作りました。
今の所できることは、
- 一つのプラグインのウィンドウだけを表示
- ウィンドウの幅の一元管理
- ウィンドウの位置(左右)の一元管理
です。
デモ
一つのプラグインのウィンドウだけを表示
ウィンドウの幅変更
ウィンドウの位置変更
使い方
現時点で対応しているプラグインは以下の4つです。
VimFilerは一応動きますが、私が常用していないので細かい所でバグってるかもしれません。特に幅の管理が怪しいです。taglistも一応設定を入れておいたので動きますが、個人的には更新の活発なTagbarの利用をおすすめします。
インストール
VimのプラグインをNeoBundleで管理している方は、.vimrc
に
NeoBundle 'miyakogi/sidepanel.vim'
と追加して:NeoBundleInstall
でインストールできます。他に、管理したいプラグインもインストールしてください。
設定
そして、.vimrcで管理対象にしたいプラグインを以下のように指定してください。指定されていないプラグインは無視されます。管理対象に含めたくないプラグインは、該当行を削除またはコメントアウトで除外できます。
" 有効にするプラグインを指定 let g:sidepanel_config = {} let g:sidepanel_config['nerdtree'] = {} let g:sidepanel_config['tagbar'] = {} let g:sidepanel_config['gundo'] = {} let g:sidepanel_config['vimfiler'] = {} let g:sidepanel_config['taglist'] = {} " オプションで表示位置と幅の設定ができます。 " 表示位置("left"または"right"、デフォルトは"left") let g:sidepanel_pos = "left" " 幅(default: 32) let g:sidepanel_width = 26
※) このプラグインは管理対象のプラグインの設定を一部上書きしてしまうので、利用者の意図せぬ動作を防ぐために管理対象のプラグインを設定で明示することにしました。今後変更するかもしれません。
使い方
Vimを起動したら:SidePanel
でプラグインの一覧が表示されます。開きたいプラグインのところでエンターを押せば開きます。
直接特定のプラグインを開きたい場合は:SidePanel nerdtree
などのように指定してください。私は以下のマッピングをして使っています。
nnoremap <silent> <Space>e :<C-u>SidePanel nerdtree<CR> nnoremap <silent> <Space>t :<C-u>SidePanel tagbar<CR> " nnoremap <silent> <Space>g :<C-u>SidePanel gundo<CR> " nnoremap <silent> <Space>l :<C-u>SidePanel<CR>
表示位置を変えたい時は:SidePanelPosToggle
で左右反転します。幅はできるだけ実際の値を維持するようにしています。幅を数値で指定したい時は:SidePanelWidth 30
などで指定できます。
プラグインの動作設定
デフォルトでは:SidePanel nerdtree
の動作は、バッファがファイルであれば:NERDTreeFind
を実行、ファイル以外であれば:NERDTreeCWD
を実行するになっています。例えばこれを常に:NERDTree
の実行に変更したい場合、以下のように設定します。
let g:sidepanel_config['nerdtree'] = {'open': ['NERDTree']}
一応閉じるコマンドも設定できます。(これを変更することは少ないと思いますが・・・)
let g:sidepanel_config['nerdtree'] = {'close': ['NERDTreeClose']}
プラグインの追加方法
いつかきちんとドキュメントにすると思いますが、ざっくり言ってしまうと、以下のように.vimrc
に設定を追加してください。以下はNERDTreeのデフォルト設定です。なんとなく雰囲気はわかっていただけるかと思います。
(2014/05/14 バグ修正)
let g:sidepanel_config['nerdtree'] = { \ 'filetype': 'nerdtree', \ 'open': ['call sidepanel#init#nerdtree()'], \ 'close': ['NERDTreeClose'], \ 'position': { \ 'var': 'g:NERDTreeWinPos', \ 'param': { \ 'left': 'left', \ 'right': 'right', \ }, \ }, \ 'size': { \ 'var': 'g:NERDTreeWinSize', \ }, \} function! sidepanel#init#nerdtree() if filereadable('%') execute "NERDTreeFind" else execute "NERDTreeCWD" endif endfunction
その他、デフォルト設定はautoload/init.vim
のs:sidepanel_config_default
に列挙されています。
お願い
「こんなプラグインも使えると便利」などありましたら、GithubのIssueでお知らせいただけると嬉しいです。対応できそうなプラグインはできるだけ対応します。また、上記の方法で設定まで書いていただけたりするととても嬉しいです。