VS CodeのターミナルでCtrl+Backspaceが機能しない問題の解決策
私は.inputrcに以下の設定を追加して、Bash上でCtrl+Backspaceを入力すると単語単位で削除できるようにしています。
"\C-h": backward-kill-word
Windows Terminalではこの設定が有効になり、Ctrl+Backspaceで単語単位で削除できるのですが、VS Codeの統合ターミナルではこの設定が有効にならず、Ctrl+W(unix-word-rubout)のように直前のスペースまで削除されてしまいます。
$ cd /path/to/some/directory| # カーソル位置が|のとき、Ctrl+Deleteを押すと↓
$ cd | # スペースの前まで削除される(意図しない動作)
$ cd /path/to/some/directory| # カーソル位置が|のとき、Ctrl+Deleteを押すと↓
$ cd /path/to/some/| # 1単語ずつ削除される(意図した動作)
動作を確認した環境
バージョン: 1.91.0 (user setup)
コミット: ea1445cc7016315d0f5728f8e8b12a45dc0a7286
日付: 2024-07-01T18:52:22.949Z
Electron: 29.4.0
ElectronBuildId: 9728852
Chromium: 122.0.6261.156
Node.js: 20.9.0
V8: 12.2.281.27-electron.0
OS: Windows_NT x64 10.0.22631
解決策
解決策1(オススメ)
VS Codeの統合ターミナルでCtrl+Backspaceのショートカットを有効にするためには、VS Codeの設定でterminal.integrated.commandsToSkipShell
に"-workbench.action.terminal.sendSequence"
を追加します。
{
"terminal.integrated.commandsToSkipShell": [
"-workbench.action.terminal.sendSequence"
]
}
解決策2
もしくは、terminal.integrated.sendKeybindingsToShell
をtrueに設定します。この設定をtrueにすることで、VS Codeの統合ターミナルでショートカットがシェルに送信されるようになります。
この設定を有効にするといろいろなショートカットがシェルに送信されるようになるため、VS Codeのターミナル機能に付いている他のショートカットに影響が出るかもしれません。
{
"terminal.integrated.sendKeybindingsToShell": true
}
原因
VS Codeの統合ターミナルでは、Ctrl+Backspaceのショートカットがデフォルトでworkbench.action.terminal.sendSequence
に割り当てられています。
そのため、VS Codeのターミナル上でCtrl+Backspaceを入力すると、Ctrl+Backspaceという情報がシェルに送信されず、workbench.action.terminal.sendSequence
というコマンドが実行されてしまい、その結果、直前のスペースまで削除されてしまいます。
解決策1もしくは解決策2を実施することで、ターミナル上でworkbench.action.terminal.sendSequence
が実行されることがなくなってCtrl+Backspaceのショートカットがシェルに送信され、.inputrcに記載した"\C-h": backward-kill-word
の設定が有効になります。
まとめ
.inputrcに"\C-h": backward-kill-word
を記載した時の動作確認をVS Codeの統合ターミナルで行っていて、一向に動作しないことに悩まされていました。しかし、試しにWindows Terminalで同じ設定を行ったところ、Ctrl+Backspaceで単語単位で削除できることが確認できたため、VS Codeの設定に問題があることがわかりました。
私と同じような状況に悩まされている方がいれば、この記事が解決する手助けになれば幸いです。
Discussion