vim_ahkでe
の動作がおかしいから、という理由でPRが来てたのですが、
機能的な制限から敢えてそうしていた部分でした。
ちょっと工夫してより良い感じに出来たのでそれについて。
vim_ahkでのe
の動作
vim_ahkはAutoHotkeyを使ってWindowsのどこでもVim的なキー操作をできるようにするものです。
exeファイルも用意してあるのでAutoHotkeyをインストールしてなくても使えます。
モード変換が出来てノーマルモード時にはhjklで左下上右に動いたりwで単語ごとにジャンプしたり出来ます。
eで単語の最後、に飛ぶ動作も実装してあるのですが、これまではこれが、
*CtrlRgight, CtrlRight, Left
という動作になっていました。
CtrlRgightはWindowsでは次の単語の先頭の位置にジャンプするショートカットキーです。
なぜ二回CtrlRgightをしているかというと、
したような場合(|
はカーソル位置だとして)
CtrlRgight, Leftだと同じ位置に戻ってしまうため。
aaa| bbb ccc
2回することで、下のような位置に動きます。
aaa bbb| ccc
Vimに忠実にするにはほんとは
aaa bb|b ccc
の位置なんですが、そうしてしまうとうまく行かないことが色々あるので一番うしろの位置にしています。
これが単語の途中にカーソルがあると、Vim的にはその単語の最後に行ってほしいのですが、 vim_ahkでは次の単語の最後に行ってしまうようになっていました。
これを治したい、というのが以下のPR。
Fix move for letter “e” by lorenzcat · Pull Request #85 · rcmdnk/vim_ahk
このPRでは単にCtrlRgightを一回にしているのですが、 これだと上に書いたように単語の最後に予めあると動かなくなります。
従って3e
とかやってもその単語の最後に動くだけで、e
を連続して押しても動きません。
という制限があるので単語中からのジャンプは次に行ってしまう、という部分は仕方無しとして上のように CtrlRgight2回という方法をとっていました。
カーソル下の文字を見て動作変更
以前カーソル下の文字を見て動作を変える実装をvim_ahkに導入しました。
上ではノーマルモード時にa
を使ってインサートモード時に入る際、行の最後にいる場合でもその行のまま挿入をできるようにしたものです。
この昨日自体はすでに入っているので、あとはこれを使ってe
の際に
- カーソル下がスペースならCtrlRgight2回
- カーソル下がスペースでないならCtrlRgight1回
とすればOK。
ということで v0.12.0 でこれを導入しました。
Check the character before an action
オプション
また、これまではVimCheckChr
というオプション(GUI上ではCheck the character before an action
というチェックボックス)
でこのチェックを有効にしないと使えない機能にしてましたが、
今回からデフォルトで有効にしてこの設定項目もGUIからは消しました。
クリップボードを使う関係上ちょっとdelay(強制的に合計20msのsleepが入る)が入ってしまうのでオプションにしてましたが、
e
の場合これを入れない場合でまた別の場合分けとかをいれないといけなくなったりして面倒なのと、
それほど気になるものでもないかな、と実際に使ってみて思ったので。
もし気になる感じであれば教えてください。
他の部分でも改善できそうなところ
この文字チェックを入れたあとに色々使えそうだな、とは思ってて 適当にIssueを作ったままになってました。
use CheckChr, BlockInput for some places · Issue #76 · rcmdnk/vim_ahk
直接e
だけを見てないですがword jump系もなんかできるだろうとは思ってましたが真面目に考えてませんでした。
多分他の部分もちょっと考えれば良くなるところはあるはず。
またそのうち。。。