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