vim 中的 txt 文件换行未按预期工作
Word wrapping a txt file in vim not working as expected
我正在尝试编辑 vim 上的文件。您可以下载txt文件here.
我正在按照此 blog 上的说明进行操作。我也在使用我在 Whosebug 上阅读的内容。
首先,我在vim(命令模式)中做了这个:
:set textwidth=80
其次,我使用视觉模式 v
来 select 文件中的所有行。我从第一行开始,然后按下 G
(转到最后一行)。这使得所有文件 selected.
第三,为了重新格式化,我做了:
gq
好的,文字接近我想要的。但是,当我这样做时:
:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1
输出为:
90
上面的命令显示了最长行的字符长度。输出应该是 80,而不是 90!
我设置的文字换行限制是:80
我犯了什么错误?如何将文本换行到 80 列?
这周我开始使用 Vim。如果这个问题太幼稚,我很抱歉。
您的文本宽度和重新格式化工作正常,但表达式 col
实际上是在计算每行末尾的列位置(不是字符位置)的 "byte index"。有关 col
工作原理的所有信息,请参阅 :help col
。
相反,请尝试使用像 strchars 这样的字符计数函数:
echo max(map(range(1, line('$')), "strchars(getline(v:val))"))
在您的示例文本中,我得到了 83 的输出,这是因为换行在计算为字符的空白处的工作方式。为了解决这个问题,您可以 trim 尾随空格,例如 :%s/\s*$//
,现在我上面的示例表达式按预期使用 strchars returns 80。
:help col()
为您提供列的字节索引。如果您只有 c
或 a
这样的单字节字符,但您的文本包含很多字符,例如 ç
(U+00e7
) or á
(U+00e3
) ,这将按预期工作,这些字符用超过一个字节,因此很多行的计数都将关闭。
您真正想要的是计算屏幕列数,:help virtcol()
。
我正在尝试编辑 vim 上的文件。您可以下载txt文件here.
我正在按照此 blog 上的说明进行操作。我也在使用我在 Whosebug 上阅读的内容。
首先,我在vim(命令模式)中做了这个:
:set textwidth=80
其次,我使用视觉模式 v
来 select 文件中的所有行。我从第一行开始,然后按下 G
(转到最后一行)。这使得所有文件 selected.
第三,为了重新格式化,我做了:
gq
好的,文字接近我想要的。但是,当我这样做时:
:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1
输出为:
90
上面的命令显示了最长行的字符长度。输出应该是 80,而不是 90!
我设置的文字换行限制是:80
我犯了什么错误?如何将文本换行到 80 列?
这周我开始使用 Vim。如果这个问题太幼稚,我很抱歉。
您的文本宽度和重新格式化工作正常,但表达式 col
实际上是在计算每行末尾的列位置(不是字符位置)的 "byte index"。有关 col
工作原理的所有信息,请参阅 :help col
。
相反,请尝试使用像 strchars 这样的字符计数函数:
echo max(map(range(1, line('$')), "strchars(getline(v:val))"))
在您的示例文本中,我得到了 83 的输出,这是因为换行在计算为字符的空白处的工作方式。为了解决这个问题,您可以 trim 尾随空格,例如 :%s/\s*$//
,现在我上面的示例表达式按预期使用 strchars returns 80。
:help col()
为您提供列的字节索引。如果您只有 c
或 a
这样的单字节字符,但您的文本包含很多字符,例如 ç
(U+00e7
) or á
(U+00e3
) ,这将按预期工作,这些字符用超过一个字节,因此很多行的计数都将关闭。
您真正想要的是计算屏幕列数,:help virtcol()
。