概略
MacでDvorak–QWERTY ⌘配列を使用していましたが、VS Codeでは⌘キーを押している間もDvorak配列のままになってしまう問題が発生しました。この問題はVS Codeのsettings.jsonを書き換えることで解決しました。この記事ではDvorak配列についての簡単な説明と、問題の解決方法を紹介します。解決方法に関しては次のGitHubのissuesが主に参考になりました。
環境
macOS Catalina 10.15.7
VS Code 1.58.2
キー配列について
Dvorak配列とは
Dvorak配列とは英語でよく現れる文字が打ちやすい位置になるようにキーが配置されたキーボード配列です。例えば左のホームポジションには左から a, o, e, u, i の順に母音のキーが、右のホームポジションには左から d, h, t, n, s と並んでいます。Wikipediaによれば、文章での出現頻度と辞書の単語での出現頻度とで値に違いはありますが、文章での子音の出現頻度に注目すると大きい順に
- T - 9.1%
- N - 6.7%
- S - 6.3%
- H - 6.1%
- R - 6.0%
- D - 4.3%
となっています。また母音は一単語に必ず一度出現するので、よく使われるアルファベットが一番打ちやすい位置に配置されていることが分かります。このことから、Dvorak配列は英語のタイピングをスムーズにできることが分かります。
Macでは特別なソフトを入れずにキーボード配列をDvorakに設定できます。変更方法はApple公式サイトをご参照ください。
Dvorak–QWERTY ⌘配列とは
上で述べたように、Dvorak配列には英語のタイピングをスムーズにするというメリットがありますが、一方でショートカットが使いにくくなるというデメリットもあります。通常のQWERTY配列では取り消し、カット、コピー、ペースト(⌘ + z, x, c, v)など、よく使うショートカットが左手側に集まっています。そのため文章に限らず編集作業をする際に、右手でマウスを操作しながら、左手で ⌘(Commandキー)を押しながら z, x, c, v といったショートカットキーを押せます。しかしながらこれらのキーはDvorak配列では全て右側に散らばってしまい、押しにくい位置に配置されています。
この問題を解消するのがDvorak–QWERTY ⌘配列です。Dvorak–QWERTY ⌘配列とは通常時はDvorak配列であり、⌘を押している間だけはQWERTY配列になるというキーボード配列です。つまりDvorak–QWERTY ⌘配列とは英語のタイピングのしやすさはそのままに、QWERTY配列のショートカットも利用できるようにしたキーボード配列と言えます。
MacでのDvorak–QWERTY ⌘配列の設定方法は前記のApple公式ページをご参考ください。
発生した問題
私のMac(Version: macOS Catalina 10.15.7)上では問題なくDvorak–QWERTY ⌘配列が機能し、平常時はDvorak配列で、⌘押下時はQWERTY配列で利用出来ていました。しかしVS Code(Version: 1.58.2)上で論文を書こうとしたところ、⌘を押してもDvorak配列のままになってしまうという問題に直面しました。
解決方法
調べたところ、この問題の解決には次の2つの方法があるようです。
- VS Codeのバージョンを1.10に下げる
- setting.jsonに
"keyboard.dispatch": "keyCode"
を加筆する
参考ページ(概略で提示したリンクと同一)
今回、私は後者のsetting.jsonへの加筆で問題が解決しました。前者の方法は試していないのでご了承ください。settings.jsonの開き方は次のQiitaの記事などが参考になります。
上記Qiita記事に掲載されている方法以外にsettings.jsonを開く手順として、次のような方法もあります。
- ウィンドウ左のメニューバー一番下の歯車のアイコンを選択>設定をクリック>検索窓に
setting
と入力>候補中に出るsettings.jsonを編集する
をクリック - Command+Shift+Pを入力>検索窓に
settings.json
と入力>基本設定: 設定(JSON)を開く
を選択(既定の設定(JSON)を開く
ではない)
入力例
JSONファイルの書き方に関しては次のサイトなどを参考にしてください。
例えば元のsetting.jsonファイルが
{
“key1” : “value1”,
“key2” : “value2”
}
となっていた場合、ここに加筆すると
{
“key1” : “value1”,
“key2” : “value2”,
"keyboard.dispatch": "keyCode"
}
となります。