VimScript覚書
はじめての、びむすくりぷと。
ってことで、ちょっとしたVimプラグインを開発中。
その過程でのVimScript覚書をメモ。
VimScript開発の取っ掛かりに参考にさせてもらったページ
Vimスクリプト基礎文法最速マスター - 永遠に未完成
Big Sky :: モテる男のVim Script短期集中講座
autoloadは、autoload/foo/bar/baz.vimの様にフォルダ階層で区切られたファイルが#でセパレートされたネームスペースで呼び出され、call foo#bar#baz#XXX()というアクセスの瞬間にbaz.vimが読み込まれるという仕組みを持っています。
ですので、最近のVim Scriptはpluginではコマンドやキーマップのみを宣言するのが最近の流儀です。
使いそうな組み込み関数
参考:
- mode({expr})
- 現在のモードを示す文字列を返す
'n' : ノーマル
'v' : 文字指定ビジュアル
'V' : 行指定ビジュアル
'CTRL-V' : 矩形指定ビジュアル
's' : 文字指定選択
'S' : 行指定選択
'CTRL-S' : 矩形指定選択
'i' : 挿入
'c' : コマンドライン - getreg( [{regname} [, 1]])
- レジスタの中身を取得
- getregtype( [{regname}])
- レジスタの種類を取得
'v' : 文字指定
'V' : 行指定
'<CTRL-V>{width}' : 矩形指定
0 : 空または未知レジスタ - line({expr})
- 行番号を取得
line('.') : カーソル位置の行番号取得
line('v') : ビジュアルモードでの選択領域の開始行番号取得 - col({expr})
- 桁番号を取得
col('.') : カーソル位置の桁番号取得 - virtcol({expr})
- スクリーン上での桁番号を取得
virtcol('.') : カーソル位置の桁番号取得 - getpos({expr})
- カーソル位置を[bufnum, lnum, col, off]のリストで取得する
{expr}の値はline()と同じ - setpos({expr}, {list})
- {expr}の位置を設定する
listの値は[bufnum, lnum, col, off]でなくてはならない
成功すれば0、失敗すれば-1を返す
自動コマンドautocmdについて
その他覚書
letは変数の定義時だけではなく、変数を扱う際にも付けなくてはならない
let a = 1 "定義” let a += 5 "値の変更" a += 5 "NG!"
関数を呼び出す時は変数への代入やcallコマンドを使用する必要がある
let a = Func() "OK" call Func() "OK" Func() "NG!"
関数にrangeを付加することで範囲を指定して呼び出せる
a:firstline/a:lastlineで範囲の開始行と終了行を取得できる
rangeなし関数で複数行選択中に関数を呼び出すと、各行毎に関数処理が行われる。
function! Func() range let lnum = a:lastline - a:firstline + 1 echo 'select line num =' . lnum endfunction