vim pluginを開発したいと考えているが、まずはvimscriptについて知らないといけない。
ということでちょっと調べてみた。
http://mattn.kaoriya.net/software/vim/20111202085236.htm
この記事が素晴らしすぎたので、こっちを読むとよいと思います。
あとこことか
http://vim-users.jp/2010/04/hack136/ http://vim-jp.org/tips/start_vimscript.html
とりあえず、備忘録的にやったことを残しておこうと思います。
変数宣言
こんな感じ。
let foo = 1
let foo = "bar"
let foo = ["foo", "bar"]
let foo = {"bar": "bar"}
関数定義
こんな感じ。
function Foo()
echo "foo"
endfunction
コマンドラインから実行すると以下のようになる。
:call Foo()
foo
同じ関数名を定義するにはfunction!を指定する
function! Foo()
echo "foo"
endfunction
スコープ
関数内で有効なローカルスコープ l:、スクリプトファイル内で有効なスコープ s:、グローバルで有効なスコープ、 がよく使う。
こんな感じ。
function! s:Foo()
let l:foo = "foo"
echo foo
endfunction
call s:Foo()
Pythonインターフェース
vimscriptではPythonを使用することが出来ます。
まずは使用できるかどうかの確認。
echo has("python")
1
echo has("python3")
1
であればpython2もpython3も両方使えます。
ではvimscriptで実際にpythonを使用してみます。
function! s:Foo()
python3 << EOM
print("foo")
EOM
endfunction
call s:Foo()
このような形で使用します。
外部ファイルを実行する際は:pyfileコマンドを使用します。
map
基本的なコマンドについては知っているので割愛。
インサートモードにおいて、関数の評価結果から入力文字列を挿入させるためには<expr>を使用する。
inoremap <expr> <c-x> Foo()
command
コマンドモードから実行できるコマンドを定義する。
名前の戦闘は大文字である必要がある。
command! Foo :call Foo()
詳しくは help :command-args を参照。
vimscriptの組み込み関数
機能別に分類してあるヘルプは以下で見れる。
:help function-list
アルファベット順は以下
:help functions
ということで最後の方はだいぶ適当になったけど、これで最低限vimscriptが読めるように
なった気がします。
あとは色々見たり作ったりしながら覚えていこうかと思います。