默认情况下,将gq与移动命令一起使用时,会将移动命令描述的文本硬包装到79列中。 (我是vi / vim的新手,所以我不知道正确的术语。)如何配置该列数,以便换行时使用不同的列数?

例如,假设我有以下文本:

This is text for illustration.


我希望能够将wrap列配置为29,以便如果我的光标在行中并运行gqip可以转换为:

This is text for
illustration.


如果有区别,我正在Ubuntu GNOME 17.04上使用gVim。


编辑:我正在寻找一种将文本的某些部分手动换行到给定的行长而又不影响其他任何行的方法,因为在某些情况下,我可以超出限制。为了扩展前面的示例,如果我的文档看起来像这样:

This is text for illustration.

This is some other text for illustration.


我在第一行中用光标运行gqip,我想得到:

This is text for
illustration.

This is some other text for illustration.


然后,如果我开始在其下的新行中键入内容,则希望该行不受限制的影响。

我的用例是编写LaTeX文档:我希望能够根据需要将散文的段落包装到一定数量的列中,但是在某些情况下,当我编写长方程或表格时,我希望这些行停留超过限制的时间。

#1 楼

您可以通过设置textwidth并从t中删除formatoptions来实现。

set textwidth=29
set formatoptions-=t


还需要在q中启用formatoptions选项才能使用gq。它似乎总是对我有用,但是为了安全起见,您可能需要添加一个set formatoptions+=q

当前的用例应该没有问题,但是c选项会自动包装注释,所以如果您不希望这样做,请参见。

有关更多信息,请参见:

:help formatoptions " Not much info.
:help fo-table      " All the options in detail.


#2 楼

有两种方法可以执行此操作:将'textwidth'设置为以字符或列为单位的文本宽度;将'wrapmargin'设置为字符或列中右边距的宽度。例如,要将文字换成29个字符或一列的宽度:

set textwidth=29


请参见

:help 'textwidth`
:help 'wrapmargin'
:help 10.7


评论


感谢您的回复,但这并不是我一直在寻找的东西。我希望能够手动将文本的某些部分换行而不会影响其他部分。对我来说,这两个选项都会自动将我输入的新文本自动换行。我将更新问题以更好地解释这一点。

– jdw1996
17年7月3日在16:19

Vim没有内置的方法。 gq命令不提供设置每次调用的换行宽度;它遵循textwidth和textwidth应用于整个缓冲区,而不仅仅是某些行。如果可以手动包装要包装的部分,可以编写以下函数:保存当前的textwidth值;将textwidth设置为29;在选定的行上执行gq;恢复textwidth的值。然后将此函数分配给formatexpr。另外,您可以使用外部程序(如fmt)格式化选定的行。

–加里约翰
17年7月3日在18:02

好的我明白了。我将研究编写这样的函数。谢谢!

– jdw1996
17年7月3日在22:03