2014年5月7日水曜日

VimScriptをちょろっと調べた時のメモ

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 を参照。

autoloadとautocmd

http://mattn.kaoriya.net/software/vim/20111202085236.htm
ここ見たほうがよいです。

vimscriptの組み込み関数

機能別に分類してあるヘルプは以下で見れる。

:help function-list

アルファベット順は以下

:help functions

ということで最後の方はだいぶ適当になったけど、これで最低限vimscriptが読めるように
なった気がします。

あとは色々見たり作ったりしながら覚えていこうかと思います。

0 件のコメント:

コメントを投稿