🚀

Vimのパワーです

2024/12/08に公開

パワーについて

このGifであなたにパワーを伝えます

百聞は一見にしかず - 趙充国 『漢書』

19秒によるパワーの描写

それがパワーです

それがパワーです

結論から

  • コーディング同じ作業の繰り返し
  • 繰り返し自動化せねばプログラマー
  • 朝露の霜さえ恋しい12月

動機

エディターでカーソルを動かすとき、どこに動かしますか

4パターンに大別できそうです

  1. クラス
  2. 関数
  3. 制御フロー
  4. その他のスコープを生まない命令(代入、比較、関数呼び出し、リテラル)

どの言語も木構造をしています

  1. クラスのようなトップレベルの構造体があって、
  2. その中に関数という構造体があって、
  3. その中に制御フローがあって、
  4. その中に命令があります

そうするとエディターでカーソルを動かすとき、移動先は4パターンしかありません

同じ4パターンから1つを選んでカーソルを動かす、という作業を繰り返しています

自動化しましょう

実装

4パターンとは言え、具体的な移動先はさまざまです

だから正規表現を使います

パワーです

  1. ^class \w- {$ クラス
  2. function \w+\(.+\) -> \w+ {$ 関数
  3. (if|else|for|while) .* {$ 制御フロー
  4. スコープを生まない命令
  • let .* = 代入
  • ".*", 文字列リテラル
  • \[.*\] 配列のインデックス参照やオブジェクトのキー参照
  • など

このような正規表現を言語ごとに定義します

あとは次のようなエディターの拡張機能を作ります

  • ユーザーが1,2,3,4いずれかのパターンに移動するショートカットキーを押す
  • 現在開いているファイルの拡張子に応じて、定義した正規表現を取得
  • 正規表現に応じて、移動方向にあるファイル内の最も近い文字列を検索する
  • 検索ヒットすればそこにカーソルを移動する

汎用性

この移動方法は、プログラミング言語以外にも使えます

例えば Markdown

  • トップレベルのヘッダーがあって
  • その中に小さいヘッダーがあって
  • その中にテキストや飾り文字、引用句やリンク、画像やリストなどがあります

つまり、

  1. トップレベルの構造体があって、
  2. その中に1段深いレベルの構造体があって、
  3. ステップ2を0回以上繰り返して、その中に構造体ではない編集可能な要素があれば、それを編集する

プログラミング言語もこのパターンに一般化できます

ツリー構造の文章なら何でもこの方法でカーソルの移動を自動化できます

デモ

論より証拠

Vim のプラグインにしました
Rust、Markdown、Luaに対応していますが、ユーザーが好きな言語を追加できます

19秒によるパワーの描写

↑↓でfn、←→でstruct, impl、ctrl↑↓でpublic fn、shift↑↓でprivate fn、{}でスコープを内部に入ったり外側に出たり、+-で制御フローに飛んだり、そのようにカーソルをワープさせることができます

これがパワーです

MITライセンスでコードを公開しています
github.com

プラグインはもちろん誰でも無料で使えます

結び

このテクニック自体は簡単な仕組みなのでどんなエディターにも追加できます。拡張機能をユーザーが追加できる場合に限ります。

Discussion