Vim:为什么不“:正常!我”进入插入模式?

时间:2012-07-20 21:24:02

标签: vim insert mode

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

:normal! i

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

:normal! A

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

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

修改:看起来:startinsert会填满问题的第二部分,但我仍然想知道如何做:normal! A:normal! a以及为什么不这样做只是按预期工作。使用箭头移动模拟“附加”是一个糟糕的解决方案,因为有空行等等。

4 个答案:

答案 0 :(得分:28)

普通命令认为以插入模式结束为不完整命令并中止。来自help normal

  

{commands}应该是一个完整的命令。如果{commands}没有   完成一个命令,最后一个命令将被中止,如<Esc><C-C>   打字了。 “:normal”忙时,显示不会更新。这个   意味着必须完成插入命令(以启动插入   模式,参见:startinsert)

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

:normal A可以通过向 Ingo Karkat 建议添加一个(!)到startinsert来实现。来自help startinsert

  

什么时候!包含它就像“A”一样,附加到该行。

答案 1 :(得分:16)

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

call feedkeys('A', 'n')

会做你想要的,但是这样添加的密钥只会在执行当前脚本/函数/映射/等完成后才会被处理。

答案 2 :(得分:8)

而不是:normal A,请使用:startinsert!!)。它在帮助中提到。

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

答案 3 :(得分:0)

转到特定的线型

vim -c "30"

现在你将在第30行,使其成为插入模式

vim -c "30" -c startinsert

现在您处于插入模式,删除该行

vim -c "30" -c startinsert -c d1