以前、
として、Vim風のカーソル移動をWindows環境で再現しました。
(再現なんて言っても、フリーソフト入れるだけだし。)
今私は、メインで使っているのはUbuntuというOSを使用しています。
UbuntuってVim入ってんじゃん。って突っ込まれるのは百も承知。
でも、私がしたいのは”全てのアプリケーション”でVim風にカーソル移動操作がしたい!ってことなんです。
カーソル移動を実現する
今、それとなく動いているので忘れないようにメモを残します。
と言っても、以下のブログさんの内容を基本的に踏襲してます。
とても助かりました。ありがとうございます。
Keycodeを調べる
キーバインドをいじるためには、そもそもキーに対して何の番号が割り振られているかを確認する必要があります。
では、そのキーの番号を探してみましょう。まずはターミナル(端末)を起動します。
Ubuntuの場合は、Ctrl+Alt+T です。ではターミナルに以下を打ち込みます。
$ xev
すると以下の様な状態になると思います。
この状態で、カーソル移動等で使用するキーを押してみましょう。
私の場合は、「h」キーをカーソルの左移動として使用したいので、押してみました。すると以下のように結果が帰ってきます。
KeyPress event, serial 37, synthetic NO, window 0x4600001, root 0x291, subw 0x0, time 27527236, (-735,-162), root:(420,279), state 0x10, keycode 43 (keysym 0x68, h), same_screen YES, XLookupString gives 1 bytes: (68) "h" XmbLookupString gives 1 bytes: (68) "h" XFilterEvent returns: False KeyRelease event, serial 37, synthetic NO, window 0x4600001, root 0x291, subw 0x0, time 27527316, (-735,-162), root:(420,279), state 0x10, keycode 43 (keysym 0x68, h), same_screen YES, XLookupString gives 1 bytes: (68) "h" XFilterEvent returns: False
keycode という文字が見えますねー。どうやら「h」キーはkeycode 43 として割り当てられているようです。
必要なキーはこの時に調べておきます.例えば、私は「無変換」キーを押しながら「h」を押すとしたいので、「無変換」キーも調べておきました。
.Xmodmapファイルを作成する
さて、この後に .Xmodmapファイルを作成します。作成場所は$HOMEの直下にします。因みに、ファイル名の前に"."をつけると隠しファイルになります。
.Xmodmap は基本的に以下のように記述します。
keycode XX = [キーを押した時] [Shift+キーを押した時] [Mode_switch+キーを押した時] [Mode_switch+Shift+キーを押した時]
つまりはこんな感じです。
clear Lock remove Control = Mode_switch keycode 102 = Mode_switch keycode 100 = Mode_switch keycode 66 = Mode_switch keycode 29 = y Y Prior Prior keycode 30 = u U Home Home keycode 42 = g G BackSpace BackSpace keycode 43 = h H Left Left keycode 44 = j J Down Down keycode 45 = k K Up Up keycode 46 = l L Right Right keycode 56 = b B Next Next keycode 57 = n N End End keycode 53 = x X Delete Delete keycode 65 = space NoSymbol Return
Mode_switchキーは、一般的なキーボードには割り当てられていないようです。その部分を利用します。
Mode_switchの機能を、keycode 102 (無変換キー)に割り当てるのです。
後は、必要なキーに対して、Mode_switchが押された際に動作してほしい内容を列挙します。
.Xmodmapファイルをコマンドで読み込ませる
このファイルの準備が整えば、後はターミナルを起動し、コマンドで強制的に読み込ませキーバインドを一時的に変更させます。
$ sudo xmodmap ~/.Xmodmap
こうすれば、無変換キーを押しっぱなしの時だけhjklで上下左右にカーソルが動く、なんちゃってVim操作が完成です。
最後に
少々面倒なのは、入力メソッドが変更されるとデフォルトに戻ってしまうことです。
残念ではありますが、その場合は先程のコマンドを打ち直して下さい。
幾分、Ubuntuの超初心者でありますので、何か間違い等ありましたら教えて下さい。
因みに、Ubuntuで推奨されているキーバンドの変更方法はxkbを操作するというものです。
これも一応試したのですが、Android Studioでは効かないと言う事象が出たので、今回紹介したXmodmapを利用する方法に戻しました。
ではでは!!