VSCode + VSCodeVim撤消键重新绑定

Nik*_*sky 2 visual-studio-code vscodevim

VSCodeVim使用不同的撤消堆栈,撤消vim撤消堆栈中所有未保存的更改后,它使我很烦,VSCode仍然显示该文件未保存。因此,我想使用VSCode的撤消堆栈,并将“ u”映射到“ Ctrl + z”。我的绑定如下:

{
    "key": "u",
    "command": "undo",
    "when": "editorTextFocus && !editorReadonly && vim.active && vim.mode != 'Insert'" 
}
Run Code Online (Sandbox Code Playgroud)

问题是,即使我指定在vim模式为Insert时也不起作用,它仍会撤消上一次更改并插入'u'。谁能建议重新绑定撤消的正确方法是什么?

小智 16

借鉴dtasev评论

...这"args": []似乎没有必要,并且"otherModesKeyBindingsNonRecursive"不再作为选项存在。我将我的绑定到normalModeKeyBindings. 还必须<C-r>使用redoVSCode 的重做堆栈

关于这个答案(并且要明确地使用 JSON),这是我在 settings.json 中使用的内容,vim.normalModeKeyBindingsNonRecursive而不是vim.normalModeKeyBindings

"vim.normalModeKeyBindingsNonRecursive": [
        { 
            "before": ["u"], 
            "after": [],
            "commands": [
                {
                    "command": "undo", 
                    "args": []
                }
            ] 
        }, 
        { 
            "before": ["<C-r>"], 
            "after": [],
            "commands": [
                {
                    "command": "redo", 
                    "args": []
                }
            ] 
        } 
    ]
Run Code Online (Sandbox Code Playgroud)


Nik*_*sky 5

我尝试了Doktor OSwaldo的建议,但是由于某种原因,它没有用。但是我设法找到一个解决方案:

"vim.otherModesKeyBindingsNonRecursive": [ 
     { 
         "before": ["u"], 
         "after": [],
         "commands": [
             {
                 "command": "undo", 
                 "args": []
             }
         ] 
     } 
 ]
Run Code Online (Sandbox Code Playgroud)

  • 很不错!`"args": []` 似乎没有必要,并且 `"otherModesKeyBindingsNonRecursive"` 不再作为选项存在。我将我的绑定到“normalModeKeyBindings”。还将 `&lt;Cr&gt;` 绑定到 `redo` 以使用 VSCode 的重做堆栈 (4认同)