Vim
思考の速度で編集できるテキストエディタ(思考が遅いだけ)
当時はVi imitationという意味だった
大本がラインエディタなので行の編集に強い
開発ブランチしかなく、そこからビルドして使っている
mapとnoremapの二段階でトライのようなものがある?
そもそもトライで実装されているのかは疑問
eskkみたいにプリフィクスフィルタリングによるマッチでもなんとかなるので
あれは驚愕だった
計算量気にするプログラムでそんなことしてるかは疑問だが
外から見た挙動を書いておく、後からソース読んで答え合わせする
map
ユーザー入力をmapのトライとマッチング
基本的に最長一致、 <nowait>
を付けたら最短一致になる
<buffer>
が優先される
合致したらmap領域に挿入しなおす
解決されたものにnoremapが付いていたらnoremap領域に直接放り込む
マッチしなかったらnoremap領域に送る
script
<script>
を付けたらマッピングを実行したスクリプトごとの専用マップ領域に放り込まれる
グローバルなmapを参照しないだけで大体mapと同じ
noremap
大体Emacsのbindのような動きをする
こちらはユーザーはいじれない
マッピングは最終的にこれの繰り返しに解決される
マッチングが解決されると対応する関数が実行される
失敗すると入力は破棄される
map,noremapに共通してtimeoutを過ぎると強制的に破棄される
Vimエミュレーターではmapの段階が無いものもあるので不満がある
evilとかevilとかevilとか
あれは
Emacs friendlyを目指しているのでまあ仕方なくはある
ネタ
自分用にタイマーのラッパーが欲しいかも
コルーチン的なこととか気軽にやりたい
既にありそう
そもそもVimでやる必要あるんですかね?
例外処理で死ぬケースがあるのでそのうち検証する