2013-08-17 47 views
0

正如我们所知,你不能Vim的:与冒号命令“一”在正常模式下

:exec "normal [iIaAs]" 

的唯一途径进入插入模式,我知道从冒号命令进入插入模式是

:startinsert[!] 

虽然:startinsert表现得像'我'和:startinsert!像一个'。但我怎样才能得到'一个'? 您不能使用

:exec "normal l" 
:startinsert 

因为它在行结束时不起作用。

回答

1

这个片断:

function! Append() 
    startinsert 
    normal! l 
endfunction 

nmap <F6> :call Append()<CR> 

使得<F6>工作像a

外部的脚本,你必须做到:

:startinsert 
<C-o> 
:normal l 

注意execute是必要的前提是你做,你要执行的命令的一些插值或级联。

execute "normal a" 

是没有意义的,但

execute "normal a" . my_variable 

是正确的。

+0

我试过'startinsert和正常! l',但插入位置不能到达行尾。我徘徊,如果有一些修复? –

+0

你应该解释你想做什么(一个脚本?批量编辑命令?别的?):一个简单的':startinsert!'显然可以解决你的“行尾”问题。 – romainl

+0

请让我的新vimscript。但是,我怎样才能确定光标的位置是否在行尾(在脚本中)。 –

1

确实feedkeys函数的帮助?

例如

:call feedkeys('a','n') 
+0

现在我用'imap l:调用feedkeys('a','n')'。如果我在行末输入,vim退出插入模式但不保持静止。我该如何解决它? –

+0

@RealYang为什么你需要,如果你已经在插入模式?你可以按'right'或'C-o l' – Kent

+0

嗯,我正在编写一个脚本来自动完成括号,我想要一个快速的方法来跳过右括号。如果“)”在行尾,则“C-O l”不起作用。此外,我认为'C-O l'和'right'很慢。 –

相关问题