🔡

Vimの検索で、都合がいいときだけ大文字小文字を区別する

2023/08/07に公開

この記事は、Vim駅伝 2023年8月7日の記事です。

一言で言うと「:help \c」をご覧ください、で済む話なのですが、検索にもヒットしにくいお話なのでこの場を借りて共有します。

問題: :set smartcase(あるいはignorecase)じゃ困る時もある

/などで検索する際、「検索文字列に大文字が含まれている場合のみ大文字小文字を区別する(それ以外は区別しない)」という設定、smartcaseは便利ですが、「小文字だけの文字列にヒットさせたい!」という場合も時にはあるでしょう。

解決策: 検索文字列に\C(バックスラッシュ、大文字のC)を含める

見出しの通り、\Cという文字列を検索する文字列に含めると、smartcaseignorecaseをONにしていたとしても大文字小文字を区別してマッチするようになります。次のスクリーンショットはhlsearchを有効にした上で、手元のNeovimにおける:help \c/foo\Cで検索した場合のスクリーンショットです:

ちゃんと小文字🔡のfooだけにマッチしていますね!

おまけ

バックスラッシュの後にShiftキーが必要な大文字のC、というのはちょっと入力しづらいので、ショートカットを設定しておくのがお勧めです。例えばこんな感じのキーバインドを設定しておけば、簡単に\Cを用いた検索ができます。個人的な好みでプレフィックスを<Space>にしています。

" \C を付けた状態で検索開始
nnoremap <Space>/ /\C
nnoremap <Space>? ?\C

" 最後の検索に \C を付け加えた状態で検索し直す
"" 本来の n, N と挙動が一貫しないところがあるが、面倒なのでこのままで
nnoremap <Space>n /<Up>\C<CR>
nnoremap <Space>N ?<Up>\C<CR>
GitHubで編集を提案

Discussion