はじめに
キーボード操作だけでVSCodeを使いたい時、ちょっとした違和感を覚える場面があります。
Ctrl + ↑
/ Ctrl + ↓
で画面をスクロールできるものの、キャレットの位置がスクロール外に残ったままのため、編集のためキーボード操作を行うと、もともとキャレットがあった行に戻ってしまいます。 これを防ぐため、画面のどこか一部をマウスでクリックし、迷子になったキャレットを呼び戻してあげる必要があります。せっかくキーボード操作でスクロールできるのに惜しい。
解決方法
keybindings.json
に以下を追加します:
[ ctrl + p ] 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
が有効になっている場合、編集再開時にスクロール位置が微妙にずれることがあります。上部にスティッキー表示されるスコープ行の行数が内部的に考慮されてないことが原因のようですが、これを補正する方法は現時点ではなさそうです。