どうも、サブタイトル通りご無沙汰しております有末です。 この記事は Vim Advent Calendar 2016 の 24 日目の記事となります。
小指の痛み
Vim は Emacs など他のエディタとは違い、モード切り替えの概念があるため、修飾キーを押す機会は少なめです。 しかしながら、エディタにこだわりを持つほどのヘビーユーザーであればキーボードに触れている時間は長く、一般的なユーザーに比べ指の疲労がたまりがちかと思います。
かくいう僕も、近頃小指の疲労が如実に現れだしこれはヤバイと思ったため 小指をなるべく使用しない方法 を二ヶ月ほど試行錯誤してきました。 本日はその試行錯誤に関して、お試し難易度レベルごとに書いていきたいと思います。
Level 1. Vim 内で完結する
まずは Vim の設定やプラグインだけで小指の使用頻度を下げてみましょう。
ノーマルモードにおける Ctrl/Shift の見直し
上記したとおりノーマルモードでは修飾キーを必要とする機会が少ないですが、以下のような機能はデフォルトで修飾キーを必要とします。
- 数値のインクリメント・デクリメント (
Ctrl-A, Ctrl-X
) - 画面スクロール (
Ctrl-B/F, Ctrl-D/U, Ctrl-E/Y
) - ジャンプ (
Ctrl-], Ctrl-^, Ctrl-O, Ctrl-I, Ctrl-T, W, F, E, T, G, $, ...
) - 再描画 (
Ctrl-L
) - やり直し (
Ctrl-R
) - ブロック選択 (
Ctrl-V
) - ウィンドウ関連 (
Ctrl-W
) - インサートモードへの切り替え (
I, A, O
) - ペースト (
P
) - etc...
そこで、使用頻度が高いマッピングの Ctrl/Shift
をSpace
に割り当て直し、小指の代わりに親指を使うようなマッピングを定義しました。
なお、ノーマルモードにて Space
は l
と同じ機能 (カーソルを右に移動) が割当たっているため潰しても問題ありません (vimでキーマッピングする際に考えたほうがいいこと)。
" Ctrl/Shift の代わりに Space を利用する (使用感が大きく異なるため非推奨) " バッティングするため個人的に使用頻度が高いものを優先的に割当ている nnoremap <Space> <Nop> " Shift nnoremap <Space>a A nnoremap c<Space>4 C nnoremap d<Space>4 D nnoremap <Space>f F nnoremap <Space>g G nnoremap <Space>j J nnoremap <Space>k K nnoremap <Space>n N nnoremap <Space>p P nnoremap <Space>4 $ nnoremap <Space>5 % " Ctrl nnoremap <Space>c <C-c> nnoremap <Space>d <C-d> nnoremap <Space>u <C-u> nnoremap <Space>e <C-e> nnoremap <Space>y <C-y> nnoremap <Space>] <C-]> nnoremap <Space>6 <C-^> nnoremap <Space>o <C-o> nnoremap <Space>i <C-i> nnoremap <Space>t <C-t> nnoremap <Space>l <C-l> nnoremap <Space>r <C-r> nnoremap <Space>v <C-v> nnoremap <Space>ww <C-w>w nnoremap <Space>wp <C-w>p nnoremap <Space>wh <C-w>h nnoremap <Space>wj <C-w>j nnoremap <Space>wk <C-w>k nnoremap <Space>wl <C-w>l
なお、コメントにも書いてある通り上記のマッピングは非推奨です。
試してみればわかるかと思いますが Space
は修飾キーではないため押しっぱなし系のマッピングには使えません。
例えば、画面を下にスクロールする場合は Ctrl
を押したまま d
を連打することでスクロールが出来ますが、上記のマッピングでは
Space
を押したまま d
を連打すると最初の一回のみスクロールが発生し、残りはすべて dd
の機能である行削除が発生します。
これではマトモに使えないため kana/vim-submode というプラグインの力を借りることにします。
vim-submode は 特定のマッピングによりユーザーが独自に追加したモードに入ることができるプラグイン です。
上記のスクロールの例では「Space-d
でスクロールモード (独自) に入り、スクロールモード内で d
を押した場合は下にスクロールする」というように定義してあげると Ctrl-d
の使用感を模倣することが出来ます。
そのため、以下のようなマッピングを定義すると Ctrl
の使用感を大きく変えずに Space
を代わりに利用することが出来ます。
" NOTE: vim-submode はインストール済みと仮定 " Ctrl/Shift の代わりに Space を利用する (vim-submode 必須) " バッティングするため個人的に使用頻度が高いものを優先的に割当ている nnoremap <Space> <Nop> " J call submode#enter_with('J', 'n', '', '<Space>j', 'J') call submode#map('J', 'n', '', 'j', 'J') " N call submode#enter_with('N', 'n', '', '<Space>n', 'N') call submode#map('N', 'n', '', 'n', 'N') " % call submode#enter_with('%', 'n', '', '<Space>5', '%') call submode#map('%', 'n', '', '5', '%') " Ctrl-d/u -> Ctrl-b/f/d/u/e/y call submode#enter_with('scroll', 'n', '', '<Space>d', '<C-d>') call submode#enter_with('scroll', 'n', '', '<Space>u', '<C-u>') call submode#map('scroll', 'n', '', 'b', '<C-b>') call submode#map('scroll', 'n', '', 'f', '<C-f>') call submode#map('scroll', 'n', '', 'd', '<C-d>') call submode#map('scroll', 'n', '', 'u', '<C-u>') call submode#map('scroll', 'n', '', 'e', '<C-e>') call submode#map('scroll', 'n', '', 'y', '<C-y>') " Ctrl-]/^/o/i/t call submode#enter_with('jump', 'n', '', '<Space>]', '<C-]>') call submode#enter_with('jump', 'n', '', '<Space>6', '<C-^>') call submode#enter_with('jump', 'n', '', '<Space>o', '<C-o>') call submode#enter_with('jump', 'n', '', '<Space>i', '<C-i>') call submode#enter_with('jump', 'n', '', '<Space>t', '<C-t>') call submode#map('jump', 'n', '', ']', '<C-]>') call submode#map('jump', 'n', '', '6', '<C-^>') call submode#map('jump', 'n', '', 'o', '<C-o>') call submode#map('jump', 'n', '', 'i', '<C-i>') call submode#map('jump', 'n', '', 't', '<C-t>') " Ctrl-r call submode#enter_with('redo', 'n', '', '<Space>r', '<C-r>') call submode#map('redo', 'n', '', 'r', '<C-r>') " Shift nnoremap <Space>a A nnoremap c<Space>4 C nnoremap d<Space>4 D nnoremap <Space>f F nnoremap <Space>g G nnoremap <Space>k K nnoremap <Space>p P nnoremap <Space>4 $ " Ctrl nnoremap <Space>c <C-c> nnoremap <Space>l <C-l> nnoremap <Space>v <C-v> nnoremap <Space>ww <C-w>w nnoremap <Space>wp <C-w>p nnoremap <Space>wh <C-w>h nnoremap <Space>wj <C-w>j nnoremap <Space>wk <C-w>k nnoremap <Space>wl <C-w>l
vim-submode が正常にインストールされていれば上記によりほぼ Ctrl/Shift
と使用感を変えずに Space
を使うことが出来、小指の使用頻度削減に貢献できます。
なお vim-submode に関してより詳しく知りたい場合は :help submode
や以下を参照してください。
インサートモードにおける Shift キー (Sticky shift / Software Capslock)
インサートモードでは大文字の入力に Shift
を利用するため小指の疲弊につながります。
しかし、ノーマルモードと違い Space
のような打ちやすく潰しても問題ないキーが無いため、上記のような再割当ては難しく仕方なく Shift
を打つことが多いと思います。
この問題に対しての解決策として Sticky shift という方法があります。
Sticky shift を設定すると「粘着キー」の次に押されたキーが Shift
と同時に押されたように振る舞います。
具体的には粘着キーを ;
に割り当てた場合に ;a
と入力すると A
が入力されるという形です(HogePiyo
と入力する場合は ;hoge;piyo
と入力)。
Sticky shift を導入すれば大文字を入力する際に Shift
を押しっぱなしにする必要が無いため、小指に対する負荷を若干下げることが出来ます。
また、上記のように粘着キーを ;
に割り当てれば負荷が右手の小指/薬指に分散されるため左 Shift
を多用するタイプの人であれば左手小指の負荷を大幅に削減することが出来ます。
この Sticky shift を Vim で実現する方法に関しては Hack #54: VimでSticky Shiftを実現する が詳しいですが、ここに
記載されている方法ではノーマルモードでの r
による一文字置き換え時に利用できないという欠点や連続で大文字を入力する場合に面倒という欠点があります。
その欠点も補ったものを lambdalisue/pinkyless.vim というプラグインとして作成したので Sticky shift を導入してみたい方はご利用ください。
上記プラグインをインストールするだけで以下の機能を提供します
- インサートモード時に
;
を押すと Sticky mode に入る (Sticky shift)- デフォルトではコマンドラインでも利用可能
- 次に押されたキーが
Shift
と同時に押されたように振る舞う ;
自体を入力したい場合はSpace
を続けて入力する;
と改行を入力したい場合はEnter
を続けて入力する
- ノーマルモードで
r
を押したときに入る一文字置換モードでも上記のルールが適用される - インサートモードにて大文字を連続入力したい場合は
F10
を押すと CapsLock がかかった状態を模倣する (Software Capslock)- デフォルトではコマンドラインでも利用可能
- 再度
F10
を押すと戻る - ハード的な CapsLock では無いためインサートモードを抜けると自動的に戻る
なお、上記記事およびプラグイン双方 US 配列を基準としているので JIS 配列をご利用の方はご注意ください。
Level 2. Vim の外でも Sticky shift 対応する
Vim 以外のエディタにはモードという概念があるわけではないため Ctrl/Shift
を Space
に置き換えるようなアグレッシブな方法を取ることは出来ませんが、最後に紹介した Sticky shift に関しては対応できます。
Vim Adevent Calendar の記事ですが、ここからはほとんど Vim の話は出てきません。
Mac OS X の場合
Mac OS X の場合は Karabiner を利用することで Sticky shift を Vim 外で実現することが出来ます。
なお上記 Karabiner は 2016/12/24 現在 macOS Sierra には対応しておらず、僕が知る限り代替手段もないため下記の方法は Mac OS X Elcapitan までの方法となります。
Karabiner にはデフォルトで ;
を修飾キーとする Stick shift が提供されていますが、以下のような問題点があります。
;;
とした場合でも:
とならず:
を入力する方法を別に用意する必要がある;
とした場合でも;
とならず;
を入力する方法を別に用意する必要がある;
を長押しした場合はShift
として扱われる
これらの問題点は上記で紹介した pinkyless.vim と使用感が異なり、個人的にはとても使いにくかったため独自に private.xml
に定義しました。
private.xml
は $HOME/Library/Application Support/Karabiner/private.xml
にあるため、ファイルを直接開いて編集するか Karabiner 側から private.xml
の編集ボタンを押し、以下を定義します。
<?xml version="1.0"?> <root> <item> <name>Sticky shift with semicolon (;)</name> <appendix>Use double semicolon (;;) to insert a colon (:)</appendix> <appendix>Use semicolon + space (; ) to insert a semicolon (;)</appendix> <identifier>private.pinkyless_vim_sticky_shift_with_semicolon</identifier> <autogen> __SimultaneousKeyPresses__ KeyCode::SEMICOLON, KeyCode::SPACE, KeyCode::SEMICOLON </autogen> <autogen> __DoublePressModifier__ KeyCode::SEMICOLON, KeyCode::VK_STICKY_SHIFT_L, KeyCode::SEMICOLON, ModifierFlag::SHIFT_L <!-- JIS の場合上記を KeyCode::JIS_COLON に変更する --> </autogen> </item> </root>
ファイル保存後 Karabiner 側で Reload を行い「Sticky shift with semicolon (;)」にチェックを入れると pinkyless.vim と使用感が似た Sticky shift をどこでも利用できるようになります。
なお __SimultaneousKeyPresses__
はデフォルトで、ほぼ同時押しを行わないと認識されないようになっているので ;
を入力する際は ;
と Space
を同時押ししてください。
また上記のマッピングを行うと先の pinkyless.vim とバッティングするため pinkyless.vim を無効化するか上記マッピングを Vim では利用しないように設定して下さい(下記リンク参照)。
Linux の場合
Linux の場合は xkb の LatchMods
機能を利用することで Sticky shift を実現することが出来、デフォルトでは ISO_Level2_Latch
という名の Sticky shift が iso9995
ファイルにて提供されています。
ただ、僕の勉強不足で pinkyless.vim や Karabiner の時のように ;
を Sticky shift の粘着キーとして利用する方法に関しては調べきれていません。
そのため使用感はかなり異なりますが、左手小指の負荷を下げるために右シフトに上記 ISO_Level2_Latch
を割り当てます。
設定ファイルの置き場所などの細かい話は下記リンク先に譲るとして、以下に右 Shift を Sticky shift として利用するための設定を記載します。
// $HOME/.config/xkb/symbols/my partial modifier_keys xkb_symbols "sticky" { // NOTE: ISO_Level2_Latch = Sticky shift replace key <RTSH> { [ ISO_Level2_Latch ] }; modifier_map Shift { <RTSH> }; }; // $HOME/.config/xkb/keymap/my // Usage: xkbcomp -I$HOME/.config/xkb ~/.config/xkb/keymap/my $DISPLAY // US 配列を想定しているので JIS の方は注意 xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete+ledcaps(shift_lock)+ledscroll(scroll_lock)+lednum(num_lock)" }; xkb_symbols { include "pc+inet(evdev)+my(sticky)" }; xkb_geometry { include "pc(pc104)" }; };
これにより右 Shift が Sticky shift として利用できるようになるはずです(執筆には Mac OS X を利用しているため動作未確認)。
Windows の場合
Google 先生にお聞きください。
Level 3. 親指に仕事をさせる
上記をすべて行っても以下のような問題が発生しました
- Sticky shift は一定の効果はあるが、プログラミングで多用する
;
や:
の入力に 2 ステップ必要なのは面倒くさい - そもそも OS のショートカットで
Ctrl
などは多用されているため Vim だけで解決しても辛い
そこで根本的に考え方を変え、いつもスペースあたりでふらついている親指にキーボード配列レベルで仕事をさせることに決めました。 この考え自体は小指が痛くなり始めてから常にあったのですが、以下のような懸念があり中々実行には移せませんでした。
- 特殊なキー配列に慣れてしまうと、通常配列のキーボードが使えない
- 特殊なキー配列で利用しているとペアプロなど他人が利用する場合に混乱が生じる
- そもそも US 配列ではスペースが大きく親指に仕事をさせることが困難
ただ、上記に関しては以下のように考え直すことで解決できると判断しました。
- 基本的に自分が利用するパソコンは固定されているので、一度設定してしまえば良い。 まれに他人の PC を使う場合もあるが他人のPC利用時に最高効率で作業する必要はない。 そもそも Vim にプラグインを多量に入れて使ってるので特殊な環境に対する恐怖自体が無意味
- ペアプロはしない。する場合も Mac OS X なので Karabiner のプロファイル機能にて特殊なキー配列設定を無効化すれば良い
- US 配列の利点は記号の論理性がメインのため JIS 配列を US 配列として利用すれば良く、その場合
変換
・無変換
キー (かな
・英語
キー) が利用できる。 また US 配列はEnter
が近いという利点も存在するが、以下に紹介するように親指にEnter
を割り当てれば解決する。
上記を踏まえた上で、以下のようなキー配列を JIS Pinkyless 配列として定義しました。
http://www.keyboard-layout-editor.com/#/gists/678ab6fc95f2af3c66da1e89dc3bfede
上記のキー配列は基本的に Mac JIS 配列上で US 配列を模倣していますが、以下の点が異なります。
A
の隣はControl
(Mac JIS の場合はそのまま、PC JIS の場合は置き換え)- 左下は
Ctrl
(Mac JIS の場合は置き換え、PC JIS の場合はそのまま) `
および\
の位置を交換- 後述する ErgoDox Pinkyless 配列と合わせるため
/
の反対である\
が隣にくるため覚えやすい- プログラミングにおいて
'
や"
に近い使用用途の`
が隣に来るため覚えやすい
- PC キーの
Windows (L)
およびAlt (L)
の位置にCommand (L)
およびOption (L)
キーを移動。- 後述する ErgoDox Pinkyless 配列が PC 配列をベースとしているため
Space
はマルチファンクショナルキーに設定Space
のみを押した場合はSpace
として利用- 他のキーと同時押しした場合は
Ctrl
として利用
かな
(変換
) はマルチファンクショナルキーに設定かな
のみを押した場合はEnter
として利用- 他のキーと同時押しした場合は
Shift
として利用
英数
(無変換
) はスペースを連続して入力する際に利用するためSpace
として利用Command (R)
(カタカナ
) は改行を連続して入力する際に利用するためEnter
として利用Shift (L)
は英数
(無変換
) とし IME の OFF に利用Shift (R)
はかな
(変換
) とし IME の ON に利用
上記のキー配列は慣れるまで多少の時間がかかりますが、おかげさまで小指の使用頻度が劇的に減りました。
また、マッピング自体を大幅に変更したため上記で説明してきたような小技(Space
を代わりに利用・Sticky shift)などは完全に不要になりました。
上記を試してみたい場合は以下の設定をご利用ください。
Mac OS X の場合
以下を参考に private.xml
に <item>
を追加してください。
なお Karabiner では Capslock
に機能を割り当てられないため Mac OS X 自体の機能を使うか Seil を使います。
また JIS 配列を US 配列として使う機能は Karabiner にデフォルトで存在するため、そちらを利用します
<?xml version="1.0"?> <root> <item> <name>For Mac JIS Keyboard</name> <item> <name style="important">The following extra configurations are required.</name> <appendix><![CDATA[ * Assign "No Action" to Capslock by in Keyboard > Modifier keys... > Caps Lock ]]></appendix> <appendix><![CDATA[ * Assign "59" (CONTROL_L: 0x37) to Capslock in "Seil". ]]></appendix> <appendix>→ https://pqrs.org/osx/karabiner/seil.html</appendix> </item> <item> <name>Pinkyless : JIS Keyboard (Mac) to US Keyboard (Mac)</name> <appendix><![CDATA[ * Option_L -> Command_L ]]></appendix> <appendix><![CDATA[ * Command_L -> Option_L ]]></appendix> <appendix><![CDATA[ * Eisuu -> Space ]]></appendix> <appendix><![CDATA[ * Space -> Control_L/Space ]]></appendix> <appendix><![CDATA[ * Kana -> Shift_R/Enter ]]></appendix> <appendix><![CDATA[ * Command_R -> Enter ]]></appendix> <appendix><![CDATA[ * Shift_L -> Eisuu ]]></appendix> <appendix><![CDATA[ * Shift_R -> Kana ]]></appendix> <identifier>private.macjis_to_macus_pinkyless</identifier> <autogen>__KeyToKey__ KeyCode::OPTION_L, KeyCode::COMMAND_L</autogen> <autogen>__KeyToKey__ KeyCode::COMMAND_L, KeyCode::OPTION_L</autogen> <autogen>__KeyToKey__ KeyCode::COMMAND_R, KeyCode::RETURN</autogen> <autogen>__KeyToKey__ KeyCode::JIS_EISUU, KeyCode::SPACE</autogen> <autogen>__KeyToKey__ KeyCode::SHIFT_L, KeyCode::JIS_EISUU</autogen> <autogen>__KeyToKey__ KeyCode::SHIFT_R, KeyCode::JIS_KANA</autogen> <autogen> __KeyOverlaidModifier__ KeyCode::SPACE, KeyCode::CONTROL_L, KeyCode::SPACE </autogen> <autogen> __KeyOverlaidModifier__ KeyCode::JIS_KANA, KeyCode::SHIFT_R, KeyCode::RETURN </autogen> <autogen>__KeyToKey__ KeyCode::JIS_UNDERSCORE, KeyCode::BACKSLASH</autogen> <autogen>__KeyToKey__ KeyCode::BACKSLASH, KeyCode::BACKQUOTE</autogen> </item> </item> </root>
なお外付けの 109 キーボード (PC JIS) を利用している場合は以下をご利用ください。
<?xml version="1.0"?> <root> <item> <name>For PC JIS Keyboard</name> <item> <name style="important">The following extra configurations are required.</name> <appendix><![CDATA[ * Enable NFER (102 : JIS eisuu) in "Seil". ]]></appendix> <appendix><![CDATA[ * Enable XFER (104 : JIS kana) in "Seil". ]]></appendix> <appendix><![CDATA[ * Enable KATAKANA (54 : Right command) in "Seil". ]]></appendix> <appendix>→ https://pqrs.org/osx/karabiner/seil.html</appendix> </item> <item> <name>Pinkyless : JIS Keyboard (PC) to US Keyboard (Mac)</name> <appendix><![CDATA[ * Muhenkan (Eisuu) -> Space ]]></appendix> <appendix><![CDATA[ * Space -> Control_L/Space ]]></appendix> <appendix><![CDATA[ * Henkan (Kana) -> Shift_R/Enter ]]></appendix> <appendix><![CDATA[ * Katakana (Command_R) -> Enter ]]></appendix> <appendix><![CDATA[ * Shift_L -> Eisuu ]]></appendix> <appendix><![CDATA[ * Shift_R -> Kana ]]></appendix> <appendix><![CDATA[ * Application -> Fn ]]></appendix> <identifier>private.pcjis_to_macus_pinkyless</identifier> <autogen>__KeyToKey__ KeyCode::SHIFT_L, KeyCode::JIS_EISUU</autogen> <autogen>__KeyToKey__ KeyCode::SHIFT_R, KeyCode::JIS_KANA</autogen> <autogen>__KeyToKey__ KeyCode::PC_APPLICATION, KeyCode::FN</autogen> <autogen>__KeyToKey__ KeyCode::COMMAND_R, KeyCode::RETURN</autogen> <autogen>__KeyToKey__ KeyCode::JIS_EISUU, KeyCode::SPACE</autogen> <autogen> __KeyOverlaidModifier__ KeyCode::SPACE, KeyCode::CONTROL_L, KeyCode::SPACE </autogen> <autogen> __KeyOverlaidModifier__ KeyCode::JIS_KANA, KeyCode::SHIFT_R, KeyCode::RETURN </autogen> <autogen>__KeyToKey__ KeyCode::JIS_UNDERSCORE, KeyCode::BACKSLASH</autogen> <autogen>__KeyToKey__ KeyCode::BACKSLASH, KeyCode::BACKQUOTE</autogen> </item> </item> </root>
Linux の場合
後述しますが、執筆段階では Linux にて JIS Pinkyless 配列を利用していないため xkb で頑張ってください。
Windows の場合
Google(ry
Level MAX. セパレートタイプのキーボードを使う
ここまで来ると、もう引き返せませんね。
このレベルへと達するにあたり、いろいろと試行錯誤をしてきましたが、結局のところ物理的に親指で押しやすい位置にキーが有るものがベストのため ErgoDox EZ を購入しました。
ErgoDox がいかに素晴らしいかという紹介は先人に任せるとして、ここでは僕が利用しているマッピングとマッピングを決定する際に注意した点に関して述べたいと思います。 以下が現在僕が利用している ErgoDox Pinkyless マッピングとなります。
http://www.keyboard-layout-editor.com/#/gists/87442658ad18f4d065e49573967dd1b5
上記マッピングでは以下のような点に注意して配置を決めています。
- 可能な限り US 配列の使用感を大切にする
Ctrl
は単体利用はしない +Space
長押しの頻度は低いため複合キーとし、最も押しやすい内側の親指位置に配置(左手)Space
長押しが必要な場合も稀にあるため、外側の親指位置にSpace
単体を配置(左手)Shift
は単体利用はしない +Enter
長押しの頻度は低いため複合キーとし、最も押しやすい内側の親指位置に配置(右手)Enter
長押しが必要な場合も稀にあるため、外側の親指位置にEnter
単体を配置(右手)- IME の ON/OFF は現在の IME の状態を意識したくないため Mac の
英数/かな
を模倣して別キーとした。 また JIS Pinkyless ではキーの数と押しやすさの関係から左右のShift
を割り当てるため、近い位置である左右のShift
の下に配置 +
は-
と使用感が近いため-
の下に=
を配置[
と]
はセットだがP
の横にはキーが一つしか無い (そのうえ=
を配置している) ため左右でわかりやすい形に配置"
は Vim においてレジスタで利用するため US 配列と同様に;
の横に'
を配置\
は'
の横にキーが空いていないため\
と似た/
の横に配置~
の使用頻度が比較的高いためShift
とは逆の左手の開いている場所に配置 (Shift
は右手親指で押すため)
なお、僕の利用している ErgoDox Pinkyless マッピングに興味を持たれた方は以下がファームウェアのコードになりますので自己責任にてご利用ください。
また、デフォルトの qmk_firmware では MT(mod, kc)
の仕様上タップ -> ホールドという動作により連続タップが送られるようになっていますが、上記のように Ctrl
や Shift
を割り当てた場合ホールド時は必ずホールド動作をしてくれる方が使用感が良いです。
上記のファームウェアを利用して Ctrl
や Shift
の使用感に困った場合は以下の issue に修正 patch をコメントしてあるので、参照してください。
ちなみに Level 3. で定義した JIS Pinkyless 配列ですが、これは僕が ErgoDox にて利用している ErgoDox Pinkyless 配列と使用感を似せるように作られています。
そのため ErgoDox が無い外出先では JIS Pinkyless 自宅・職場では ErgoDox Pinkyless と、どのような環境でも親指で Ctrl/Shift
が使えるようになっています。
おわりに
現在は Level 1, 2 で紹介した小手先な手法ではなく JIS Pinkyless および ErgoDox Pinkyless 配列を使用することで小指にも優しい Vimmer を目指しております。 本日の記事は若干の Vim 要素と Vim 愛により突き動かされたキーボードカスタマイズの話でしたが、明日は Vim 界の巨匠 Koron さんの記事です。全裸待機して待ちましょう! (Kolon とタイポしていました。謹んでお詫び申し上げます orz)