VSCodeVim使用不同的撤销堆栈,当撤消vim撤销堆栈中所有未保存的更改后,它会让我烦恼,VSCode仍显示该文件未保存。出于这个原因,我想使用VSCode的撤销堆栈并将“u”映射到“Ctrl + z”。 我的键绑定如下:
{ "key": "u", "command": "undo", "when": "editorTextFocus && !editorReadonly && vim.active && vim.mode != 'Insert'" }
问题在于,即使我指定它在vim模式为Insert时也不起作用,它仍会撤消上一次更改并插入“u”。任何人都可以建议重新绑定撤消的正确方法是什么?
答案 0 :(得分:3)
我尝试了Doktor OSwaldo的提议但由于某种原因它不起作用。 但是我设法找到了解决方案:
"vim.otherModesKeyBindingsNonRecursive": [
{
"before": ["u"],
"after": [],
"commands": [
{
"command": "undo",
"args": []
}
]
}
]
答案 1 :(得分:1)
... "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": []
}
]
}
]