Vim for VSCode:重新映射 ctrl + e 以在插入模式下转到行尾
Vim for VSCode: Remap ctrl + e to go to end of line in insert mode
我正在使用 Vim with VSCode。
我 trying 重新映射 ctrl+e
以在插入模式下到达行尾。这是我在 settings.json
:
中写的内容
"vim.insertModeKeyBindingsNonRecursive": [{ "before": ["<C-o>", "$"], "after": ["<C-e>"] }]
不幸的是,这在某种程度上不起作用。我怎样才能重新映射它?
编辑:
根据答案,我也尝试了
"vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<C-e>"], "commands": { "command": "cursorLineEnd" } } ]
和
"vim.insertModeKeyBindingsNonRecursive": [{ "before": ["<C-e>"], "commands": "cursorLineEnd" }]
这两个都不起作用。
尝试使用 commands
选项:
"vim.insertModeKeyBindingsNonRecursive": [{
"before":[
"<C-e>"
],
"after":[],
"commands":[
{
"command":"cursorEnd",
"args":[]
}
]
}]
更新:我尝试了几种<C-...>
组合,经过几个小时的摆弄,我得出的结论是一些Ctrl
绑定根本行不通。我尝试了多种变体都无济于事,任何其他组合键似乎都可以正常工作,例如:
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": [
"j",
"k"
],
"commands": [
"cursorLineEnd",
]
}
]
我现在对您的建议是避免 Ctrl
重新映射,而是使用 <leader>
。您还可以适当地整理这些发现并在 GitHub.
上开一个新问题
P.S
您可以在文件 -> 首选项 -> 键盘快捷键中查看命令名称:
我发现递归映射有效:
"vim.insertModeKeyBindings": [
{
"before": [
"<C-e>"
],
"commands": [
"cursorEnd"
],
},
{
"before": [
"<C-a>"
],
"commands": [
"cursorHome"
],
}
],
虽然不理想
这对我有用:
VSCode 1.37.1(2019 年 7 月)
VSCodeVim v1.9
首先告诉 VSCodeVim 扩展 unhandle C-a
和 C-e
。这会将这些控制键委托给 VSCode 而不是扩展名:
// In your settings.json
"vim.handleKeys": {
"<C-a>": false,
"<C-e>": false
},
现在只需重新映射 VSCode 中的那些键:
// In your keybindings.json
[
{
"key": "ctrl+a", // default is Home
"command": "cursorHome",
"when": "textInputFocus"
},
{
"key": "ctrl+e", // default is End
"command": "cursorEnd",
"when": "textInputFocus"
},
{
"key": "ctrl+a", // default is Home
"command": "extension.vim_home",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
},
{
"key": "ctrl+e", // default is End
"command": "extension.vim_end",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
},
]
我发现前两个绑定在正常模式和插入模式下工作,但在可视模式下不起作用(它移动了光标但没有被选中)。最后两个确保它也可以在可视模式下工作。
编辑: 我发现只需删除 when
中的最后一个条件 vim.mode != 'Insert'
即可,而且更简洁。因此,不用上面的键绑定,只需:
// In your keybindings.json
[
{
"key": "ctrl+a",
"command": "extension.vim_home",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
{
"key": "ctrl+e",
"command": "extension.vim_end",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
]
在您的 keybindings.json
中试试这个:
{
"key": "ctrl+a",
"command": "cursorLineStart",
"when": "textInputFocus && vim.mode == 'Insert'"
},
{
"key": "ctrl+e",
"command": "cursorLineEnd",
"when": "textInputFocus && vim.mode == 'Insert'"
}
将以下内容添加到 settings.json
对我有用:
"vim.inserModeKeyBindings": [
{
"before": ["<C-e>"],
"after": ["<esc>", "$", "a"]
}
]
tl;博士
在keybindings.json中:
[
{
"key": "ctrl+a",
"command": "cursorHome",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Insert'"
},
{
"key": "ctrl+e",
"command": "cursorEnd",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Insert'"
}
]
长版
在 2020 年 5 月 15 日尝试过此线程中的答案,none 仍然有效。发现这个问题 https://github.com/VSCodeVim/Vim/issues/3126 包含一个解决方法,它对我有用。
我的 vscode 版本:1.45.0
感谢问题作者 https://github.com/paupalou
首先:在 setting.json
中设置 vim.useCtrlKeys": true,
然后:
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": ["<C-e>"],
"after": [],
"commands":[
{
"command":"cursorLineEnd",
"args":[]
}
]
},
{
"before": ["<C-a>"],
"after": [],
"commands":[
{
"command":"cursorLineStart",
"args":[]
}
]
}
],
完成你的遗愿
我正在使用 Vim with VSCode。
我 trying 重新映射 ctrl+e
以在插入模式下到达行尾。这是我在 settings.json
:
"vim.insertModeKeyBindingsNonRecursive": [{ "before": ["<C-o>", "$"], "after": ["<C-e>"] }]
不幸的是,这在某种程度上不起作用。我怎样才能重新映射它?
编辑: 根据答案,我也尝试了
"vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<C-e>"], "commands": { "command": "cursorLineEnd" } } ]
和
"vim.insertModeKeyBindingsNonRecursive": [{ "before": ["<C-e>"], "commands": "cursorLineEnd" }]
这两个都不起作用。
尝试使用 commands
选项:
"vim.insertModeKeyBindingsNonRecursive": [{
"before":[
"<C-e>"
],
"after":[],
"commands":[
{
"command":"cursorEnd",
"args":[]
}
]
}]
更新:我尝试了几种<C-...>
组合,经过几个小时的摆弄,我得出的结论是一些Ctrl
绑定根本行不通。我尝试了多种变体都无济于事,任何其他组合键似乎都可以正常工作,例如:
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": [
"j",
"k"
],
"commands": [
"cursorLineEnd",
]
}
]
我现在对您的建议是避免 Ctrl
重新映射,而是使用 <leader>
。您还可以适当地整理这些发现并在 GitHub.
P.S
您可以在文件 -> 首选项 -> 键盘快捷键中查看命令名称:
我发现递归映射有效:
"vim.insertModeKeyBindings": [
{
"before": [
"<C-e>"
],
"commands": [
"cursorEnd"
],
},
{
"before": [
"<C-a>"
],
"commands": [
"cursorHome"
],
}
],
虽然不理想
这对我有用:
VSCode 1.37.1(2019 年 7 月)
VSCodeVim v1.9
首先告诉 VSCodeVim 扩展 unhandle C-a
和 C-e
。这会将这些控制键委托给 VSCode 而不是扩展名:
// In your settings.json
"vim.handleKeys": {
"<C-a>": false,
"<C-e>": false
},
现在只需重新映射 VSCode 中的那些键:
// In your keybindings.json
[
{
"key": "ctrl+a", // default is Home
"command": "cursorHome",
"when": "textInputFocus"
},
{
"key": "ctrl+e", // default is End
"command": "cursorEnd",
"when": "textInputFocus"
},
{
"key": "ctrl+a", // default is Home
"command": "extension.vim_home",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
},
{
"key": "ctrl+e", // default is End
"command": "extension.vim_end",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
},
]
我发现前两个绑定在正常模式和插入模式下工作,但在可视模式下不起作用(它移动了光标但没有被选中)。最后两个确保它也可以在可视模式下工作。
编辑: 我发现只需删除 when
中的最后一个条件 vim.mode != 'Insert'
即可,而且更简洁。因此,不用上面的键绑定,只需:
// In your keybindings.json
[
{
"key": "ctrl+a",
"command": "extension.vim_home",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
{
"key": "ctrl+e",
"command": "extension.vim_end",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
]
在您的 keybindings.json
中试试这个:
{
"key": "ctrl+a",
"command": "cursorLineStart",
"when": "textInputFocus && vim.mode == 'Insert'"
},
{
"key": "ctrl+e",
"command": "cursorLineEnd",
"when": "textInputFocus && vim.mode == 'Insert'"
}
将以下内容添加到 settings.json
对我有用:
"vim.inserModeKeyBindings": [
{
"before": ["<C-e>"],
"after": ["<esc>", "$", "a"]
}
]
tl;博士
在keybindings.json中:
[
{
"key": "ctrl+a",
"command": "cursorHome",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Insert'"
},
{
"key": "ctrl+e",
"command": "cursorEnd",
"when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Insert'"
}
]
长版
在 2020 年 5 月 15 日尝试过此线程中的答案,none 仍然有效。发现这个问题 https://github.com/VSCodeVim/Vim/issues/3126 包含一个解决方法,它对我有用。
我的 vscode 版本:1.45.0
感谢问题作者 https://github.com/paupalou
首先:在 setting.json
vim.useCtrlKeys": true,
然后:
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": ["<C-e>"],
"after": [],
"commands":[
{
"command":"cursorLineEnd",
"args":[]
}
]
},
{
"before": ["<C-a>"],
"after": [],
"commands":[
{
"command":"cursorLineStart",
"args":[]
}
]
}
],
完成你的遗愿