emacsの検索・置換に関するメモ


このエントリーをはてなブックマークに追加

emacsを使うとき、検索はC-s、置換はM-%を使う以上のことをこれまでしてきませんでした。より高度な検索・置換の仕方をまとめました。

検索

単語単位で検索

いくつか方法があります。ユースケースに応じて使い分けてください。

1つ目の方法は、C-s M-s w としてから、検索したい単語を入力する方法です。( 参考 )

2つ目の方法は、C-sでのインクリメンタルサーチ中に、M-s w とする方法です。これで単語単位の検索をするか否かのフラグがトグルします。( 参考 )

3つ目の方法は、まず検索したい語にカーソルがある状態でC-s C-wとしてその語を選択状態にした上で、M-s wとする方法です。( 参考

コマンドが覚えられない場合は、メニューバーの"Options" → "Default Search Options" → "Whole Words"にチェックをつける方法も可です。なお、no windowモードでemacsを起動している場合は、F10でメニューを開けます。

大文字・小文字を区別して検索

これもいくつか方法があります。

1つ目の方法は、C-s M-cとしてから、検索したい単語を入力する方法です。

2つ目の方法は、C-sでのインクリメンタルサーチ中に、M-c とする方法です。これでcase-sensitiveで検索をするか否かのフラグがトグルします。( 参考 )

これも、メニューバーの"Options" → "Default Search Options" → "Ignore Case"をアンチェックする方法も可です。

正規表現で検索

C-u C-sとしてから、検索したい正規表現を入力します。

正規表現は、Pythonに組み込まれているような高度なバージョンではないようです。例えば数字一文字を表す\dは使えず、[0-9]とする必要があります。詳細は ここ を参照。

過去の検索キーワードを呼び出す

C-sでのインクリメンタルサーチ中にM-pまたはM-nです。

参考

文字列検索に関するフラグに関するコマンドは C-s C-h bで調べられます

置換

単語単位で置換

C-u M-%ののち、置換前の単語を入力してEnter、置換後の単語を入力してEnterです。 ( 参考 )

大文字・小文字を区別して置換

デフォルトだと置換前の単語をすべて小文字で入力すると、大文字・小文字をいい感じに変換してくれます (参考) が、これがおせっかいだという場合は、大文字・小文字を区別して置換したくなります。

https://emacs.stackexchange.com/questions/12780/how-to-perform-case-sensitive-query-replace を見る限り、ある単語の検索の途中に、さっき紹介した M-c のようなコマンドでフラグを切り替える方法は用意されてないようでした。

メニューバーの"Options" → "Default Search Options" → "Ignore Case"をアンチェックする方法以上に簡単な方法は今のところ見つけられていません。

正規表現で置換 (query-replace-regexp)

C-M-% もしくは M-x replace-regexp としてから、検索したい正規表現を入力してEnter、置換後の正規表現を入力してEnterです。

C-M-%の入力方法は以下のどちらかです。

  • Escを先押ししたあと、Ctrl + Shiftを押しながら5を押す
  • Ctrl + Alt + Shiftを押しながら5を押す

過去の置換キーワードを呼び出す

置換中にM-pまたはM-nです。

置換前・置換後の文字列を変更

eで置換前、Eで置換後の文字列を変更可能です(参考)。上の「過去の置換キーワードを呼び出す」と組み合わせると便利です。