我尝试使用 Vim 计算文件中字符或单词的所有出现次数。这意味着还应该考虑同一行中同一单词的多次出现。之前在几篇文章中已经讨论过这个问题:在 Vim 中计算出现次数而不标记缓冲区已更改,在 vi 编辑器中搜索字符串并获取计数,有没有办法使用 :g 来计算 Vim 中的匹配数?。我的默认策略是使用:
%s/PATTERN//gn
对于字符和
%s/\<PATTERN\>//gn
为了言语。 Vim 帮助中提到了这一点页。然而,这两种解决方案似乎都忽略了同一行中的多次出现。这是一个例子:
UTg UTg D1U1K1 UTg D1U1K2 UTg D1U1TW01 UTg D1U1TW02 UTg D1U1TW03 UTg D1U1TW04 UTg D1U1TW05 UTg D1U1TW06 UTg D1U1TW07 UTg D1U1TW08 UTg D1U1TW09 UTg D1U1TW10 UTg
UTg UTg D1U2K1 UTg D1U2K2 UTg D1U2TW01 UTg D1U2TW02 UTg D1U2TW03 UTg D1U2TW04 UTg D1U2TW05 UTg D1U2TW06 UTg D1U2TW07 UTg D1U2TW08 UTg D1U2TW09 UTg D1U2TW10 UTg
UTg UTg D1U3K1 UTg D1U3K2 UTg D1U3TW01 UTg D1U3TW02 UTg D1U3TW03 UTg D1U3TW04 UTg D1U3TW05 UTg D1U3TW06 UTg D1U3TW07 UTg D1U3TW08 UTg D1U3TW09 UTg D1U3TW10 UTg
UTg UTg D1U4K1 UTg D1U4K2 UTg D1U4TW01 UTg D1U4TW02 UTg D1U4TW03 UTg D1U4TW04 UTg D1U4TW05 UTg D1U4TW06 UTg D1U4TW07 UTg D1U4TW08 UTg D1U4TW09 UTg D1U4TW10 UTg
使用时%s/UTg//gn
它将输出4
而不是56
.那么如何计算 Vim 中同一行中的所有出现次数(包括多次出现次数)呢?
答案1
可以通过设置默认启用替换/g
标志:s
set gdefault
在.vimrc
。如果使用此设置
:%s/PATTERN/gn
将使 Vim 每行计算一次字符或单词的出现次数,并忽略所有其他出现的次数。要么使用
:%s/PATTERN/n
在这种情况下或set gdefault
从 中删除.vimrc
。