在vim
中,如果我从命令行执行以下操作
:normal! i
vim不进入插入模式。同样命令
:normal! A
将光标移动到行尾,但光标仍处于插入模式。
为什么这不起作用的任何想法?如果不这样,我想知道从vimscript函数的主体进入插入模式的另一种方法(当然,在函数返回后仍然存在插入模式)。
修改:看起来:startinsert
会填满问题的第二部分,但我仍然想知道如何做:normal! A
或:normal! a
以及为什么不这样做只是按预期工作。使用箭头移动模拟“附加”是一个糟糕的解决方案,因为有空行等等。
答案 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