Linux 如何正确使用vim autowrap?

Linux 如何正确使用vim autowrap?,linux,vim,editor,text-editor,Linux,Vim,Editor,Text Editor,我正在尝试使用vim autowrap功能,在我打字时,自动将我的段落实时包装成不超过80个字母的行。这可以通过set textwidth=80和set fo+=a实现。vimformatoptions或fo的a选项基本上告诉vim在键入时包装整个段落 然而,有一个非常恼人的副作用,那就是我再也不能通过简单地按enter键来打断一条线了 这是一个例句 如果我想把上面的句子变成: 这是 例句 通常我可以将光标移动到“a”并进入插入模式,然后按enter键。但是在设置fo+=a之后,当我在插入模式下

我正在尝试使用vim autowrap功能,在我打字时,自动将我的段落实时包装成不超过80个字母的行。这可以通过
set textwidth=80
set fo+=a
实现。vim
formatoptions
fo
a
选项基本上告诉vim在键入时包装整个段落

然而,有一个非常恼人的副作用,那就是我再也不能通过简单地按enter键来打断一条线了

这是一个例句

如果我想把上面的句子变成:

这是

例句

通常我可以将光标移动到“a”并进入插入模式,然后按enter键。但是在
设置fo+=a
之后,当我在插入模式下按“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
。保持
设置textwidth=80
。这会解决你的问题


编辑:一旦设置了
文本宽度=80
,如果要设置现有段落的格式,可以在视觉选择中突出显示该段落,然后按
gq

您可以运行
:help for 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
。保持
设置textwidth=80
。这会解决你的问题


编辑:一旦你有了
设置textwidth=80
,如果你想格式化一个现有的段落,你可以在视觉选择中突出显示它,然后按
gq

,经过一些探索,我找到了一个解决办法,可以在一定程度上解决这个问题,尽管不是很完美

基本思想是,在输入换行符时,在发送
时暂时禁用自动换行,然后恢复自动换行。有多种方法可以做到这一点。据我所知,最好的方法是使用粘贴模式,因为进入粘贴模式时不必退出插入模式。因此,只需在插入模式下将以下命令转换为您喜欢的任何键绑定。我现在使用的是
inoremap

我认为这个不是最优的原因是,出于某种原因,我不能用这种方式绑定
,但必须使用另一个键


如果
可以通过这种方式进行配置,那么问题就100%解决了。

经过一些探索,我找到了一种解决方法,可以在一定程度上解决问题,尽管不是完美的

基本思想是,在输入换行符时,在发送
时暂时禁用自动换行,然后恢复自动换行。有多种方法可以做到这一点。据我所知,最好的方法是使用粘贴模式,因为进入粘贴模式时不必退出插入模式。因此,只需在插入模式下将以下命令转换为您喜欢的任何键绑定。我现在使用的是
inoremap

我认为这个不是最优的原因是,出于某种原因,我不能用这种方式绑定
,但必须使用另一个键


如果可以用这种方式配置
,则问题100%解决。

以下允许我在将文本宽度设置为79个字符时使用enter键开始新行:

set tw=79 "width of document                                                                            
set fo=cqt                                                                      
set wm=0 "# margin from right window border

以下内容允许我在将文本宽度设置为79个字符时,使用enter键开始新行:

set tw=79 "width of document                                                                            
set fo=cqt                                                                      
set wm=0 "# margin from right window border

但是
a
是使vim格式化段落的唯一方法
t
是默认设置,但仅适用于当前行。在大多数情况下,这会使这一段变得不那么漂亮。就像当你想在一条已经包装好的线上添加一些东西时,它只会在该线上再添加一个断点,因为现在长度超过了限制。但请记住,在那一行的末尾已经有一个换行符。因此,您将在新线中得到当前线的一半,而旧的第2线成为第3线。但是使用
fo+=a
。这些线将连接在一起。请参见我上面的编辑。如果您已经有了一个段落,只需在视觉模式下突出显示它,然后使用
gq
根据您的textwidth设置对其进行格式化。True。但那就像是一种妥协。我曾经使用手动模式,但就是无法忍受不时按下
gwip
gwip
gqap
更好,因为它可以保持光标位置,但
a
是使vim格式化段落的唯一方法
t
是默认设置,但仅适用于当前行。在大多数情况下,这会使这一段变得不那么漂亮。就像当你想在一条已经包装好的线上添加一些东西时,它只会在该线上再添加一个断点,因为现在长度超过了限制。但请记住,在那一行的末尾已经有一个换行符。因此,您将在新线中得到当前线的一半,而旧的第2线成为第3线。但是智慧