我正在尝试使用 vim 自动换行功能,在我输入时自动将段落换行到不超过 80 个字母的行中。这可以通过 和 来实现set textwidth=80
。vimset fo+=a
的a
或 选项formatoptions
基本上fo
告诉 vim 在输入时换行整个段落。
但是,有一个非常烦人的副作用,那就是我不能再通过简单地按回车键来换行了。
这是一个例句。
就拿上面那句话来说,如果要把它写成:
这是
一个例句。
通常我只需将光标移动到“a”并进入插入模式,然后按回车键即可。但之后set fo+=a
,当我在“a”处按插入模式中的回车键时,什么也不会发生。我注意到的一件事是,如果“is”和“a”之间没有空格,按回车键会插入一个空格。但之后什么也不会发生。
那么我错过了什么?我该如何阻止这种烦人的行为?
答案1
自动格式化听起来是个不错的功能,但在实践中我从未发现除了纯粹的纯文本段落之外的用途。
您正确地指出了 Vim 的自动换行与手动影响换行符之间的冲突。Vim:help autoformat
提供了以下解决方法:
- 您需要正确定义段落。最简单的方法是用空行分隔段落。当没有分隔空行时,请考虑使用“w”标志并在段落中除最后一行之外的每一行末尾添加一个空格。
因此,使用:setlocal fo+=w
,您只需按 即可<Enter>
引入硬分隔符。缺点是段落内的所有行都有尾随空格字符。
答案2
经过一番探索,我找到了一种虽然并不完美但能在一定程度上解决问题的解决方法。
基本思路是,输入换行符后,发送时暂时禁用自动换行<CR>
,然后恢复自动换行。有多种方法可以做到这一点。据我所知,最好的方法是使用粘贴模式,因为进入粘贴模式时不必退出插入模式。因此,只需在插入模式下将以下命令设置为您喜欢的任何键绑定即可。我现在正在使用的一个是inoremap <C-N> <F2><CR><F2>
我之所以认为这个不是最优的,是因为出于某种原因,我无法<Enter>
以这种方式绑定,而必须使用另一个键。
如果<Enter>
或者<CR>
可以通过这种方式配置,那么问题就 100% 解决了。
答案3
插入换行符的另一种(次优但可能更好)方法是将光标置于单词之间的空白处,按r
进入替换(插入)模式,然后按<Enter>
。
r<Enter>