私は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
出力されます。それでは、Vimで同じ行のすべての項目(複数の項目を含む)を計算する方法は?4
56
答え1
/g
代替フラグはデフォルトで設定して有効にできます。:s
set gdefault
存在する.vimrc
。この設定を使用する場合
:%s/PATTERN/gn
Vimは文字や単語の発生回数を1行に1回だけカウントし、他のすべての場合は無視します。使用するか
:%s/PATTERN/n
この場合またはset gdefault
から削除されました.vimrc
。