[英]How to use vim autowrap correctly?
我正在尝试使用vim自动换行功能在输入时自动将段落自动换行成不超过80个字母的实时行。 可以通过set textwidth=80
并set fo+=a
。 vim formatoptions
或fo
的a
选项基本上告诉vim在键入时包装整个段落。
但是,有一个非常烦人的副作用,就是我再也不能通过按回车键来换行。
这是一个例句。
说出以上句子,如果我想写成:
这是
一个例句。
通常,我可以将光标移至“ a”并进入插入模式,然后按Enter。 但是在set fo+=a
,当我在插入模式下按Enter在“ a”时什么也不会发生。 我注意到的一件事是,如果“ is”和“ a”之间没有空格,请按Enter键将插入一个空格。 但是此后没有其他事情发生。
那我在这里想念什么? 如何停止这种烦人的行为?
您可以运行:help fo-table
来查看选项的说明:
a Automatic formatting of paragraphs. Every time text is inserted or
deleted the paragraph will be reformatted. See |auto-format|.
When the 'c' flag is present this only happens for recognized
comments.
这意味着,每次插入字符时,vim都会尝试自动格式化段落。 这将导致它将所有内容移回同一行。
我认为您根本不需要添加a
。 我使用neovim,但此处的行为应相同。 根据帮助页面,默认值为:
(default: "tcqj", Vi default: "vt")
尝试从.vimrc
完全删除set fo+=a
。 保持set textwidth=80
。 那应该解决您的问题。
编辑 : set textwidth=80
,如果要格式化现有段落,可以在视觉选择中突出显示它,然后按gq
。
经过一番探索,我发现了一种可以在某种程度上解决问题的变通办法,尽管并不完美。
基本思想是,在进入换行符时,在发送<CR>
时暂时禁用自动包装,然后再恢复自动包装。 有多种方法可以做到这一点。 据我所知,最好的方法是使用粘贴模式,因为进入粘贴模式时不必退出插入模式。 因此,只需在插入模式下将以下命令放入您喜欢的任何键绑定中即可。 我现在使用的是inoremap <CN> <F2><CR><F2>
我之所以认为这不是最佳选择的原因是,由于某种原因,我无法以这种方式绑定<Enter>
,而不得不使用另一个键。
如果可以通过这种方式配置<Enter>
或<CR>
,则问题将100%解决。
以下内容使我可以使用Enter键在将文本宽度设置为79个字符的同时开始新的一行:
set tw=79 "width of document
set fo=cqt
set wm=0 "# margin from right window border
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.