物置き

引数選択スクリプト

先日vim onlineでスクリプトをチェックしていたところ、
id:ka-nachtさんが作成した、textobj-indentを見つけたので入れた。
その際、textobj-userが提供するフレームワークの下で、
自作のテキストオブジェクトが作れることを知り、
これは面白そうだと思ったので、自分もtextobj-indentの内容を基に
自作のテキストオブジェクトを作成してみまんた。
せっかく作ったので、晒してみるテスト。


作ったのは、関数呼び出し,定義部の引数部分にカーソルを置いて実行すると、
カーソルがある位置の引数を選択する、というもの。
(もしかしたら標準の機能であったりするんだろうか..)

キー割り当て

「i,」でカーソルがある位置のパラメータを一つ分だけ選択、
「a,」で一階層上のレベルでパラメータを選択(わかりにくいですね)

「i,」の例 1



このようにテキストを選択します。

「i,」の例 2


上記のような状態で「vi,」と入力すると



このようにテキストを選択します。

「a,」の例


上記のような状態で「va,」と入力すると



このようにテキストを選択します。

わかっている問題点

複数のパラメータをとるテンプレートを含む記述は意図したとおりに選択できない場合があるかも

だって、下記のような記述の場合、

	func(p1<0, 1>(p2));

この部分だけでは
引数が一つなのか二つなのかを判断できないんですもの。
(p1が何であるかによって変わってくる)

括弧の外にカーソルがある状態で実行した場合、なんか広い範囲が選択される

場所によって、ブロックがまるごと選択されたり
ステートメント単位で選択されたりする。
このへんの挙動は気持ち悪いのでどうにかしたいところ。

ダウンロード

いちおう、C/C++以外でもそれなりに動いたけど、
基本的にはC/C++の(...)内で使うことを想定しています。

ダウンロード

(2008-12-17 追記)

  • >,<を使った比較、ポインタ演算子が使われているパラメータなどが期待通り処理できない場合があったので修正
  • 区切り文字(, ;)、括弧上にカーソルがあった場合の挙動を変更