Vscodeのマルチカーソルでctrl+矢印が使えない件
キー割り当ての条件をいじるひつようがあります
スクリーンリーダーを使っているとき、複数のカーソルを置いている状態で ctrl+右矢印などを押すと、全てのセカンダリーカーソルが消えてしまいます。これは今は仕様です。スクリーンリーダーでも使えるようにするには、キー割り当ての条件を変更する必要があります。ただし、副作用として、ワード単位で移動したときのスクリーンリーダーの読み上げが信頼できなくなります。
変更方法
- ctrl+shift+p または f1 でコマンドパレットを表示
- keyboard shortcuts を実行
- shift+tab を押していって、 open key bindings JSON でエンターする
- JSON が開くので、いかを追記する。
{ "key": "ctrl+right", "command": "cursorWordEndRight", "when": "textInputFocus" },
{ "key": "ctrl+shift+right", "command": "cursorWordEndRightSelect", "when": "textInputFocus" },
{ "key": "ctrl+left", "command": "cursorWordLeft", "when": "textInputFocus" },
{ "key": "ctrl+shift+left", "command": "cursorWordLeftSelect", "when": "textInputFocus" },
詳細
デフォルトの状態では、 ctrl+left/right のショートカットには、 cursorWordEndRight, Control+RightArrow, DefaulttextInputFocus && !accessibilityModeEnabled
のような発動条件が設定されています。これを見ると分かるように、 ctrl+矢印は、アクセシビリティーモードがオフ、つまり、スクリーンリーダーを使っていないときのみ発動するようになっています。つまり、ctrl+矢印は、スクリーンリーダーを使っているときには Chromium の実装に任せられているということになります。ただ、 Chromium の実装はマルチカーソルを考慮していないため、セットしていたセカンダリーカーソルは全て消えてしまうようです。
なので、ctrl+矢印を、本来 vscode が持っている実装にキー割り当てすることで、マルチカーソルが消えなくなります。やり方として、JSON にさっきのを記述して、アクセシビリティーモードの条件を外しています。
ただ、これをするときに、いくつか注意があります。
まず、移動の単位が Chromium の実装と微妙に違うことです。これは、まあそういうものです。
次に、移動後に NVDA の読み上げる場所と、実際に移動した場所が一致しないことです。これは、vscode 側のカスタム実装によってカーソルが制御されていて、NVDA が移動先を誤認識するためと思われます。これは、今はしょうがないので、点字ディスプレイで確認するか、移動する位置を事前に予測して使う必要があります。
詳しい内容は、以下の issue に書いてあります。