Vim – 正規表現でファイル内の文字を検索する方法【否定やエスケープも】

midSun31midSun31
IT・デジタル

正規表現は、プログラミング言語での文字列のパターンでマッチング処理する際に欠かせません。

Vimエディタでも正規表現を使って特定のパターンの文字列を検索・置換することができます。

この記事では、Vimエディタで正規表現でファイル内の文字を検索する基本的な方法について、否定表現も含めて解説していきます。エスケープ方法も合わせて紹介するので参考にして下さい。

Vimのバージョンは8.1を利用しています。

正規表現で検索する方法

通常の文字列を検索する構文「/文字列」と同様の構文で検索することができます。

/正規表現

以下は「v」+ 任意の3~4文字 +「s」の正規表現で検索している例です。パターンに一致するviewsやvisitsがヒットしています。

ただし、繰り返しの指定文字など一部は正規表現と異なる部分もあります。Vimの詳しい正規表現については、『pattern – Vim日本語ドキュメント』やVimエディタのヘルプが参考にして下さい。

正規表現の否定で検索する方法

正規表現の否定パターンで文字列を検索するには、「\@!」や「\@<!」を利用します。

  • 直後の文字列を否定する:「\@!」
    • 例: 直後に「instances」の文字列がない「num_」を検索したい場合は、次のように検索します。
      /num_\%(instances\)\@!

      検索結果は次のようになります。
  • 直前の文字列を否定する「\@<!」
    • 例: 直前に「List」の文字列が存在しない「View」という文字列を検索する場合は、次のように検索します。
      /\(List\)\@<!View

      検索結果は次のようになります。

記号が最低でも3つ必要なので、可読性は少々落ちるかもしれません。

正規表現でエスケープする方法

Vimの正規表現でメタ文字(「^」や「$」など単体で意味を持つ文字)を単独で検索したい場合は、「\」でエスケープする必要があります。

/\メタ文字
  • 例: 記号「$」を検索したい場合
    「/$」で検索しても、「$」がメタ文字のため全ての行末がヒットしてしまいます。そのため、「/\$」でエスケープして検索すると、正しく「$」の記号を検索することができます。
    • 「/$knap」などの別の文字と合わせたパターンの場合は、メタ文字をエスケープする必要はありません。

エスケープが必要な文字

正規表現で検索する時にエスケープが必要な文字は、Vimの検索オプションによって異なります。デフォルトでは、magicオプションが設定されます。

現在のVimの検索オプションは、Vim上で次のコマンドを入力すると調べることができます。

:set magic?

正規表現の検索で、エスケープが必要な文字は、検索オプション別に次のとおりです。

magicの場合(デフォルト)

デフォルトのmagicモードを利用する場合、エスケープが必要な文字は以下の通りです。

^ $ . *[ ] / ~ \

very magicの場合

^ $ . *[ ] / ~ \ + ? = { | & @

nomagicの場合

^ $ / \

very nomagicの場合

/ \

以上、Vimエディタで正規表現でファイル内の文字を検索する方法でした。

IT・デジタル
Howpon[ハウポン]

コメント