はじめに
キーボード操作だけでVSCodeを使いたい時、ちょっとした違和感を覚える場面があります。
Ctrl + ↑
/ Ctrl + ↓
で画面をスクロールできるものの、キャレットの位置がスクロール外に残ったままのため、編集のためキー入力を行うと表示が元に戻ってしまいます。 これを防ぐため、画面のどこか一部をマウスでクリックし、迷子になったキャレットを呼び戻してあげる必要があります。せっかくキーボード操作でスクロールできるのに惜しいでs。
解決方法
keybindings.json
に以下を追加します:
{
"key": "ctrl+up",
"command": "editorScroll",
"args": {
"to": "up",
"by": "line",
"revealCursor": true
},
"when": "editorTextFocus"
},
{
"key": "ctrl+down",
"command": "editorScroll",
"args": {
"to": "down",
"by": "line",
"revealCursor": true
},
"when": "editorTextFocus"
}
設定ファイルの開き方
-
Ctrl + Shift + P
でコマンドパレットを開く -
Open Keyboard Shortcuts (JSON)
を選択 - 開いた
keybindings.json
に追加
revealCursor: true
の意味
今回の問題を解決するのが revealCursor: true
の設定です。これを有効にすると、スクロールしてもキャレットが画面内に追随するようになります。Vimでは当然の挙動ですが、これで同様になります。わざわざこのような設定を内蔵しているのであれば、デフォルトで有効にしておいてほしいですが。
なお、editor.stickyScroll.enabled
が有効になっている場合、編集再開時にスクロール位置が微妙にずれることがあります。上部にスティッキー表示される行数が内部的に考慮されてないことが原因のようですが、これを補正する方法は現時点ではなさそうです。
補足:keybindings.json
で補完が効くため設定探しをしやすい
keybindings.json
で補完が効くと気づいたことが、この設定を見つけるきっかけになりました。 key: ctrl+up
のようにショートカットキーだけ分かっていれば、補完を頼りに command
や args
、revealCursor
などのパラメータも自然に発見できます。
設定ファイルの構成を学ぶことに抵抗がある方でも、補完のおかげで気軽に手探りで試せるのがうれしいところです。「仕組み化」がよくできてるなあと感心します。
まとめ
VSCodeでキーボードスクロール時にキャレットが追従しないのは意外な落とし穴です。慣れれば慣れるほどキーボード操作が増えるものですが、もともとマウスレスが前提のVimと比べると、まだまだ細かい点で改善が必要と感じます。VSCodeマスターが増えて、デフォルト設定のままでも問題なく使えるよう、いずれ改善されることを期待します!