Vim 如何动态设置textwidth以适应当前文件?
很长一段时间以来,我一直使用textwidth:80编写散文文本文件。出于各种原因,我想开始使用textwidth:72 如果我只是将.vimrc更改为使用72,我会遇到问题。要么我必须重新包装我接触到的任何旧文件(进行额外的校对和大型的、语义上无用的git提交),要么我在文件中得到72列的文本块,否则就是80列,这很难看 我想让vim在打开文件时计算出适当的文本宽度。类似于“使textwidth成为72列或此文件中的最大公共行长度,以较长者为准。”我包含“common”,因为我不希望一些过长的行(可能是长URL)影响textwidth 我该怎么做?获取长度 您可以通过以下方式获得当前缓冲区所有行的(升序)长度列表:Vim 如何动态设置textwidth以适应当前文件?,vim,Vim,很长一段时间以来,我一直使用textwidth:80编写散文文本文件。出于各种原因,我想开始使用textwidth:72 如果我只是将.vimrc更改为使用72,我会遇到问题。要么我必须重新包装我接触到的任何旧文件(进行额外的校对和大型的、语义上无用的git提交),要么我在文件中得到72列的文本块,否则就是80列,这很难看 我想让vim在打开文件时计算出适当的文本宽度。类似于“使textwidth成为72列或此文件中的最大公共行长度,以较长者为准。”我包含“common”,因为我不希望一些过长的
let lengths = sort(map(getline(1, '$'), 'strdisplaywidth(v:val)'), 'n')
然后,可能会删除最长的1%来解释任何异常值(或者在这里应用更详细的统计数据),并获得其余的最大值:
let max = max(lengths[0: (len(lengths) * 99 / 100)])
并使用它来检测在第80列换行的旧文件:
let isLegacyWidth = max > 72 && max <= 80
如果这些存储在特定位置:
假设已将上述长度检查放入IsLegacyWidth()
函数中,则可以使用以下参数设置本地'textwidth'
值:
let &l:textwidth = (IsLegacyWidth() ? 80 : 72)
了解长度
您可以通过以下方式获得当前缓冲区所有行的(升序)长度列表:
let lengths = sort(map(getline(1, '$'), 'strdisplaywidth(v:val)'), 'n')
然后,可能会删除最长的1%来解释任何异常值(或者在这里应用更详细的统计数据),并获得其余的最大值:
let max = max(lengths[0: (len(lengths) * 99 / 100)])
并使用它来检测在第80列换行的旧文件:
let isLegacyWidth = max > 72 && max <= 80
如果这些存储在特定位置:
假设已将上述长度检查放入IsLegacyWidth()
函数中,则可以使用以下参数设置本地'textwidth'
值:
let &l:textwidth = (IsLegacyWidth() ? 80 : 72)
要在打开文件时设置文本宽度,可以在
.vimrc
中包含如下自动命令:autocmd BufNewFile,BufRead*.java set textwidth=72
。您可以使用wc-L
获取文件的最大行长度。这并不能真正回答问题,但可能有点帮助。要在打开文件时设置文本宽度,可以在中包含自动命令。vimrc
如下:autocmd BufNewFile,BufRead*。java set textwidth=72
。您可以使用wc-L
获取文件的最大行长度。这并不能真正回答问题,但可能会有一点帮助。