01/12/24 23:14
41.5 式の実行
今んところコマンドは全部 Vim から直接実行されてたわけなんだが,
":execute" コマンドを使えば式の結果を実行する事が出来るぞ.こいつを使う
とコマンドを作って実行する時にカナリ便利!!
例として,変数に含まれてるタグまでジャンプするのを挙げてやろう.
:execute "tag " . tag_name
"." は "tag " という文字列と, "tag_name" という変数に格納されてる値
を結合するのに使ってるんだぞ.つまり "tag_name" って変数の値が
"get_cmd" だったとすると,
:tag get_cmd
っていうコマンドが実行される事になるわけよ.
":execute" コマンドはコロンコマンド(colon commands)しか実行出来ねーから
な.":normal" コマンドを使えばノーマルモードのコマンド(Normal mode
commands)が実行出来るぞ.でもその場合は引数は式じゃなくって,コマンドと
なる文字だからそこんとこ分かっとくよーに.つまり,
:normal gg=G
ってやると,最初の行にジャンプしてから "=" の操作によって最後の行までを
整形するってわけ.
":normal" を式と一緒に使いたければ,":execute"と組み合わせればいいぞ.
つまり,
:execute "normal " . normal_commands
ってやればいい."normal_commands" に格納されてる値はノーマルモードの
コマンドになる文字じゃないとダメなのは当然な.
":normal"
コマンドへの引数は完璧なコマンドじゃなきゃダメだぞ.そーしねーと Vim は
引数の最後まで実行した後はそのままそのコマンドを終了しちまうからな.
# つまり,引数で指定されたコマンド以上の事は何一つとして余計な事は
# しないって意味でしょうな,たぶん.
例えば,挿入モードを始めて,そこから抜け出すなんて事も出来る.
:execute "normal Inew text \<Esc>"
これで,カレント行に "new text " っていう文字列を挿入するぞ.特殊キー
"\<Esc>" を使ってるところに御注目あれ.こーすれば実際のエスケープ文字を
スクリプトに書かなく済むわけだ.