Vimで大文字と小文字を区別しない検索を行う方法


1650

ファイル内のCOPYRIGHTなど、大文字の単語を検索したいのですが。私は次のような検索を実行しようとしました:

/copyright/i    # Doesn't work

しかし、それは機能しません。Perlでは、iフラグを正規表現に指定すると、大文字と小文字を区別しない正規表現に変換されます。Vimには大文字と小文字を区別しない正規表現を示す独自の方法があるようです。

回答:


2107

あなたは使うことができます \cパターンのどこでもエスケープシーケンス。例えば:

/\ccopyrightまたは/copyright\cまたは/copyri\cght

逆(大文字と小文字を区別するマッチング)を行うには、\C代わりに(大文字のC)を使用します。


516
また、\cパターンの任意の場所に出現する可能性があるため、パターンを入力して、大文字と小文字を区別しない検索が必要だと判断した場合\cは、末尾にa を追加するだけです。
Alok Singhal、2010

269
set ignorecasevimrcで大文字と小文字を区別しない検索を追加\Cしたいので、@ AlokSinghalで述べたのと同様に大文字と小文字を区別する検索を実行できます。
Nick McCurdy 2013

164
またset smartcase、大文字を使用すると、大文字と小文字が区別される検索に自動的に切り替わります。
Zaz

83
Zazのコメントに追加したいだけです。がすでにアクティブなset smartcase場合にのみ適用されますset ignorecase。私はしばらくこれに困惑しました。Vimのヒントを参照してください。
Tan Wang

12
@coderMe、それは、大文字と小文字だ\c\C
アーロンMcDaid

680

\cおよびの提案だけでなくignorecasesmartcase非常に便利です。大文字を含むものを検索すると、大文字と小文字が区別される検索が行われます。完全に小文字の何かを検索すると、大文字と小文字を区別しない検索が行われます。とを使用して\c\Cこれをオーバーライドできます。

:set ignorecase
:set smartcase
/copyright      " Case insensitive
/Copyright      " Case sensitive
/copyright\C    " Case sensitive
/Copyright\c    " Case insensitive

見る:

:help /\c
:help /\C
:help 'smartcase'

83
の問題ignorecaseは、検索だけでなく置換にも影響することです。(スマートな)大/小文字を区別しない検索がデフォルトで大/小文字が区別される置換を行うことが理にかなっていることがわかりました。しかし、私が知っていることを行う方法はありません。
huyz

150
が機能するためsmartcaseには、も必要set ignorecaseです。すばらしいヒントですが、ありがとう!
Skilldrick 2012年

12
次のように、置換の検索式で\ Cを使用できると思います:%s/lowercasesearch\C/replaceString/g。これは、希望するデフォルトの機能を作成するものではありませんが、検索時にスマートケースを活用しながら、置換の大文字と小文字を区別することを強制できます。
Anthony DiSanti 2012年

23
置換でIフラグを設定して、パターンで大文字と小文字を区別することもできます。のように:%s/lowercasesearch/replaceString/gI
Rory O'Kane 2013

1
ヘルプページからのメモ(私のように「*」に常習している場合に便利です):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella

291

ic検索の前にVimでオプションを設定できます:

:set ic

大文字と小文字を区別する検索に戻るには、次を使用します。

:set noic

ic の略記です ignorecase


また、Vimの代わりにViを使用できるほど運が悪い場合の唯一の選択肢です。\cviでは機能しません。
bluppfisk


50

大文字と小文字を区別する検索と区別しない検索を切り替えるには、.vimrcでこのマッピングを使用します

nmap <F9> :set ignorecase! ignorecase?


15
はい、ただしignorecase?フラグの現在の状態が表示されます。(コマンドライン)
Boris Brodski

1
ありがとうございました!私にとって、これはページで最も有用な答えです。その瞬間に検索している内容に応じて、2つのモードをすばやく切り替える方法です。
ベン・ヒリアー

31

vimrcこれらのコマンドで使用できます。

  • set ignorecase -すべての検索で大文字と小文字が区別されません
  • set smartcase -大文字が含まれている場合、検索では大文字と小文字が区別されます

提供ignorecaseするものを使用する場合は、設定する必要がありsmartcaseます。

私は最近、Vim検索コマンド(組み込みコマンドと効率的に検索するための最良のプラグインの両方)に関する記事を書きまし


1
それはそうset smartcaseそれが正常である...私は大文字を使用しない場合は、大文字小文字を区別しない検索を実行しないのですか?
caneta

1
OK、それを機能させるためにignorecaseとsmartcaseの両方を設定する必要があることを以下に読んでください。申し訳ありません!
カネタ

24

他の人が示唆したように:

:set ic

しかし、クールなものは次のようにしてそのようなモードを切り替えることができます:

:set ic!

18

このコマンドをvimrcファイルに入れます

set ic 

常に大文字と小文字を区別しない検索を行う


4
理由はわかりませんが、これに対処するために、vimはデフォルトで大文字と小文字を区別しないように設定されています。使用しますset noic
user1510539 2016年

18

古き良きvim[grep]コマンド

:vimgrep /example\c/ &
  • \c 大文字と小文字を区別しない
  • \C 大文字と小文字を区別します
  • % 現在のバッファで検索することです

ここに画像の説明を入力してください


Cannot open file "&"
Vitaly Zdanevich

彼らはの%代わりに彼らが意味したと思い%ます。
オーフィッシュ


10

@huyzが言及するように、望ましい動作は、大文字と小文字を区別しない検索を使用し、大文字と小文字を区別する置換を使用する場合があります。そのための私の解決策:

nnoremap / /\c
nnoremap ? ?\c

そのことを常にあなたが打ったとき/または?それが追加されます\c大文字と小文字を区別しない検索のために。


1
悪い提案ではありませんが、そのsmartcaseオプションを使用できなくなりますか?
Trebor Rude

\ cが上書きされるため、このように見えますsmartcase
Matthew Woo

4

Vimには2つのモードがあります

1.編集モード

  1. 通常モード(Esc)

検索は通常モードで機能します

/ \ cは大文字と小文字を区別します

/ \ c 検索


ビジュアルモードはどうですか?
user202729

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