4

VSCodeVim 使用不同的撤消堆栈,当撤消 vim 撤消堆栈中所有未保存的更改后,VSCode 仍然显示文件未保存,这让我很恼火。出于这个原因,我想使用 VSCode 的撤消堆栈并将“u”映射到“Ctrl+z”。我的键绑定如下:

{
    "key": "u",
    "command": "undo",
    "when": "editorTextFocus && !editorReadonly && vim.active && vim.mode != 'Insert'" 
}

问题是即使我指定当vim模式为Insert时它不应该工作,它仍然会撤消最后的更改并插入'u'。谁能建议重新绑定撤消的正确方法是什么?

4

2 回答 2

9

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

"vim.otherModesKeyBindingsNonRecursive": [ 
     { 
         "before": ["u"], 
         "after": [],
         "commands": [
             {
                 "command": "undo", 
                 "args": []
             }
         ] 
     } 
 ]
于 2017-11-28T15:29:35.133 回答
2

捎带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": []
                }
            ] 
        } 
    ]
于 2021-04-03T23:41:04.360 回答