当光标 (*) 在一行内时,如何使 <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
使这两者同时成为可能的功能是什么样的?
基本原理: 在维护文档时,我发现我做了一些小 Action (即转到单词、更改它、退出)。对我来说,这些笔画是我想要“输入”的 Action (比如在聊天窗口中发送消息)。因此,使用
<CR>
exit insert 可以让我在维护时保持这种心理模型。另一方面,<CR>
在编写时显然很有用。幸运的是,有足够的上下文使两者同时成为可能——我只是还没有 vimscript 技能。这会教我一些:) 最佳答案
您可以使用表达式映射实现依赖于某些条件的映射;见 :help :map-expression
。我们可以通过 col()
函数检查行尾的光标,如下所示:
:inoremap <expr> <CR> col('.') == col('$') ? '<CR>' : '<Esc>'
关于Vim:使 <CR> 退出插入模式的函数,除非在行尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15387819/