Posted at

VSCodeの統合ターミナルでもターミナルのUndoを使いたい

iTermなどではCtrl + _でUndoができますが、VSCodeの統合ターミナルではうまく動きませんでした。

ただ、VSCode v1.28からworkbench.action.terminal.sendSequenceというコマンドが使えるようになったらしく、この機能でエスケープシーケンスを送ることでUndoのショートカットを作ることができました。

https://code.visualstudio.com/docs/editor/integrated-terminal#_send-text-from-a-keybinding


keybindings.json

{

"when": "terminalFocus",
"key": "ctrl+[IntlRo]",
"command": "workbench.action.terminal.sendSequence",
"args": { "text": "\u001f" }
},

whenにはterminalFocusを指定して、ターミナルにフォーカスしているときだけショートカットを有効にします。

日本語キーボードだと、_のキーはIntlRoになるみたいなので、keyにはctrl+[IntlRo]を指定します。英字配列だとまた別のキーになると思います。

https://www.w3.org/TR/uievents-code/#code-IntlRo

Ctrl + _が押されたときに送信されるエスケープシーケンスはUS0x1fなので、argstextには\u001fを指定します。textには\u0000のような形式で書く必要があるみたいです。

VSCodeの統合ターミナルでは一部のエスケープシーケンスが送信されないことがあるみたいなので、workbench.action.terminal.sendSequenceを使ってショートカットを作ることで作業効率を上げることができそうです。