我知道我可以使用:
- Home 在插入模式下
- Esc+i退出插入模式并再次输入,有效地转到行首。
但是没有一个让我满意。在第一种情况下,我必须倾斜头部才能击中Home,因为我不能盲目地击中它。在第二种情况下,我的左臂必须离开主行才能击打Esc,这也很烦人。
有什么想法吗?
Answers:
CtrlO在插入模式下,+可使您进入命令模式仅需按一下键。因此,Ctrl+O然后Shift+I应该可以满足您的需求。
Ctrl-o
后跟0
(比Ctrl-o
后跟效率更高Shift-I
),因为您将自动回到插入模式。在某些情况下, Ctrl-o
随后^
可能会更好(移动到行的第一个非空白字符)。
<C-O>
与它们看起来不同<C-[>
或<Esc>
相同。不同之处在于,进行常规转义的编辑+ <使您再次进入插入模式的内容>使您进行两次编辑,而<CO>使您进行一次编辑。这可以帮助您保持更清晰的撤消历史记录,并能够重复使用该插入内容进行粘贴。一些病毒主义者会争辩说,您应该注意类似的事情。
您可以使用I
(大写i)进入插入模式。
它将光标放在行的开头。
同样,您可以A
在行尾添加内容。
虽然,它并不能真正解决已经处于插入模式下的移动问题。
我刚刚检查了关于“插入”模式的帮助,“插入”模式下没有按键组合可以移动到行首。
其他想法:仅在插入模式下重新映射新命令
inoremap <C-i> <Home>
我已经将Ctrl + a和Ctrl + e分别映射到行的开头和结尾。这与大多数bash命令行的行为相匹配。对我来说效果很好。
inoremap <C-e> <Esc>A
inoremap <C-a> <Esc>I
<C-e>
在光标下方复制/写入字符(<C-y>
用于光标上方),<C-a>
在.-register(点寄存器)中插入所有内容。当您退出插入模式时(甚至在使用Ctrl-c时(由于多种原因您都不习惯),该寄存器将被您刚刚键入的内容填充。
如果您使用的是MacOS Terminal,请转到“首选项...>设置>键盘”,然后将结束键映射到Ctrl-O $(显示为\ 017 $),然后使用fn + left模拟结束键。对主页键执行相同的操作。转义序列\ 033 [H也适用于家庭。
最好的做法是将操作重新映射到其他键(请参见如何重新映射<Ctrl-Home>转到文件的第一行?)
我会考虑我多久使用一次此“功能”并将其映射到一个击键
对我有用的捷径(肌肉记忆力和直观性)是将__
(这是double _
)映射到“在当前行的开始处插入”。
理由:
_
已经到了行首_
不会与任何动作发生冲突(您已经在行首了)vimscript:
"insert at start of current line by typing in __ (two underscores)
function DoubleUnderscore()
if v:count == 0 && getcurpos()[2] == 1
:silent call feedkeys('I', 'n')
else
:silent call feedkeys('^', v:count + 'n')
endif
endfunction
nnoremap <silent> _ :call DoubleUnderscore()<CR>
这很复杂,因为简单的选择nnoremap __ _I
会导致vim按下_
以区分_
和时延迟__
。
我使用此命令转到行尾而不离开插入模式
inoremap jl <esc><S-a>
类似地,转到行首将是:
inoremap jl <esc><S-i>