search
LoginSignup
24

More than 3 years have passed since last update.

posted at

updated at

VSCodeのVimキーバインドでVSCode本体のUndo/Redoを使う

はじめに

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に変更された。
それに伴い、本文中の記述も一部変更した。

ユーザ設定

以下の内容を、ユーザ設定ファイルに追加する。

settings.json
{
    "vim.normalModeKeyBindingsNonRecursive": [
        {
            "before": [
                "u"
            ],
            "after": [],
            "commands": [
                {
                    "command": "undo"
                }
            ]
        },
        {
            "before": [
                "<C-r>"
            ],
            "after": [],
            "commands": [
                {
                    "command": "redo"
                }
            ]
        }
    ]
}

説明

vim.normalModeKeyBindingsは、normalモードでのキーバインドを上書きするために用意されている設定である。上記ではuundoを、Ctrl+Rredoを実行させている。

まとめ

VSCodeVimのUndo/Redoに対する違和感が解消できた。他にも、vim.handleKeysで一部のキーを無効にしたり、vim.insertModeKeybindingsで挿入モード時のキーバインドを変更したりできる。詳細はVSCodeVimを参照のこと。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
24