3

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

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

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

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

" results in
Lorem ipsum dolor
*
Fusce leo quam

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

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

4

1 回答 1

4

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

:inoremap <expr> <CR> col('.') == col('$') ? '<CR>' : '<Esc>'
于 2013-03-13T14:31:13.383 回答