カワハラの、雑多な記録。

VIMでEscが遠い!keyhacとkeyswapで快適カスタマイズする方法

      2022/07/25

vimを使っているとEscを多用する

私はテキストエディタにvimを使っていますが、ご存知のようにvimはEscキーを多用します。
vimは挿入モードやヴィジュアルモードなどの「モード」が幾つかあり、ノーマルモードに戻るときにEscを押さなきゃいけないんです。

問題は、Escキーが遠いということ。
キーボードはなんであんな離れ小島みたいなところにEscを追いやったのでしょうか。
確かに、Escキーは、vimを使ってなければそんなに多用はしません。
私もPCに初めて触れたときは、Escがなんのためにあるのかも分かってませんでした。

でも、vimを使っている今は違います。
なんとかEcsを簡単に押せるように試行錯誤した記録を綴ります。

ちなみに、発端は「Escを簡単に押したい!」でしたが、色々やっているうちにEsc以外のところもかなり快適になりました。
そのへんはvimを使ってない人でも参考になるかもしれませんので、vim関連のところはすっ飛ばしてこの記事を読んでみてください。

Escを簡単に押すための道のり

キーボード上でEscが遠いって言っても、左手の小指をちょっと伸ばせば届きます。
又は、中指のほうが押しやすいかもしれません。
中指は手首の動きだけで届きますが、小指は左腕全体を動かさないと届きませんね。
でも、しょっちゅう押すとなると、どちらにしろ結構ストレスになります。
出来れば左手をホームポジションから離したくない!

