Text-Processing
Vim:計算 char 或 word 的所有出現次數(包括同一行上的多次出現)
我嘗試用 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 中同一行中的多次出現?
預設情況下,可以通過設置啟用替換
/g
標誌:s
set gdefault
在
.vimrc
. 如果這是使用:%s/PATTERN/gn
將導致 Vim 每行計算一次字元或單詞的出現次數並忽略所有其他出現次數。要麼使用
:%s/PATTERN/n
在這種情況下或
set gdefault
從.vimrc
.