2016/11/21

シンプルバッファーセレクタープラグイン buffer_selector.vim を作成した

シンプルバッファーセレクタープラグイン buffer_selector.vim を作成した。

mikoto2000/buffer_selector.vim: シンプルで簡単に使えるバッファーセレクター

目的と経緯

目的のバッファーへの切り替えをもっと簡単に行いたい。

今までは、:buffers してバッファー番号を確認した後 :buffer number でバッファを切り替えていた。 これが意外とつらい。

  1. :Unite buffer みたいに選びたいけど、Unite ヘビーなので入れたくない
  2. bufferlist.vim を試したけど、縦分割が気に入らない
  3. 勉強がてら作ってみようか

という感じ。

これ書きながら思ったのが、バッファーセレクターじゃなくて、 ファイルセレクターあたりも視野に入れてプラグイン探したほうが良かった気がする。

手順概要

大体こんな流れで実装していった。

  1. とりあえず書く
  2. 関数化して、それっぽい場所に移動
  3. help ドキュメントを書く
  4. plugin として切り出す

以下、各手順について説明していく。

1. とりあえず書く

適当なファイルにスクリプトを書いて、都度都度 source % で実行していった。

最初は、こんな感じのスクリプトを書いてバッファ一覧がとれるか確認した。

""" 変数 buffer_list に ``ls`` の結果を格納
let buffer_list=""
redir => buffer_list
silent ls
redir END

""" 新しいバッファを作成
new __BUFFERLIST__

""" __BUFFERLIST__ に ``ls`` の結果を表示
put!=buffer_list

その後、インクリメンタルに source % しながら実装していき、最終的にできたのがこれ。

""" 変数 buffer_list に ``:ls`` の結果を格納
let buffer_list=""
redir => buffer_list
silent ls
redir END

""" 新しいバッファを作成
if bufexists(bufnr('__BUFFERLIST__'))
    bwipeout! __BUFFERLIST__
endif
silent bo new __BUFFERLIST__

""" __BUFFERLIST__ に ``:ls`` の結果を表示
silent put!=buffer_list

""" 先頭と末尾が空行になるのでそれを削除
normal G"_dd
normal gg"_dd

""" ウィンドウサイズ調整
let current_win_height=winheight('%')
let line_num=line('$')
if current_win_height - line_num > 0
    execute "normal z" . line_num . "\<Return>"
endif

""" バッファリスト用バッファの設定
setlocal noshowcmd
setlocal noswapfile
setlocal buftype=nofile
setlocal bufhidden=delete
setlocal nobuflisted
setlocal nomodifiable
setlocal nowrap
setlocal nonumber

""" 選択したバッファに移動
map <buffer> <Return> ^viwy:bwipeout!<Return>:buffer <C-r>"<Return>
map <buffer> q :bwipeout!<Return>

2. 関数化して、それっぽい場所に移動

「1.」の段階で、 source % すれば所望の動きになることが確認できているので、 あとは

  1. 関数化して autoload に突っ込む
  2. .vimrc で関数を呼び出すマッピングを定義する

をすれば OK。

具体的に、どこにどう配置したかは、 コミット見るのが早そうなのでリンク張る。

Added simple buffer select process

3. help ドキュメントを書く

はじめてプラグインを作ってみた。それとhelpの書き方など - 反省はしても後悔はしない を参考に、 jax ファイルを作成。

これもコミットへのリンクのほうがわかりやすいか。

Added document of 'buffer_selector'.

4. plugin として切り出す

新しいリポジトリを作って作成したファイルを追加。

mikoto2000/buffer_selector.vim: シンプルで簡単に使えるバッファーセレクター

その後、もともと作っていたソースを削除し、代わりに、新しく作ったリポジトリをパッケージに登録。

Carve out 'buffer_selector.vim' to external plugin.

プラグイン作成作業は以上。

所感

だらだら作っていったけど、 プラグイン管理の仕組みを使ってすぐインストールできる vim プラグインが作れたからとりあえず満足した。

以上。

0 件のコメント: