はじめに
VSCodeVimのデフォルトのUndo/Redoは、拡張機能側の独自実装なので、本来のVSCodeのUndo/Redo機能とは挙動が多少異なることがある。
- Undoで変更前の状態に戻しても変更されたファイルとして扱われる
- 外部 (Git等) でファイルの内容が変更された場合、全く戻すことができない
大きな問題にはならないが、違和感を感じたので、ユーザ設定を変更しVSCodeVimでVSCode本体のUndo/Redoを呼ぶように変更する。具体的には、vim.normalModeKeyBindingsを変更する。
keybindings.jsonで変更することも考えたが、uが見つからなかったため断念した。
(Ctrl+Rはできる)
注
otherModeKeyBindingsはv0.13.0(2018-06-18)でnormalModeKeyBindingsに変更された。
それに伴い、本文中の記述も一部変更した。
ユーザ設定
以下の内容を、ユーザ設定ファイルに追加する。
{
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": [
"u"
],
"after": [],
"commands": [
{
"command": "undo"
}
]
},
{
"before": [
"<C-r>"
],
"after": [],
"commands": [
{
"command": "redo"
}
]
}
]
}
説明
vim.normalModeKeyBindingsは、normalモードでのキーバインドを上書きするために用意されている設定である。上記ではuでundoを、Ctrl+Rでredoを実行させている。
まとめ
VSCodeVimのUndo/Redoに対する違和感が解消できた。他にも、vim.handleKeysで一部のキーを無効にしたり、vim.insertModeKeybindingsで挿入モード時のキーバインドを変更したりできる。詳細はVSCodeVimを参照のこと。