そこで考えるのが、Escキーに変わる方法。
vimは標準でも、以下の方法が用意されています。

  • Ctrl-c
  • Ctrl-[

Ctrl-cは、windowsではコピーのショートカットキーです。
よく使うやつなので、押し慣れていてまあ使いやすいです。
でもこれも、頻繁に使っていると、右手の小指が痛くなります!

Ctrl-[は、なんか押しにくいのでナシです。

次に考えるのはキーマッピング

ここで、みんなはキーマッピングを変更して対処しようとします。
キーマッピングを変えるというのは、簡単に言うとショートカットキーを変更するみたいなことです。

いろいろ調べていて,私がオモシロイと思ったのが、挿入モード中に「jj」とタイプするとEscの動作にするというもの。
「j」を一回タイプすると「j」って入力されるんですが、「jj」と2回jをタイプしたらEscの動作になります。
こういうことも出来るんですね。
勉強になりました。

これはいい!と思って早速採用したんですが、IMEがON(日本語入力中)のときに「jj」って打つと「っj」ってなって、Escの動作が発動しないんです。
これは困る。

ちなみにvimrcに下記を書くとこの動作になります。

inoremap jj <esc>

ほかには「Ctrl-j」をEscにマッピングするのは、なかなかいい線行っていました。
Ctrlは左手で押すことになりますが、右Ctrlより左Ctrlの方が、小指の動きが若干少なくて済むので楽です。

でも、やっぱりちょっと違う。
左手の小指が忙しい。

CapsLockと左Ctrlを入れ替える

これやってる人、結構いますね。
昔のパソコンで、現在のCapsLockの位置がCtrlだったやつがあるらしいです。
それに慣れてた人にとっては、goodな方法らしいんですけどね。

この入れ替えをして、「Ctrl-j」をEscに割り当てておけば、かなり使いやすいですね。
左小指を、左に一つずらすだけなので、負担が少ないです。
でも、CapsLock本来の機能は、これはこれで使います。
あんまり使わないって人もいるみたいですが、私は使うんですよ。
IMEのon/offに、Shift+CapsLockで大文字の入力に。
なので、CapsLockがこの位置にないのは、個人的にちょっと使いにくいですね。

結構惜しいとこまで来ましたよ。

ちなみに、CapsLockとEscを入れ替えるというのもやってみました。
Escは超押しやすくなって快適だったんですが、問題が。

押しやすすぎるんです

Shiftを押そうとしてEscを押してしまう事故が頻発。
日本語の変換中に、変換範囲を変えるのにShift+カーソルキーで操作しますよね。
その時にEscを押しちゃうんです。

すると、せっかく打った変換前の文字が無情にも消えてしまうんですよ。

だめだ。
押しやすすぎるのもいけない。

キーを入れ替える方法は、レジストリを直接いじる方法もありますが、お手軽にフリーソフトの「keyswap」を使えば出来ます。
結果は同じなので、分かりやすいのがいい人はkeyswapを使えばいいと思います。

でも、CapsLockはかなり使いやすいので、コレをどうにかする方向でもうちょっと考えてみます。

keyhacと言う素晴らしいソフトを発見

keyhacとは・・・

このソフトウェアは、スクリプト言語 Python を使って、キーボード操作を カスタマイズするアプリケーションです。
アプリケーションの標準のキーアサインを柔軟にカスタマイズしたい人に とって便利なソフトウェアです。

公式サイトより引用

うん。なんか取っ付きづらい。
Pythonなんて微塵も知らんぞ。

keyhacはタスクトレイに常駐するタイプのソフトで、config.pyと言う設定ファイルにPythonと言うスクリプト言語で設定を記述することによって、キーボードの動作をカスタマイズできるようです。

これを使えば、なんか便利なことになりそうな気がする!
と直感的に思った私は、いろいろいじってみることに。

公式サイトのヘルプをみたら、設定例が色々書いてあるので、見様見真似でやってみたら、案外なんとかなるもんですね。

keyhacで出来ることは、

  • 単純なキーの入れ替え
  • 任意のキーを修飾キーに出来る
  • その修飾キーのみを押した時に、別の動作を設定できる「ワンショットモディファイア」
  • キー操作でマウスカーソルを動かしたり、ウィンドウを動かしたり

他にも、すごいいろんなことが出来そうな雰囲気なんですが、私が理解できるのはこの辺までです。
これだけ分かれば十分便利に使えます。

keyhacとkeyswapで全て解決

いろいろ試しましたが、keyswapとkeyhacを合わせて使って、快適な設定が完成しました。

CapsLockキーを修飾キーとして使うのを基本とします。
修飾キーとはCtrlキーみたいなもので、それ単体ではあんまり意味は無いけれど、「Ctrl+s」で「保存」みたいな動をするものです。
つまり、「CapsLock+何かのキー」で特定の動作をするように設定しています。

では、私がやった具体的な設定例を紹介します。

Capslock単独 CapsLock単独の動作
Shift + Capslock CapsLock

まず、CapsLock本来の動作は潰したくなかったので、CapsLockを単独で押した時は、本来と同じIMEのon/offに使います。
これは、私の使っているIME、google日本語入力側の設定でそういう風に設定しています。

keyhacには、特定のキーを修飾キーにできるし、そのキーを単独で押した時は別の動きを設定できる「ワンショットモディファイア」と言う機能があります。
その機能を利用しています。

また、Shift + CapsLockでCapsLockがかかる(大文字が入力できる)というのも、本来のCapsLockと同じ動作です。

CapsLock + 右手のキー

02_migite_hidarite
右手のキーとは、上の画像で示している「右手ゾーン」のキーのことです。
まずは、CapsLock + このキー達をおした時の設定を考えます。

Capslock + ; Esc

当初の目的であるEscを簡単に押すと言うのは、このキーになりました。
左手小指を「a」から左に一つずらすだけ + 右手小指のホームポジション
なので、非常に少ない動きでEsc出来ます。
べんり!

Capslock + h カーソルキー左
Capslock + j カーソルキー下
Capslock + k カーソルキー上
Capslock + l カーソルキー右

h,j,k,lと言えば、言わずと知れたvimのカーソル移動のキー。
CapsLockを押しながらhjklを押せば、vim以外のどんなアプリケーションでもvim風カーソル移動を楽しめます!

これがやりたいがために、Escを「Capslock + j」とせずに「CapsLock + ;」にしています。

Capslock + : BackSpace
Capslock + ] Delete
Capslock + / Enter

Deleteもまた、離れ小島に住んでるので遠い。
なので右小指ですぐ押せる位置にお引越し。

BackSpaceもよく押すので、ちょっとでも近いほうがいい。
右小指を右に一つずらすだけで押せます。

ここまで来たら、Enterすら遠いと感じてきました。
Enterが遠いって、かなりの重症じゃないか?と我ながら思いますが、右小指を下に一つずらしたとこにEnterがあったら、結構便利です。

Capslock + n Home
Capslock + m PageDown
Capslock + , PageUp
Capslock + . End

右手ホームポジションの1段下。
コンパクトなキーボードだと、HomeやPageDownが無かったり、押しにくい位置にあったりします。
こう設定しておけば、どんなキーボードでもおなじ感覚で使えるます。

Capslock + y Shift+カーソルキー左
Capslock + u Shift+カーソルキー下
Capslock + i Shift+カーソルキー上
Capslock + o Shift+カーソルキー右

右手ホームポジションの1段上は、Shift+カーソルキーにしました。
漢字変換の時の範囲を変えるときや、文字列の選択なんかに(vim以外の)。

CapsLock + 左手のキー

02_migite_hidarite
左手のキーは、上の図で「左手ゾーン」の範囲のやつですね。

こいつらは、Ctrl + 左手のキーをおした時と同じになるように設定しています。
つまり、

Capslock + a Ctrl + a(全選択)
Capslock + s Ctrl + s(保存)
Capslock + c Ctrl + c(コピー)
Capslock + v Ctrl + v(ペースト)

みたいな感じですね。
Ctrlを使ったほうが押しやすかったりするので、そんなに使いませんが、遊ばしとくのももったいないので一応設定しています。

今回の設定のコンセプトとして、

  • 他の人がこのPCを触った時に違和感を感じない

というのを意識しています。
CapsLock単独、Shift + CapsLockはもともとと同じ動きになるようにしていますし、「CapsLock + 他のキー」と言う使い方は普通はしないので、こんな設定をしていることには誰も気づかないわけです。

今回の設定では、CapsLockを修飾キーにして、ホームポジションからほとんど動かずにカーソル、Del,Back space,Enter,Esc, Home,End,PageUp,PageDown,ウィンドウの移動などが可能。
非常にコンパクトな動きで文字入力ができるので、ハマれば快感すら感じます。

具体的な設定 keyswap

01_caps_henkan_irekae

keyswapは前述のとおり、キーを入れ替えられるソフト。
まずはこれで、変換キーとCapsLockを入れ替えます。

なんでこんなことをするかというと、keyhacでCapsLockを修飾キーに設定しようとしたら、なんか出来なかったから。
なので、私は全く使わない変換キーをCapsLockの位置に持って行き、keyhacでは変換キーを修飾キーとする設定を行います。

つまり、テキストを編集している時に、

私がキーボードの「CapsLodk」と印字されたキーと「J」を押す。

Windowsは「変換 + J」が押されたと認識

keyhacが「変換 + J」の入力を「カーソルキー下」に変換

カーソルが1行下に行く

とういう流れですね。

具体的な設定 – keyhac

細かい説明は省きますが、keyhacをインストールしたら出来る、”config.py”と言う設定用のファイルの末尾に、下記をコピペするとokなはずです。

上では説明していないキーを設定していたり、もうちょっと無駄のない記述ができるかもしれませんが、私に出来るのはこんな感じです。

#----------------------------------------------------# }}}
#スペースをシフトキーの機能をもたせる(U1){{{
    #Spaceに仮想キーコード236を割り当て
    keymap.replaceKey( "Space", "236" )
    #236にU1を割り当て
    keymap.defineModifier( 236, "User1" )
    #U1にShiftの機能を割り当てる(参考:http://saldn.hatenablog.jp/entry/2014/10/12/141612)
    for keycode in range(1,255):
        keymap_global[ "U1-" + str(keycode) ] = "Shift-" + str(keycode)
    #スペースキーのみを押した時は本来の動作をする
    keymap_global[ "O-236" ] = "Space"
    #Shift,Ctrl,Altとスペースの組合せの設定
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[any + "236"] = any + "Space"
#----------------------------------------------------}}}

#変換キー(U0)----------------------------------------------------{{{
    # キーの単純な置き換え
    #変換キー(28)を仮想キーコード235に割り当て
    keymap.replaceKey( "(28)", 235 )

    # ユーザモディファイアキーの定義
    # 仮想キーコード235をユーザーモディファイア0番に割り当て
    keymap.defineModifier( 235, "User0" )

    #変換キー本来の動作をするようにワンショットモディファイア設定
    #keymap_global[ "O-235" ] = "(29)"

    #変換キーワンショットモディファイアで半角/全角(IMEのon/off)
    keymap_global[ "O-235" ] = "243"

    #シフト+変換キーでCapslock
    keymap_global[ "Shift-235" ] = "CapsLock"

    #変換+;でEscape
    keymap_global[ "U0-Semicolon"  ] = "Escape"
# }}}
# USER0-/でEnter
    keymap_global[ "U0-slash"  ] = "Enter"

# USER0-hjkl : vim風カーソル移動# {{{
    keymap_global[ "U0-h"  ] = "Left"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[any + "U0-h"  ] = any + "Left"
    keymap_global[ "U0-j" ] = "Down"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[ any + "U0-j" ] = any + "Down"
    keymap_global[ "U0-k" ] = "Up"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[ any + "U0-k" ] = any + "Up"
    keymap_global[ "U0-l"  ] = "Right"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[ any + "U0-l"  ] = any + "Right"

# }}}
#U0-N Home# {{{
    keymap_global[ "U0-n"  ] = "Home"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[any + "U0-n"  ] =any +  "Home"# }}}
#U0-M PageUp# {{{
    keymap_global[ "U0-m"  ] = "PageDown"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[ any + "U0-m"  ] = any + "PageDown"# }}}
#U0-, PageDown# {{{
        keymap_global[ "U0-Comma"  ] = "PageUp"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[ any + "U0-Comma"  ] = any + "PageUp"# }}}
#U0-. End# {{{
        keymap_global[ "U0-Period"  ] = "End"
    for any in ("S-", "C-", "C-S-", "A-", "A-S-", "A-C-", "A-C-S-", "W-", "W-S-", "W-C-", "W-C-S-", "W-A-", "W-A-S-", "W-A-C-", "W-A-C-S-","RA-RC-","RS-"):
        keymap_global[ any + "U0-Period"  ] = any + "End"
# }}}
    #U0-yuio→Shift+カーソル(範囲選択、変換中文字の範囲変更)# {{{
    keymap_global[ "U0-y"  ] = "S-Left"
    keymap_global[ "U0-u" ] = "S-Down"
    keymap_global[ "U0-i" ] = "S-Up"
    keymap_global[ "U0-o"  ] = "S-Right"

# }}}
    #U0-: BackSpace# {{{
    keymap_global[ "U0-colon"  ] = "Back"
# }}}
    #U0-] Delete# {{{
    keymap_global[ "U0-CloseBracket"  ] = "Delete"
# }}}
    # USER0-↑↓←→ : 30pixel単位のウインドウの移動# {{{
    keymap_global[ "U0-Left"  ] = keymap.command_MoveWindow( -30, 0 )
    keymap_global[ "U0-Right" ] = keymap.command_MoveWindow( +30, 0 )
    keymap_global[ "U0-Up"    ] = keymap.command_MoveWindow( 0, -30 )
    keymap_global[ "U0-Down"  ] = keymap.command_MoveWindow( 0, +30 )
# }}}
    # USER0-Shift-↑↓←→ : 1pixel単位のウインドウの移動# {{{
    keymap_global[ "U0-S-Left"  ] = keymap.command_MoveWindow( -1, 0 )
    keymap_global[ "U0-S-Right" ] = keymap.command_MoveWindow( +1, 0 )
    keymap_global[ "U0-S-Up"    ] = keymap.command_MoveWindow( 0, -1 )
    keymap_global[ "U0-S-Down"  ] = keymap.command_MoveWindow( 0, +1 )
# }}}
    # USER0-Ctrl-↑↓←→ : 画面の端まで移動# {{{
    keymap_global[ "U0-C-Left"  ] = keymap.command_MoveWindow_MonitorEdge(0)
    keymap_global[ "U0-C-Right" ] = keymap.command_MoveWindow_MonitorEdge(2)
    keymap_global[ "U0-C-Up"    ] = keymap.command_MoveWindow_MonitorEdge(1)
    keymap_global[ "U0-C-Down"  ] = keymap.command_MoveWindow_MonitorEdge(3)# }}}
    # USER0-6789 : 50pixel単位のウインドウの移動# {{{
    keymap_global[ "U0-6"  ] = keymap.command_MoveWindow( -50, 0 )
    keymap_global[ "U0-9" ] = keymap.command_MoveWindow( +50, 0 )
    keymap_global[ "U0-8"    ] = keymap.command_MoveWindow( 0, -50 )
    keymap_global[ "U0-7"  ] = keymap.command_MoveWindow( 0, +50 )
# }}}
    # USER0-6789 : 5pixel単位のウインドウの移動# {{{
    keymap_global[ "U0-S-6"  ] = keymap.command_MoveWindow( -5, 0 )
    keymap_global[ "U0-S-9" ] = keymap.command_MoveWindow( +5, 0 )
    keymap_global[ "U0-S-8"    ] = keymap.command_MoveWindow( 0, -5 )
    keymap_global[ "U0-S-7"  ] = keymap.command_MoveWindow( 0, +5 )
# }}}
    # USER0-Ctrl-6789 : 画面の端まで移動# {{{
    keymap_global[ "U0-C-6"  ] = keymap.command_MoveWindow_MonitorEdge(0)
    keymap_global[ "U0-C-9" ] = keymap.command_MoveWindow_MonitorEdge(2)
    keymap_global[ "U0-C-8"    ] = keymap.command_MoveWindow_MonitorEdge(1)
    keymap_global[ "U0-C-7"  ] = keymap.command_MoveWindow_MonitorEdge(3)
# }}}
    # USER0-各キー:Ctrl-各キー(左手範囲内で)# {{{

    keymap_global[ "U0-z"  ] = "C-z"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-z"  ] = any + "C-z"
    keymap_global[ "U0-x"  ] = "C-x"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-x"  ] = any + "C-x"
    keymap_global[ "U0-c"  ] = "C-c"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-c"  ] = any + "C-c"
    keymap_global[ "U0-v"  ] = "C-v"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-v"  ] = any + "C-v"
    keymap_global[ "U0-b"  ] = "C-b"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-b"  ] = any + "C-b"
    keymap_global[ "U0-a"  ] = "C-a"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-a"  ] = any + "C-a"
    keymap_global[ "U0-s"  ] = "C-s"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-s"  ] = any + "C-s"
    keymap_global[ "U0-d"  ] = "C-d"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-d"  ] = any + "C-d"
    keymap_global[ "U0-f"  ] = "C-f"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-f"  ] = any + "C-f"
    keymap_global[ "U0-g"  ] = "C-g"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-g"  ] = any + "C-g"
    keymap_global[ "U0-q"  ] = "C-q"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-q"  ] = any + "C-q"
    keymap_global[ "U0-w"  ] = "C-w"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-w"  ] = any + "C-w"
    keymap_global[ "U0-e"  ] = "C-e"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-e"  ] = any + "C-e"
    keymap_global[ "U0-r"  ] = "C-r"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-r"  ] = any + "C-r"
    keymap_global[ "U0-t"  ] = "C-t"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-t"  ] = any + "C-t"
    keymap_global[ "U0-1"  ] = "C-1"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-1"  ] = any + "C-1"
    keymap_global[ "U0-2"  ] = "C-2"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-2"  ] = any + "C-2"
    keymap_global[ "U0-3"  ] = "C-3"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-3"  ] = any + "C-3"
    keymap_global[ "U0-4"  ] = "C-4"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-4"  ] = any + "C-4"
    keymap_global[ "U0-5"  ] = "C-5"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-5"  ] = any + "C-5"
    keymap_global[ "U0-Tab"  ] = "C-Tab"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-Tab"  ] = any + "C-Tab"
 #スペースキー = 236
    keymap_global[ "U0-236"  ] = "C-Space"
    for any in ("S-", "A-", "A-S-", "W-", "W-S-", "W-A-", "W-A-S-","RS-"):
        keymap_global[any + "U0-236"  ] = any + "C-Space"

まとめ

この設定で慣れると、他のPCを使った時に一生懸命CapsLockを無駄に押してしまう、というのが数少ない欠点です。
あと、リモートで他のPCに接続した時も、この設定は有効にならなかったりするので、一瞬戸惑ってしまいます。

でも、一回やったらやめられなくなりますよ。

 - PC, ガジェット