前回 紹介したKarabiner-Elementsを使ったVim emulationで ESC等のモード変換キーを切り分けて、 さらにJKの同時押しなどSimultaneous keysによる モード変換を入れました。
Vim emulationでの変換モードの切り分け
manipulators
のリストを別のrule
として分けたとしても特に問題は無いので
分けただけ。
ただ、入力キーが被ると前の方が優先されるのでちょっと注意が必要です。
同じキーでも条件によって違う動作をする場合は複数の設定がありますが、 特定の条件では同じになるものもあって順序が逆になると動作がおかしくなるものがあります 1。
今のところ
- ESC to enter normal mode
- Ctrl-[ to enter normal mode
- Simultaneous jk to toggle normal-insert mode
- Simultaneous sd to toggle normal-insert mode
- Vim emulation core part
の5つの設定がありますが、最後のものがVimライクな操作を設定するものなので必ず必要なもの。 後のはモードを変更するための設定でどれかをEnableすればOKです。
ただし、Simultaneousな2つの設定については JやSがcoreの中で使われているので Enable listの中で必ずVim emulation core partより上にある必要があります。
Simultaneous keysの設定方法
Simultaneous jkという設定はJ、Kを同時に押した時に その効果が発動する設定です。
JやK単独で押した時には通常のJ、Kもしくはそれに割り当てられた動作をします。
設定方法としては、まずJについてのマッピングで、
to
にset_variable
で適当な変数の値を変えるto_if_alone
に本来のJの機能を与える(何もしてないなら"key_code": "j"
)。to_after_key_up
に変数の値を戻す設定をする。
次にKに
conditions
でvariable_if
の設定を行い、上で変更した変数の条件を設定して行いたい動作を与える。
な感じでやっています。
下のものはちょっと省略したものですが、Simultaneous jkの設定です。
Normal-InsertのトグルなのでJ、Kについてそれぞれ2つずつの設定があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
|
現状のSimultaneous keysの問題点
実際にはちょっと完璧な設定ではなく、 Jを押している間にKが押されたらその動作をする、という設定です。
先にKを押してJを押すと発動しません。
なのでちょっと使うにしても慣れる必要があるかもしれません。
また、このキー設定をしてしまうと、
Jのリピート入力
(Jを押しっぱなしにした時にjjjjjj...
と書き込む事)
ができなくなります。
Vim emulationのノーマルモードでもJを押しっぱなしで 下に移動を続ける、ということが出来なくなります。
なので(Vimでは)余り押しっぱなしで使うことのないsdの方が使い勝手が良いかもしれません。
そもそもこのto_if_alone
等の設定がSimultaneous keys用に作られたものでも無いと思いますが、
そのうち別にsimultaneous: ..
みたいな設定が出来る様になるかもしれません。
(もしかすると既にその手の設定が既に出来る様になってるかもしれませんが。)
-
- 条件Aの場合: a=>b
- 条件なし: a=>c
みたいな変換をした場合、この順番に書けばAの条件の時には
a
でb
が出ますが、 逆に書くとAの条件でもc
が出ます。 ↩