第13回 Vimスクリプト入門みたいの (スクリプトを読みながら勉強してみる、その2)
第二回。今日の基本日記でも書いたとおり、本を読んでいたので、これは随分前に書いたもののコピペ。あまり確認せずにはっつけてるのでミスがあるかもしれません。あと内容の割に説明もすくないです。マッピングやシンタックスは、まだあまり分かっていないので説明もいいかげんです。
だらだらと言い訳みたいのを書いても仕方がないので、ぺたり。
" 第13回 Vimスクリプト入門みたいの " (スクリプトを読みながら勉強してみる、その2) " " QuickBuf を読む、第2回。 " 第1回では :map を見た。 " ここからは関数が続くようなので、自分で順番を決めて読む。 " まずは、ホットキーを押したときに実行される " s:init(), SBRun() を見たいと思う。 " " というわけで、s:init() function s:init(onStart) if a:onStart let s:unlisted = 1 - getbufvar("%", "&buflisted") let s:cursorbg = synIDattr(hlID("Cursor"),"bg") let s:cursorfg = synIDattr(hlID("Cursor"),"fg") let s:cmdh = &cmdheight hi Cursor guibg=NONE guifg=NONE let s:klist = ["j", "k", "u", "d", "w", "l", "s"] for l:key in s:klist exe "cnoremap ".l:key." ".l:key."<cr>:cal SBRun()<cr>" endfor cmap <up> k cmap <down> j call s:rebuild() call s:setcmdh(s:blen+1) else call s:setcmdh(s:cmdh) for l:key in s:klist exe "cunmap ".l:key endfor cunmap <up> cunmap <down> exe "hi Cursor guibg=" . s:cursorbg . " guifg=".((s:cursorfg == "") ? "NONE" : s:cursorfg) endif endfunc " この関数のしていることは大きくわけて以下の2つ。 " 1. onStart が真のとき、各種 s: 変数の設定や map の追加をしている。 " 2. onStart が偽のとき、map の削除や色を戻す作業をしている。 " なので、init(1) が起動時、init(0) が終了時の処理ということみたい。 " " 使われているコマンド・オプション・関数・ユーザ定義関数のうち、 " 書いたことのないものの一覧を書きだしてみる。 " :highlight " 'buflisted' " 'cmdheight' " getbufvar() " synIDattr() " hlID() " s:rebuild() " s:setcmdh() " " :highlight は色を付けたり強調したりするコマンド。 " 'buflisted' はそのバッファが:lsなどの対象になるか否か。 " 'cmdheight' はコマンドライン行の高さ。 " getbufvar() はバッファごとの変数やオプションの値を取得する。 " synIDattr() は指定されたシンタックスIDの情報を取得する。 " hlID() はハイライトグループのIDを返す。 " s:rebuild(), s:setcmdh() はユーザ定義関数なので、また次回見る。 " " 関係ないけど synIDattr() の部分はドキュメントを読む限り、 " synIDattr(synIDtrans(hlID('Cursor')),'fg') " とした方が良さそう。 " " 今回のまとめ " :highlight " 'buflisted' " 'cmdheight' " getbufvar() " synIDattr() " synIDtrans() " hlID() " s:init(1) が起動時、s:init(0) が終了時の処理 " " 次回予告 " s:init() から s:rebuild(), s:setcmdh() が呼ばれているので、 " SBRun()より先にこれらを見る。 "