Linux 如何正确使用vim autowrap?
我正在尝试使用vim autowrap功能,在我打字时,自动将我的段落实时包装成不超过80个字母的行。这可以通过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之后,当我在插入模式下
set textwidth=80
和set fo+=a
实现。vimformatoptions
或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线。但是智慧