Hatena::Groupvim

bless {category => 'vim'}, shift

2009-10-30DumbBuf.vimというプラグインを作ってます このエントリーのブックマークコメント

ちょくちょくvim.orgの方にもアップロードしてます

普通に使える感じになってきたので紹介します。



そもそも作ったきっかけ

QuickBufというプラグインがお気に入りだったのですが、QuickBufはコマンドラインバッファリストを出力するため大量のバッファを読み込んだ際にコマンドラインに表示できない量になると「No room to display buffer list...」というエラーメッセージが出ることがありました。

その他にもなんか意味不明のエラーが出たりしたのでQuickBufを直すより作った方が早そうだったので作りました。


スクリーンショット

f:id:tyru:20091031002751p:image

なるべくQuickBufに似せようと努力したわけではないのですが、ハイライト機能をつけたら本家の方とかなり似てる感じになりました。

シンプルな感じがお気に入りです。

ちなみに本家の方のスクリーンショットこちら


インストール

まずvim.orgからプラグインをとってきます。

ファイルはdumbbuf.vimのみなので、~/.vim/plugin/に置きます。

次にg:dumbbuf_hotkeyを定義します。

定義をしないと何もロードされないようになっているので注意。

僕はQuickBufの時と同じ「<Leader>b(mapleaderは;)」にマッピングしています。


操作説明

用意されているインターフェースマッピングのみです。コマンドはありません。

またこれらのマッピングはDumbBuf内のバッファでのみ実行可能です。

(バッファを呼び出すg:dumbbuf_hotkey以外)

あとxとか以外のコマンドのほとんどはQuickBufから移植しました。パクリです。


以下「選択したバッファ」というのはカーソルの下にあるバッファのことで、

「マークする」というのは複数に対して操作を実行する時に便利な操作のことです。

詳しくはノーマルモードのxxを見てください。


ビジュアルモード
  • x
    • 選択した範囲のバッファ全てをマークする。ノーマルモードのxxを参照してください。
ノーマルモード

またこのいくつかの2文字続いたマッピングg:dumbbuf_single_keyというオプションを1にすることで右の1文字のマッピングが使えます。

これはQuickBufと同じマッピングです。

詳しく言うとQuickBufはコマンドラインでgetchar()する実装だったので(多分)普通のマッピングの影響を受ける心配はないのですが、DumbBufは隠れバッファを使うので普通のマッピングを受けてしまいます。なのでデフォルトでは2文字のマッピング*1で、g:dumbbuf_single_keyを1にした時のみ1文字のマッピングが使えるようになります。


g:dumbbuf_single_keyがデフォルトでオンでないのは互換性のためです。

詳しくはプラグイン本体を見てください。


カスタマイズ

オプションはいっぱいあるので、とりあえずおすすめの設定というか僕のそのまんまの設定を載せておきます。

詳しくはプラグイン本体を(ry

let dumbbuf_hotkey = '<Leader>b'
" たまにQuickBufの名残でウインドウを閉じるのに<Esc>を押してしまう
let dumbbuf_mappings = {
    'n': {
        '<Esc>': { 'opt': '<silent>', 'mapto': ':<C-u>close<CR>' }
    \}
\}
let dumbbuf_single_key  = 1
let dumbbuf_updatetime  = 1    " &updatetimeの最小値
let dumbbuf_wrap_cursor = 0
let dumbbuf_remove_marked_when_close = 1

*1:それでも被る可能性はあるが、被るならバッファローカルなマッピングなので上書きされても大丈夫だけど、これら2文字のマッピングと先頭が同じで3文字以上のマッピングがあったりすると少しの間待たされたりする... あとビジュアルモードのxが1文字なのはupdatetime間隔で呼ぶ(毎回呼ぶことはしない。getchar()でブロッキングされるため)ようにしてるけど、ビジュアルモードだとCursorHoldが呼ばれなかったりするので

slack4uslack4u2009/12/31 17:44QuickBufを愛用していて、たまに不便に思うことがあったので、おぉこれは!と思い使わせてもらってます。
ただ、このプラグインを入れると、cursorlineのハイライトがうまく効かないようです。。。

tyrutyru2010/01/01 03:51> id:slack4u
使っていただきありがとうございます!
あと明けましておめでとうございます;)
cursorline...思い当たりはあるのですが、今からvim.orgにv0.0.8をアップロードするのでそれを使って確認して頂けませんか?
もしかして最新版では治っているかもしれませんので。

# 思い当たり、というのは、このプラグインはDumbBufのバッファを明けてから閉じるまでにcursorlineを弄ってるのです。
# なので、もしかしたら閉じる際にそのcursorlineの設定を復元するのをしくじってる可能性があります。。。

あと最新記事でDumbBuf.vimについて書いたので良ければ見てってください。

tyrutyru2010/01/01 20:03> id:slack4u
アップロードしました。
また下記からもダウンロードできます。
vim.orgよりも大体においてこちらのが更新が早いので、
もしvim.orgにない場合はこちらにあるかと思います。
ただなるべくvim.orgにも素早くアップロードするつもりです...

http://github.com/tyru/DumbBuf.vim/downloads

slack4uslack4u2010/01/04 11:51年末年始のお忙しい時期に色々と対応いただき有難うございます。

早速試してみました!が、結論から言うと変化なしといった感じです。
確かにcursorlineを弄ってる部分が影響しているようで、dumbbufを開くと開いている全てのバッファのcursorlineが赤色背景の白文字になり、閉じると背景色は元の色に戻るのですが、文字色がSyntaxハイライトしていない状態の白文字のままになってしまっているような挙動です。

tyrutyru2010/01/04 15:31> id:slack4u
なるほど。修正しました。
:hiコマンドの挙動を勘違いしていたのが原因でした。。。すみません。
http://github.com/tyru/DumbBuf.vim
の「Download Source」から最新版をダウンロードできます。

また自分の環境でデフォルトではcursorlineをオンにしていなかったこともあってあまり気にしていませんでしたが、DumbBufを開いた時に他のcursorlineもハイライトされるのがちょっとかっこ悪いですね。。。
これは現在の(表示されている)タブ中の全てのウインドウのcursorlineを一旦オフにして、DumbBufを閉じる時に復元するという挙動にしようかな、と思ってます。

何はともあれ分かりやすいバグ報告ありがとうございましたm(_ _)m

slack4uslack4u2010/01/05 09:52さっそくgithubからmasterソースを落として試してみました。
ばっちりOKでした!これで何の問題も無く使えそうです。本当に有難うございました。

自分の場合は http://nanabit.net/blog/2007/11/03/vim-cursorline/ のカレントバッファのみハイライトする設定をvimrcに記述していたので、他のバッファのcursorlineもハイライトされるということに最初は気づいてませんでした。。。

tyrutyru2010/01/05 23:37直ったようで何よりです。

> 自分の場合は http://nanabit.net/blog/2007/11/03/vim-cursorline/ のカレントバッファのみハイライトする設定をvimrcに記述していたので、他のバッファのcursorlineもハイライトされるということに最初は気づいてませんでした。。。
お、この設定いいですね。教えてくれてありがとうございます。