30

vim,如果我从命令行执行以下

:normal! i

vim 不进入插入模式。同样的命令

:normal! A

将光标移动到行尾,但光标仍处于插入模式。

任何想法为什么这不起作用?失败了,我想知道从vimscript函数的主体进入插入模式的另一种方法(当然,在函数返回后插入模式仍然存在)。

编辑:看起来:startinsert将完成问题的第二部分,但我仍然想知道我怎么能做类似的事情,:normal! A或者:normal! a为什么那些不能按预期工作。用箭头移动模拟“附加”是一个不好的解决方案,因为空行之类的东西。

4

3 回答 3

38

正常命令认为以插入模式结束是一个不完整的命令并中止。来自help normal

{commands} 应该是一个完整的命令。如果 {commands} 没有完成一个命令,最后一个命令将被中止,就像<Esc>或被<C-C> 键入一样。":normal" 忙时显示不更新。这意味着必须完成插入命令(要启动插入模式,请参阅:startinsert)

:startinsert可能是您正在寻找的命令。

:normal A正如Ingo Karkat所建议的那样,可以通过向 附加 bang( !) 来实现。来自:startinserthelp startinsert

当。。。的时候 !包括它像“A”一样工作,附加到该行。

于 2012-07-20T21:30:32.353 回答
19

除了已经提到的startinsert,您还可以使用feedkeys()

call feedkeys('A', 'n')

会做你想做的事,但你以这种方式添加的密钥只有在当前脚本/函数/映射/等执行完成后才会被处理。

于 2012-07-21T08:35:37.250 回答
10

代替:normal A,使用:startinsert!(with !)。帮助中有提到。

对于:normal a,将光标向右移动,然后执行:startinsert

于 2012-07-21T11:54:12.927 回答