文字列を検索し、viエディターでカウントを取得する


105

文字列を検索し、viエディターを使用してファイル内の出現回数を検出したいと思います。


11
選択した回答(:g/xxxx/d)は恐ろしく、危険で、このページの他の人よりも劣っています。選択を解除してください。
Bruno Bronosky 2017年

1
私は同意し、「削除された行」ではなく「行が削除されました」とのみ
通知します

回答:


4
:g/xxxx/d

これにより、パターンを持つすべての行が削除され、削除された行数が報告されます。元に戻すと元に戻ります。


6
もちろん、彼は "d"を省略できるので、操作に戻る必要はありません。
ルーク

15
これは、行数を示すだけで、発生回数はわかりません。私はダークの方が良い解決策だと思います。

4
以下の私の解決策は、行内の複数の発生を正しくカウントし、元に戻すものはありません。
Mohit Chakraborty、

6
非常に危険:o
Ankit Zalani 2015年

1
これは受け入れられた/最も人気のある回答ではありません。これまでのSOモデレーターは何ですか?:(
user1412066


121

n旗が必要です。単語を数えるには:

:%s/\i\+/&/gn   

そして特定の単語:

:%s/the/&/gn        

count-itemsドキュメントのセクションを参照してください。

入力するだけの場合:

%s/pattern/pattern/g

次に、ステータス行にviでの一致数も表示されます。


この回答はVimユーザー向けであり、Vi :(
kadeshpa

システムにviしかありませんか?どのバージョン?
2009

誰かがあなたのクエシトンにvimのタグを付けました...私はそれを削除しました。
ojblass 2009

38

:%s / string / string / gが答えを返します。


なんといい答えでしょう。+5可能な場合
ojblass 2009

'。*'がパターンで使用されていない場合にのみ機能すると思います
AK

10
文字列を繰り返す必要はありません%s/string//ng
slm

23

(グスタボが言ったように、しかしさらに:)

以前の検索については、次のように簡単に行うことができます。

:%s///gn

パターンはすでに検索レジスタ(@/)にあるため、必要ありません。

"%"- s/ファイル全体で実行
"g"-グローバル(1行に複数のヒットがある)を検索
"n"-置換を防止s/- 何も削除されません!元に戻す必要はありません。
(参照::help s_flag詳細については)

(これにより、vim-wikia tip171で説明されているように、「視覚的に選択されたテキストの検索」と完全に連携します


3

使用する

:%s /パターン/ \ 0 / g

パターン文字列が長すぎて、もう一度すべて入力したくない場合。


1

短い答え

:%s /検索する文字列// gn

学習用

VIエディターには以下の3つのモードがあります ここに画像の説明を入力してください

  • :あなたはから入力しているCommandCommand-lineモード。今、あなたが書いたもの:はすべてCLI(コマンドラインインターフェイス)です
  • %sすべての行を指定します。範囲を指定する%と、ファイル全体が置換されます。すべての出現置換の構文は:%s/old-text/new-text/g
  • g行内のすべての出現箇所を指定します。ではgフラグ、あなたは全体のラインが置換されるようにすることができます。このgフラグを使用しない場合、行の最初の出現のみが置換されます。
  • n 発生数を出力するように指定します
  • //二重スラッシュはの省略を表しreplacement textます。見つけたいだけだから。

発生数を取得したら、Nキーを押して発生を1つずつ確認できます。

行番号1から10の特定の範囲を見つけてカウントするには:

:1,10s / hello // gn

  • %ファイル全体が,行番号で区切られているので注意してください。

行番号1から10の特定の範囲を見つけて置き換える場合:

:1,10s / helo / hello / gn


0

私はそうすることをお勧めします:

  1. *カーソルの下にある「境界付き検索」を行うためにwith を検索するか、標準の/pattern検索を行います。
  2. :%s///gn発生数を取得するために使用します。または、を使用:%s///nして行数を取得することもできます。

**私は本当にすべての検索で "match N on N 1 on N 2 lines" というメッセージを表示するプラグインを見つけることができましたが、悲しいかな。

注:出力の扱いにくい言い回しと混同しないでください。前者のコマンドは4 matches on 3 lines、後者があなたに与えるようなものをあなたに与えるかもしれません3 matches on 3 lines。一方で、技術的に正確で、後者は誤解され、「3行が一致して」と言うべきです。ご覧のとおり、後者の(「n」のみ)形式を使用する必要はまったくありません。「gn」フォームを使用すると、同じ情報をより明確に、そしてより多く取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.