繁体   English   中英

如何正确使用vim自动包装?

[英]How to use vim autowrap correctly?

我正在尝试使用vim自动换行功能在输入时自动将段落自动换行成不超过80个字母的实时行。 可以通过set textwidth=80set fo+=a vim formatoptionsfoa选项基本上告诉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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM