はじめに
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を参照のこと。