rcmdnk's blog

20130723_AutoHotKey_200_200

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系もなんかできるだろうとは思ってましたが真面目に考えてませんでした。

多分他の部分もちょっと考えれば良くなるところはあるはず。

またそのうち。。。

Sponsored Links
Sponsored Links

« スイッチボット防水温湿度計を設置 エアコン(白くまくん)の水飛び問題 »

}