Emacsの操作の基本です。この記事では、検索と置換の操作について書きます。
Emacsでの検索と置換操作は、コピー&ペーストと同様に、マウスとメニューによる操作でも可能です。
ここでは、キーボードによる操作について説明します。
Emacsにおける検索
1つづつ検索
検索の操作は以下です。
- Ctrl-s を押す。
- Emacs画面の下の方で、I-search: と表示されたところに、検索する文字列を打ち込む。
- 検索する文字列を打ち込んだ後は、 見つけたい所にいくまでCtrl-sを何度か押す。
- 検索を終了するときは、Ctrl-gを押す。
Crtl-sとは、Ctrlキーを押しながらsキーを押すという意味です。以下同様です。
2のステップでは、文字を打つ度に、前方一致で引っかかるところまで自動的に飛ばしてくれます。これをインクリメンタル検索といいます。
このCtrl-sによる検索では、Ctrl-sを押すときのカーソル位置よりも後ろの方に検索をかけていきます。
スポンサーリンク反対に、カーソル位置よりも前の方に検索をかけたい場合は、Ctrl-sの代わりにCtrl-rを押します。このとき、上記2のステップでI-serach:と表示されたところが、I-serach backward:と表示されると思います。
Ctrl-rを何度か押すと、前の方(上の方)に順番に検索されていくことがわかると思います。
まとめて検索
1つのファイルの中、検索したい文字列をまとめて(1回で)検索したこともあると思います。
Emacsでこのような検索をしたいときは、以下の操作を行います。
- M-x を押す。(Metaキーを押しながらxキーを押す)
- 続いて、grep と入力してEnterを押す。
- Emacsの画面下部に、Run grep で始まる行が現れるので、この後に検索したい文字列、空白、今開いているファイル名の順に入力する。
これは、Emacs上でgrepというコマンドを実行しているのですが、この検索結果がEmacsのバッファ上に表示されるのがポイントです。
例えば、sample1.txtというテキストファイル上のaaaという文字列を検索したとしましょう。すると、Emacsの画面が上下に2分割され、下半分の領域に
1 2 3 4 | grep -nH -e aaa sample_1.txt sample_1.txt:1:aaa sample_1.txt:4:aaa sample_1.txt:7:aaa |
などと表示されると思います。これはsample_1.txtというファイルの1, 4, 7行目にaaaが見つかったことを表しています。
カーソルを、上記のなかでアンダーバーがかかっている所(sample_1.txtの部分で、どの文字でもよい)に合わせてEnterを押してみてください。すると、その行にジャンプしてくれるはずです。
これが、Emacs上でgrepを使うときの、便利なところです。
grepの後に入力するファイル名は、ここでは編集中のファイル名にしましたが、これはまったく別のファイル名でも構いません。
そのときは、ちゃんとそのファイルを開いて、該当行にジャンプしてくれます。
grep で使用したときに表示される下半分の画面(バッファといいます。)は、その画面内のどこかにカーソルを合わせ、Ctrl-x k (Ctrlキーを押しながらxキー, Ctrlキーを離してkキーを押す)とやり、続けてEnterを押せば終了してくれます。
ここでカーソルを合わせるのは、慣れないうちはマウスで選択して合わせればよいです。慣れれば、バッファ間をキー操作で移動することができるようになりますが、それはまた別の記事で説明します。
Emacsにおける置換
置換も、エディタでよく行う操作の一つです。
1つづつ置換
まず、1文字列づつ置換する方法です。
- M-%を押す
- 下部にQuery-replace: と表示されたら、置換する対象の文字列を入力し、Enterキーを押す。
- 続いて、置換後の文字列を入力し、Enterキーを押す。
- 一つづつ置換を行うかどうかを聞いてくるので、置換する場合はyキー, 置換しない場合はnキーを押す。
M-%とは、具体的にはMetaキーを押しながら、Shiftキー及び数字の5キー(%が刻印されているはず)を押す操作です。
この操作では、置換したい文字列を一つづつ置換していきます。
置換を途中で止める場合は、Ctrl-gを押します。
まとめて置換
たくさんの文字列を一挙に置換したいときには、上記の方法では面倒な場合があります。そのときは、次の操作を行うことで一括置換できます。
- M-xを押す
- 続いて、replace-strings と打ち込む
- 置換対象の文字列を入力し、Enterキーを押す。
- 置換後の文字列を入力し、Enterキーを押す。
これで一括置換が行われます。
replace-strinsと打ち込むのは面倒かもしれませんが、TABキーを押すと補完してくれますので、試しながらコツをつかんでください。
また、.emacsにショートカットキーを登録しておく方法もあります。これは別の記事で説明します。