如何在打开自动换行段落功能的 vim 中断行?

如何在打开自动换行段落功能的 vim 中断行?

我正在尝试使用 vim 自动换行功能,在我输入时自动将段落换行到不超过 80 个字母的行中。这可以通过 和 来实现set textwidth=80。vimset fo+=aa或 选项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>

相关内容