♾️

VS CodeのターミナルでCtrl+Backspaceが機能しない問題の解決策

2024/07/06に公開

私は.inputrcに以下の設定を追加して、Bash上でCtrl+Backspaceを入力すると単語単位で削除できるようにしています。

.inputrc
"\C-h": backward-kill-word

Windows Terminalではこの設定が有効になり、Ctrl+Backspaceで単語単位で削除できるのですが、VS Codeの統合ターミナルではこの設定が有効にならず、Ctrl+W(unix-word-rubout)のように直前のスペースまで削除されてしまいます。

VS Codeのターミナルでの動作
$ cd /path/to/some/directory| # カーソル位置が|のとき、Ctrl+Deleteを押すと↓
$ cd |                        # スペースの前まで削除される(意図しない動作)
Windows Terminalでの動作
$ 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"を追加します。

settings.json
{
    "terminal.integrated.commandsToSkipShell": [
        "-workbench.action.terminal.sendSequence"
    ]
}

解決策2

もしくは、terminal.integrated.sendKeybindingsToShellをtrueに設定します。この設定をtrueにすることで、VS Codeの統合ターミナルでショートカットがシェルに送信されるようになります。

この設定を有効にするといろいろなショートカットがシェルに送信されるようになるため、VS Codeのターミナル機能に付いている他のショートカットに影響が出るかもしれません。

settings.json
{
    "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の設定に問題があることがわかりました。

私と同じような状況に悩まされている方がいれば、この記事が解決する手助けになれば幸いです。

GitHubで編集を提案

Discussion