Vim:除非在行尾</cr>,否则使<cr>退出插入模式的函数

时间:2013-03-13 14:16:07

标签: vim

当光标(*)在一行内时,make <CR>如何退出插入模式?像:

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

但是当光标处于EOL时,还要使<CR>插入换行符吗?

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

" results in
Lorem ipsum dolor
*
Fusce leo quam

使这两种功能同时成为可能的功能是什么?

理由:在维护文档时,我发现我做了一些小笔画(即转到单词,更改它,退出)。对我来说,这些笔画是我想要“输入”的动作(就像在聊天窗口中发送消息一样)。因此,<CR>退出插入允许我在维护时保留此心理模型。另一方面,<CR>在作曲时显然很有用。幸运的是,有足够的上下文使两者同时成为可能 - 我还没有vimscript技能。这将教会我一些:)

1 个答案:

答案 0 :(得分:4)

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

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