如何计算Vim中重复行的重复次数?
现在我正在使用 Gvim 在 Windows 上工作。我想要一种不使用操作系统的外部命令的纯 Vim 方式,来计算 Vim 中重复行的重复次数。换句话说,我想要一种像 ":!sort % | uniq -c" 这样的纯 Vim 方式。
回答
没有现成的等价物。下面是一个快速而肮脏的近似值。
正在做:
:echo getline(1,'$')->map({ idx, val -> getline(1,'$')->count(val) .. ' ' .. val })->sort()->uniq()->join("n")
在这个缓冲区上:
foo
foo
bar
baz
呼应这一点:
1 bar
1 baz
2 foo
在命令行中,这应该提供一个很好的起点。
分解:
:echo {expr}
{expr}回显命令行中的输出。
getline(1,'$')
返回包含缓冲区中每一行的列表。
->map({ idx, val -> getline(1,'$')->count(val) .. ' ' .. val })
将列表中的每一项加上它在列表中的计数。
->sort()
对列表进行排序。
->uniq()
从列表中删除重复项。
->join("n")
最后将它与换行符作为分隔符连接起来,以便在回显到命令行时看起来不错。