2013-03-13 56 views
3

当光标(*)在一行内时,如何使<CR>退出插入模式?像:Vim:使<CR>退出插入模式的功能,除非在行尾

" pressing <CR> should exit insert mode (in either case) 
Lorem *ipsum dolor 
Lorem ipsum dol*or 

也使<CR>插入一个换行符当光标处于停产?

" pressing <CR> when cursor @ EOL 
Lorem ipsum dolor* 
Fusce leo quam 

" results in 
Lorem ipsum dolor 
* 
Fusce leo quam 

该功能看起来像什么使这两个同时成为可能?

理由:当维护一个文件时,我发现我做了小笔画(即goto word,改变它,退出)。对我而言,这些笔画是我想要“输入”的动作(如在聊天窗口中发送消息)。所以有<CR>退出插入允许我保持这个心理模型。另一方面,<CR>在撰写时显然很有用。幸运的是,有足够的上下文让两者同时成为可能 - 我只是没有vimscript技能。这会教我一些:)

+2

您的理由*很难理性*。当你想要在一行中间放置一个换行符时,你会做什么? – cptstubing06 2013-03-14 04:34:13

+0

@ cptstubings06'',这是非常罕见的。 – 2013-03-14 04:47:48

回答

4

你可以实现依赖于某种条件的映射表达映射;见:help :map-expression。我们可以通过col()函数来检查行尾的光标,如下所示:

:inoremap <expr> <CR> col('.') == col('$') ? '<CR>' : '<Esc>'