Vim:将<CR>转为退出插入模式功能,除非在行末

3

当光标 (*) 在一行内时,如何使 <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

如何使两者同时成为可能的函数是什么样子的呢?

原理: 当维护文档时,我通常会进行小的修改操作(例如跳到某个单词,更改它,然后退出)。对我来说,这些操作就像要“输入”(就像在聊天窗口中发送消息一样)。因此,让<CR>退出插入模式可以让我在维护时保持这种心态。另一方面,当编辑时,<CR>显然非常有用。幸运的是,有足够的上下文信息可以使这两者同时成为可能 - 我只是缺乏vimscript技能。这将教会我一些 :)


2
你的理由很难被称为合理。当你想在一行中间插入换行符时,你会怎么做? - cptstubing06
@cptstubings06 <C-CR>,这个很少见。 - Dane O'Connor
1个回答

4
您可以使用表达式映射实现基于某些条件的映射;参见:help :map-expression。我们可以通过col()函数检查光标是否在行末,如下所示:
:inoremap <expr> <CR> col('.') == col('$') ? '<CR>' : '<Esc>'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接