🚀
Vimのパワーです
パワーについて
このGifであなたにパワーを伝えます
百聞は一見にしかず - 趙充国 『漢書』
それがパワーです
それがパワーです
結論から
- コーディング同じ作業の繰り返し
- 繰り返し自動化せねばプログラマー
- 朝露の霜さえ恋しい12月
動機
エディターでカーソルを動かすとき、どこに動かしますか
4パターンに大別できそうです
- クラス
- 関数
- 制御フロー
- その他のスコープを生まない命令(代入、比較、関数呼び出し、リテラル)
どの言語も木構造をしています
- クラスのようなトップレベルの構造体があって、
- その中に関数という構造体があって、
- その中に制御フローがあって、
- その中に命令があります
そうするとエディターでカーソルを動かすとき、移動先は4パターンしかありません
同じ4パターンから1つを選んでカーソルを動かす、という作業を繰り返しています
自動化しましょう
実装
4パターンとは言え、具体的な移動先はさまざまです
だから正規表現を使います
パワーです
-
^class \w- {$
クラス -
function \w+\(.+\) -> \w+ {$
関数 -
(if|else|for|while) .* {$
制御フロー - スコープを生まない命令
-
let .* =
代入 -
".*"
, 文字列リテラル -
\[.*\]
配列のインデックス参照やオブジェクトのキー参照 - など
このような正規表現を言語ごとに定義します
あとは次のようなエディターの拡張機能を作ります
- ユーザーが1,2,3,4いずれかのパターンに移動するショートカットキーを押す
- 現在開いているファイルの拡張子に応じて、定義した正規表現を取得
- 正規表現に応じて、移動方向にあるファイル内の最も近い文字列を検索する
- 検索ヒットすればそこにカーソルを移動する
汎用性
この移動方法は、プログラミング言語以外にも使えます
例えば Markdown
- トップレベルのヘッダーがあって
- その中に小さいヘッダーがあって
- その中にテキストや飾り文字、引用句やリンク、画像やリストなどがあります
つまり、
- トップレベルの構造体があって、
- その中に1段深いレベルの構造体があって、
- ステップ2を0回以上繰り返して、その中に構造体ではない編集可能な要素があれば、それを編集する
プログラミング言語もこのパターンに一般化できます
ツリー構造の文章なら何でもこの方法でカーソルの移動を自動化できます
デモ
論より証拠
Vim のプラグインにしました
Rust、Markdown、Luaに対応していますが、ユーザーが好きな言語を追加できます
↑↓でfn、←→でstruct, impl、ctrl↑↓でpublic fn、shift↑↓でprivate fn、{}でスコープを内部に入ったり外側に出たり、+-で制御フローに飛んだり、そのようにカーソルをワープさせることができます
これがパワーです
MITライセンスでコードを公開しています
github.com
プラグインはもちろん誰でも無料で使えます
結び
このテクニック自体は簡単な仕組みなのでどんなエディターにも追加できます。拡張機能をユーザーが追加できる場合に限ります。
Discussion