WindowsのVSCodeからLinux環境にRemote接続する場合のTerminalのキーバインド設定

このエントリーは、Visual Studio Code Advent Calendar 2020 の24日目エントリーです。

qiita.com

macOSVSCodeのターミナルでは、VSCodeはCommandキー中心のショートカットの体系となっているため、Ctrlキー主体のターミナルのキーバインドは基本的に重複しません。

しかしWindowsVSCodeではVSCodeのショートカットは、Ctrlキーを中心に使用します。このため、WindowsVSCodeからLinuxサーバーにSSHでリモート接続する 場合は、リモート接続したターミナル上でVSCodeキーバインドが優先されてしまいます。

重複する主なキーバインドは次の通りです。1

キー入力 ターミナル上でのキーバインド VSCode上のキーバインド
Ctrl+ p previous-history Go to file
Ctrl+ e end-of-line Go to file
Ctrl+ n next-history New File
Ctrl+ k kill-line Open Folder(Ctrl+k Ctrl+o)等のシーケンスで使用
Ctrl+ f forward-char Find

この問題に対応するには、VSCodeの設定ファイルであるkeybindings.jsonに次のような設定を記述します。

{
    "key": "(重複するショートカット)",
    "command": "terminal.integrated.commandsToSkipShell",
    "when": "terminalFocus"
}

keybindings.jsonを設定するには、次の手順を踏みます。

  • コマンドパレットから「Open Keyboard Shortcuts(JSON)」を選択する

  • keybindings.json上で Ctrl + Kを二回入力する

  • 設定するキーバインドを入力すると、keybindings.json上に設定の雛形が表示される

  • command:"terminal.integrated.commandsToSkipShell"を入力する

  • when:"terminalFocus" を入力する

設定を行ったkeybindings.jsonの例を次に示します。

[{
    "key": "ctrl+e",
    "command": "terminal.integrated.commandsToSkipShell",
    "when": "terminalFocus"
},
{
    "key": "ctrl+p",
    "command": "terminal.integrated.commandsToSkipShell",
    "when": "terminalFocus"
},{
    "key": "ctrl+n",
    "command": "terminal.integrated.commandsToSkipShell",
    "when": "terminalFocus"
},{
    "key": "ctrl+k",
    "command": "terminal.integrated.commandsToSkipShell",
    "when": "terminalFocus"
},{
    "key": "ctrl+f",
    "command": "terminal.integrated.commandsToSkipShell",
    "when": "terminalFocus"
}
]

この設定を行うと、ターミナル上では、シェルのキーバインドが優先され、エディターグループやサイドバー等の上では、VSCode自体のキーバインドが有効になるようになります。


  1. bashの場合