VSCode + VSCodeVim撤消键重绑定

时间:2017-11-28 08:36:16

标签: visual-studio-code vscodevim

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

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

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

2 个答案:

答案 0 :(得分:3)

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

"vim.otherModesKeyBindingsNonRecursive": [ 
     { 
         "before": ["u"], 
         "after": [],
         "commands": [
             {
                 "command": "undo", 
                 "args": []
             }
         ] 
     } 
 ]

答案 1 :(得分:1)

利用dtasevcomment

<块引用>

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

this answer 上(并明确使用 JSON),这是我使用 vim.normalModeKeyBindingsNonRecursive 而不是 vim.normalModeKeyBindings 放入我的 settings.json 中的内容:

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