第2回Vimスクリプト入門みたいの(変数)
" usr_41.txt vimスクリプトの書き方から " 「41.2 変数」より " " 変数名のルールはCとだいたい同じ(Perlぽい正規表現だと[A-Za-z_][A-Za-z0-9_]*かな) " どうやら変数はデフォルトでグローバルみたいです。 " スクリプトローカルな変数にするには s: をつけるらしい。 " s: " 他にも " b: バッファローカル " w: ウィンドウローカル " g: グローバル " v: Vimが用意したもの " などがあって internal-variables を見るといいみたい。 " " :unlet を使わないと変数は削除されないみたい。 " のっていたサンプルぽいものを打って動かしてみる if !exists("s:cnt") let s:cnt = 0 en let s:cnt = s:cnt + 1 ec s:cnt " :so % " ( :so は :so[urce] 。:h :so で調べるとわかる ) " " たしかに数字は実行するたびに増える " " サンプル中に exists() が出現したので " :h exists() " まぁ名前の通りの関数で、変数が存在するかを確認するもの " " ここで注意。 " サンプルを打ちなおす時に exists(s:cnt) とやって見事にコケた " :h exists() の注意書きにもあるが、この引数は文字列らしい。 " exists(s:cnt) だと s:cnt の中身が対象になるようだ。 " " 先のサンプルに数行を追加して確かめてみる。 " ( 先のサンプルを実行した窓で :so % すると s:cnt が残っているので注意 ) " if !exists("s:cnt") let s:cnt = 0 en " 追加行ここから if s:cnt == 1 let s:v1 = 0 en let s:var = "s:v1" if exists(s:var) ec 'exists(s:v1)' el ec '!exists(s:v1)' en " 追加行ここまで let s:cnt = s:cnt + 1 ec s:cnt " 意図通りに最初の一回は !exists(s:var) 、 " 次からは s:v1 が存在するので exists(s:var) が出力される " " 今日は時間がなくて手抜きだけど、このへんで終了。 " 明日は :unlet のテストを書いて次に進みたいね! " " 今日のまとめ ( コマンド一覧だと不便なので改名 ) " s: でスクリプトローカル。:unlet されるまで残る " ( :h internal-variables ) " exists({expr}) " :unl[et][!] {var-name} ... " " 次回予告 " :unlet で変数削除!それがプロ。 "