0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vimのバッファ管理プラグインを書いた

Last updated at Posted at 2025-05-05

僕はタブが好きだ

皆さん、タブブラウザ使ってますか?使ってますよね!タブブラウザじゃないブラウザなんてほとんどないです。
現代的タブブラウザにはタブグループやセッションがありますよね!

vimにそういうのを導入したい。は?そんなの要らない?
俺がそう思うんだからそうなんだよ。俺ん中ではな。

vimのバッファ管理

vimは複数のファイルを編集する事ができます。そのいれものをバッファと呼びます。バッファ管理プラグインは色々あるそうです。
だけど、どう検索すればいいかわかりません。

「vim buffer management」これでググってもなかなか辿りつけないのです。「vimでバッファを管理するには:bを打てばいいんだよ」とか、そんなのばかり…。そこで、自作しました。

ninbufgroup

ninbufgroupというプラグインです。vimのバッファはブラウザのタブみたいなものですので、ブラウザのタブみたいに使いたかったです。
バッファをグループ化できればタブグループみたいに使えますよね。

そして、そうするとvimのタブが泣くので、こちらはブラウザのセッションのようにしようとしました。こんな感じ。

vim/nvim Browser
buffer tab
buffer list tab group
tab session

そんなのをどうやって実現するかというと…

vim scriptの変数

vimにはいくつか変数があります。

let g:hoge = 'fuga'

vim scriptの変数は上記のように頭文字にgとかvとかsとかがついています。これはスコープをあらわします。
gはグローバル変数、sはスクリプト内変数、aは関数の引数、vはvimの定数、tはタブの中の変数です。
つまり、これでタブ内変数とか使えるわけですね。これによってタブの中でバッファグループを管理できるようになるわけです。

どんな感じなのか

Untitled.png

ほら、このように、一つのタブの中に色々表示できるわけです。ここで、1番目のタブの中のtestという大きさ6のタブグループの中のtest2.pyというバッファを開いていますね。
タブ毎にバッファグループを管理できます。正規表現でフィルタを使って絞りこめます。絞りこんだものを元に新たなバッファグループを作ることもできます。いいですね!

これを入れると自動でそうなるのか?

んなことはない。自由が必要ですよね。なので設定例を書いておきます。

au VimEnter * call bufgroup#toggle()

noremap gN :call bufgroup#next()<CR>
noremap gP :call bufgroup#prev()<CR>
noremap gn :bn<CR>
noremap gp :bp<CR>
noremap gd :call bufgroup#remove_group()<CR>
command! -nargs=1 BufGroupNew :call bufgroup#new(<f-args>)
command! -nargs=1 -complete=customlist,_BufComp
      \ BufGroupAdd :call bufgroup#add(<f-args>)
command! -nargs=1 -complete=customlist,_BufComp
      \ BufGroupAddAll :call bufgroup#add_all('<args>')
command! -nargs=1 -complete=customlist,_BufComp
      \ BufgroupOpen :call bufgroup#open_group('<args>')
command! -nargs=1 BufGroupFilter :call bufgroup#filter(<f-args>)
command! -nargs=1 BufGroupNewFilter :call bufgroup#new_filter(<f-args>)

うん。説明面倒くさいのでpluginのdocでも見て下さい。

感想

いや…これ、本当は誰かが書いたものを使うのが一番なんでしょうけれど、このくらいのは自分で書く方が楽じゃないですか?みんな自分で書けばいいと思います!
みんな、vim scriptを書きましょう!
vimはいいぞ!

現場からは以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?