Vimでシステム開発
蒋 いつ峰 2008/06/12   |  開発色々
10.検索と置換え 2008/06/12  |  PK:vim 検索 置換

1.検索と置換え

基本な検索と置換えについて、Vim tutorにも詳しく書いてありますが、こちらではもう一度復習しましょう。

Normalモードで、「/」を入力して検索します。例えば「/foo」はfooを検索します。次へを検索は「n」をタイプします。逆方向へ検索は「N」をタイプします。
逆方向に検索するときは「/」の代わりに「?」コマンドを使います。例:?foo

カーソル下の単語を検索するには簡単な方法があります、「*」と「#」を使います。「*」は下へ、「#」は上へ検索します。

検索のヒストリから検索するには、「/」をタイプして、「↑」と「↓」キーで行います。

置換えは以下のように行います。

:s/old/new/g 行単位で見つかった「old」を「new」に置換えします。
:%s/old/new/g ファイル全体で見つかった「old」を「new」に置換えします。
:%s/old/new/gc ファイル全体で見つかった「old」を「new」に置換えします。一つ一つ確認を取りながら置換えします。


もちろん、Vimは正規表現を使っての検索と置換えが対応しています。この後も幾つか紹介しますが、正規表現をうまく使えば非常に便利になります。詳しくはヘルプを参照します。

:help 03.9
:help pattern
:help usr_27.txt


2.検索に関する設定

以下は私のvimrcの検索に関する設定です、参考になればと思います。

set hlsearch    "検索文字をハイライト
set imsearch=0  "検索モードでのIMEのデフォルト状態
set nowrapscan    "検索でファイル終端に来たら先頭に戻らない
set ignorecase  "検索時大文字と小文字を区別しない
set incsearch   "増分検索
map <F2> :noh<CR>   " F2を押すと、Highlightを消す


3.複数ファイルに跨って検索(grep)と置換え

3.1 複数ファイルに跨って検索(grep)

複数ファイルに跨って検索(grep)は、「vimgrep」コマンドを使います。

:vimgrep /an error/g *.c | copen

上記コマンドは、現在の作業フォルダにある全ての cファイル を対象に、「an error」を検索し、ヒットした全ての結果を別ウィンドーで表示します。以下は vim71/src で実行した結果です、ヒットリストは画面下部に表示され、リストをクリックすれば該当ファイルが開きます。

vimgrep

上記コマンドについて少し説明しましょう。
「vimgrep」はコマンド名、「vim」と略しても構わない。
二つの「/」の間は検索したい文字です、正規表現も利用できます。
「g」は検索オプションで、同じ行にあるとしてもヒットした全て結果を表示することを指します。
「*.c」は検索範囲です、パスとファイル名を指定します。例えば「/home/uprush/src/vim71/src/**/*.c」にした場合、/home/uprush/src/vim71/src と /home/uprush/src/vim71/src のサブフォルダから、*.c ファイルを検索します。
「| copen」は検索した後実行するコマンドです、ここでは検索結果を開きます。また、下部の結果ウィンドを閉じるのは「:cclose」コマンドです。

vimgrep コマンドの詳しい使い方は「:help vimgrep」で参照します。


3.2 複数ファイルに跨って置換え

こういうケースを考えてみましょう。「x_cnt」という変数を「x_counter」に変更したい。この変数は複数のCファイルに使われ、この複数のファイルを全て変更しなければなりません。やり方は以下の通りです。

:args *.c
:argdo %s/\<x_cnt\>/x_counter/ge | update

一行目のコマンドは対象Cファイルを引数リストに入れます。
2行目は入れたファイルの全てを対象に、置換えを行います。

この例はVimのヘルプにありますので、詳しい情報は「:help 26.3」を参照します。


4.Vim tips(検索と置換え)

よく使う検索と置換えのVim tipsです。

・行末の空白を削除

%s/\s\+$//ge


・DOSの改行(^M)を削除

%s/\r//g


・DOSの改行(^M)を本当の改行に置換え。ファイルが一行になって難読した場合、このコマンドを使ってください。

%s/\r/\r/g


・連続空行を削除。以下3行連続空行を削除

%s/^\n\{3}//


・連続空行を一行に圧縮

%s/^\n\+/\r/


== 関連ヘルプ ==

:help 03.9
:help pattern
:help usr_27.txt
:help vimgrep
:help 26.3

閲覧  |  コメント  |  目次

 
ヘルプ  |  ご利用規約  |  相互リンク  |  問合せ
リンクはご自由に、問合せはお気軽に
©2007 Uprush