如何在 Vim/gVim 中找到列数/字符数最多的行?

如何在 Vim/gVim 中找到列数/字符数最多的行?

我目前正在 Windows XP 上使用 gVim,对于我的核心问题有 2 个后续问题:

找到字符最多的行的最佳方法是什么?

我现在的方法:我使用正则表达式搜索:/^\(\p\)\{#number#,}$),并不断增加整数,#number#直到得到一个匹配项。就我的文件而言,它只有一行 81K 个字符 - 而不是我之前认为的 916,657 个字符。我知道这一点,因为当光标在该行上时,我按下g + Ctrl+g并得到 81K 的列数。

后续1)该问题"What is the best method of finding the line with the most columns?"与上面的第 2 点相同吗?

后续2)当我打开一个文件并在屏幕底部看到以下行时,第二个数字是什么意思:

在此处输入图片描述

我将其解释为该文件有 14,871 行,并且至少有一行有 916,657 列。我检查了该文件确实有 14,871 行,但我无法理解第二行(916K)的用途。

答案1

第二个数字是整个文件的总字符数。如果您这样做:

$ wc -l -c filename

您应该看到相同的两个数字(行数和字符总数)。事实上,您可以这样做:

:!wc -l -c %

这是一个插件文本过滤器下载) 中包含一个查找最长行的函数。

或者你可以使用它来找到最长线的长度:

:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1

那么你可以像这样使用该数字:

/^.\{248\}$

答案2

肯定有更好的方法,但以下方法也可以:

%s/./a/g         "Replace everything with 'a's
sort!            "Sort by column length
ggy$             "Go to first line (longest) and copy it
u                "Undo the sorting
/<c-r>"          "Search for the longest line
mm               "Mark it 'm'
u                "Undo the replace
'm               "Go to the mark - there!

答案3

无法回答第一个问题,但是文件加载消息中的第二个数字是文件中的字符总数。

答案4

不是以 vim 为中心,与其他答案类似,但对某些人来说可能更直观。这假设您可以从 vim 中调用一些外部程序。

我的文件中有以下内容test_file

hello world
helloooooooooooooo world !!!
yo, world!
helloooOoooOooooOo World ! !

wc命令有时有一个-L选项,可以打印最长行的大小。28 test_file这是我的示例的输出。

您可以使用 打印这 28 个字符的行(及其行号)grep -nP ".{28}" test_file

2:helloooooooooooooo world !!!
4:helloooOoooOooooOo World ! !

你可以wc用 来解析输出cut。把它们放在一起,并将一个命令粘贴到另一个命令中,结果是:

grep -nP ".{$(wc -L test_file | cut -f 1 -d ' ')}" test_file

相关内容