很长一段时间我都使用textwidth:80写了散文文本。我想开始使用textwidth:72,原因。
如果我只是将.vimrc更改为使用72,我会遇到问题。要么我必须重新包装我触摸的任何旧文件(进行额外的校对和大型,语义无用的git提交),或者我最终在文件中使用72列文本块,否则是80列,这很难看。
我希望vim在打开文件时找出合适的textwidth。类似于"使textwidth 72列或此文件中的最大公共行长度,以较长者为准。"我包括'普通'因为我不想要一些超长线 - 可能是长URL - 来影响文本宽度。
我该怎么做?
答案 0 :(得分:2)
您可以通过以下方式获取当前缓冲区所有行的(递增)长度的列表:
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
这可以通过:autocmd
完成。这里最重要的问题是如何区分“散文文件”。如果您有自定义文件类型(例如text
),则可以使用
autocmd FileType text ...
如果这些存储在某些位置:
autocmd BufReadPost /path/to/prose/* ...
假设您已将上述长度检查放入IsLegacyWidth()
函数中,则可以使用以下方式设置本地'textwidth'
值:
let &l:textwidth = (IsLegacyWidth() ? 80 : 72)