如何使用vim命令获取最长行中的列数?

时间:2016-12-22 12:47:51

标签: vim

在vim编辑的文件中,如何使用vim命令获取最长行中的字符数?
行号?

2 个答案:

答案 0 :(得分:2)

这将打印行号,长度和行:

:%!awk ' { if ( length > L ) { L=length ;s=$0 } }END{ print NR, L, "\""s"\"" }'

http://www.unixcl.com/2009/04/find-length-of-longest-line-awk-bash.html

答案 1 :(得分:2)

使用某些Unix工具(如wcawk)可能更简单,更短(并且其他答案/评论似乎适合他们),因此这是一个纯粹的Vimscript解决方案:

let widths = map(getline(1, '$'), 'strdisplaywidth(v:val)')
let maxWidth = max(widths)
let longestLines = filter(map(copy(widths), 'v:val == maxWidth ? (v:key + 1) : ""'), '! empty(v:val)')
echo printf('max width is %d, found in line(s) %s', maxWidth, join(longestLines, ', '))

它将所有行转换为其长度的List,然后找到最大值。然后过滤具有该值的所有列表条目并将其转换为其行号(=列表索引+ 1)。最后,打印结果。