vi-like カーソル移動

vi に慣れ親しんでる者としては,他のアプリケーションを使っている時でも カーソル移動の際についつい {hjkl} を押してしまう.ホームポジションから遠い位置にあるカーソルキーなんて使いたくない.HHKB Pro2 を使ってるなら なおの事.

そんならキー割り当ての変更か何かで対処しちまおう,と.でも流石に {hjkl} をそのままカーソルキーとしてマッピングするわけにはいかんので,例えば Ctrl+{hjkl} のようなもので代用しよう,と.そういうことで,xmodmap を使って実現することにした.

xmodmap(1) の EXPRESSION GRAMMAR の項を読むと,1 つのキーコードに対して最大 8 つ (事実上は最大 4 つ) のキーシンボルを割り当てることができ,modifier key なし,Shift 同時押し,Mode_switch 同時押し,Mode_switch + Shift 同時押しの場合のシンボルを割り当てられる,とある.この Mode_switch が HHKB Pro2 (HHK mode) ではどのキーに割り当てられているのかを知るべく,xmodmap -pkexev の出力を見てみたが,キーコードが 93 (10 進) であることしか分からなかった.使われてないのかもしれない ?

ならば,俺が事実上使っていないキーを Mode_switch として割り当て,Mode_switch+{hjkl} でカーソル移動を実現すれば良いか,ということで,以下を ~/.Xmodmap として作成・保存.割り当てるキーには左◇キー (キーコード 131 (10 進)) を選択した.


! for vi-like cursor moving
keycode 131 = Mode_switch
keysym h = h H Left
keysym j = j J Down
keysym k = k K Up
keysym l = l L Right

それから,俺は kdm を使って KDE を起動してるんで,~/.xprofile から ~/.Xmodmap を読み込むように以下を追記.


if [ -f "${HOME}/.Xmodmap" ]
then
    xmodmap "${HOME}/.Xmodmap"
fi

これで Fn+{;[/'} を使わずに済むようになった.どっちも同時押しという点では変わらないんだけどね.実際に今書きながら使ってみると,左◇キーは左小指よりも左親指の方が押しやすいかなー と思った.昔短期間ながら習ったピアノの指使いがこんな所で役立つとは….


いわゆる PageUp/PageDown を追加.vi では Ctrl+{bf} ということで以下のように定義.


keysym b = b B Prior
keysym f = f F Next
  • キーシンボルが Prior/Next
  • Next の対は Previous なんだろうと思ってたら実は Prior だった

という事を初めて知って驚いた.