这可能看起来有点过分,但我换成了 vim,现在我对工作流程非常满意。我试着约束自己不使用箭头键,因为在写作时,一直把手放在阿尔法键上是一件大事。所以当我需要导航时,我会退出插入模式,进入正常模式,然后返回插入模式。
有一个例外,这实际上更令人不安:我使用clang complete
片段,super tab
这很好。但每次我填写参数后自动完成函数时,我的光标都停留在前面,)
所以要继续,我必须将光标向右移动一个字符。你可以想象这种情况发生常常。
据我所知,我仅有的选项是:Escla或→,我对它们都不满意。第一个选项让我按 3 个键来移动 1 个字符的光标,第二个选项让我将手移到箭头键上。第三个选项是将CTRL-L或 smth 映射到→。
那么,实现这一目标的最佳方法是什么?
//snippets (clang complete + supertab):
foo($`param1`, $`param2`)
//after completion:
foo(var1, var2|)
^ ^
| |
I am here |
Need to be here
|
表示光标位置
答案1
如果是右括号,则映射)跳过现有内容)
inoremap <expr> ) strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"
取自:http://vim.wikia.com/wiki/Automatically_append_closing_characters
旧答案
:h i_CTRL-O
执行一条命令,返回到插入模式。
Ctrl-ol将向右移动一个字符然后返回到插入模式。
或者,一些括号插件允许您只键入右括号),它们将覆盖现有的括号。
答案2
键入以下内容来查找插入模式下使用的控制键。
:help insert-index
ctrl-b 没有使用,但是您可能想要牺牲其他一些键。
imap <c-b> <right>
这可以将光标向右移动一个字符。或者映射一些双字符。
imap jj <right>
答案3
在插入模式下,用于ctrl-f
向右移动一个字符。
这在我的 Mac 上通常有效。还有其他类似的命令可以使用ctrl
,但它们可能并不总是有效。例如,ctrl-b
在我的 vim 插入模式和我的 Mac 上,它会将您带回一个字符,除非我在编辑 stackoverflow 答案中的内容,在这种情况下,它会被映射到使文本加粗 :)
答案4
如果您正在使用登山扣元素,则可以通过下一个配置非常轻松地完成。
{
"description": "CRTL+j -> down_arrow",
"manipulators": [
{
"from": {
"key_code": "j",
"modifiers": {
"mandatory": [
"left_control"
]
}
},
"to": [
{
"key_code": "down_arrow"
}
],
"type": "basic"
}
]
},
{
"description": "CRTL+k -> up_arrow",
"manipulators": [
{
"from": {
"key_code": "k",
"modifiers": {
"mandatory": [
"left_control"
]
}
},
"to": [
{
"key_code": "up_arrow"
}
],
"type": "basic"
}
]
},
{
"description": "CRTL+h -> left_arrow",
"manipulators": [
{
"from": {
"key_code": "h",
"modifiers": {
"mandatory": [
"left_control"
]
}
},
"to": [
{
"key_code": "left_arrow"
}
],
"type": "basic"
}
]
},
{
"description": "CRTL+l -> right_arrow",
"manipulators": [
{
"from": {
"key_code": "l",
"modifiers": {
"mandatory": [
"left_control"
]
}
},
"to": [
{
"key_code": "right_arrow"
}
],
"type": "basic"
}
]
},
对我来说,无论我在哪里使用 vim,在 vscodevim、ideavim 等还是终端 vim 中,它都是最好的。是的,不是最理想的,但运行完美,尤其是在 vim 模拟器的情况下