こんにちは。関東の大学に通う大学生ミンチ(@programminchi)です。今回は前回に引き続きUNIXにおいて、ファイル編集などをする際に便利なEmacsの使い方について詳しく説明していきます。
前回の内容を見ていない人は以下にリンクを貼っておくので確認してください。
Emacsでウィンドウを分割し、複数のバッファを同時に開こう
Emacsでは同時に複数のバッファを開いて編集を行うことが可能です。以下ではバッファについての説明と複数のバッファを同時に編集する上で必要にになるコマンドの説明をしていきます。
Emacsのバッファについての復習
前回バッファについて説明するために以下のような図を使ったと思います。
バッファというのは、ファイルの内容を一時的に記憶して編集を行うための作業領域ということでした。そして、バッファはウィンドウに表示されます。つまり、バッファがファイルから記憶した内容は上の図でいうと「あいうえお」になります。
そして、上の図を見ると「あいうえお」の横に黒いカーソルがあると思います。このようにカーソルがあるバッファのことをカレントバッファを言います。
複数のバッファを同時に編集するときは、このカレントバッファを切り替えながら編集していくことになります。
複数のバッファを扱うためのコマンド
コマンド | 簡単な説明 |
C-x b | カレントバッファを切り替える。コマンドを実行した後に切り替えたいバッファ名をミニバッファで入力する。 |
C-x 2 | カーソルのあるウィンドウを分割する。 |
C-x 1 | ウィンドウを1つにする。 |
C-x o | カーソルを他のウィンドウに移動する。 |
1つずつコマンドの説明をしていきます。
C-x bコマンドではカレントバッファを切り替えます。
上の図ではカレントバッファの名前はfile1.txtになっています。ここでC-x bコマンドを行い、ミニバッファでfile2.txtと入力すると、新たなバッファに切り替わります。また、コマンド入力時点でfile2.txtが存在しない場合は新たに作られます。
次にC-x 1、C-x 2、C-x oコマンドについて説明します。以下の図を見てください。
最初、Emacsを開いたときはウィンドウに表示されるバッファは1つになってますが、C-x 2コマンドを実行すると上図のようにウィンドウに同じバッファが2つ表示されます。
ここで2つのバッファの内、上のバッファにカーソルがあるので、上のバッファがカレントバッファになります。
この状態でC-x oを実行すると、カーソルが下のバッファに移動して、下のバッファがカレントバッファに変わります。
このようにウィンドウが2つに分割された状態でC-x bコマンドを実行して、ミニバッファにバッファ名を入力すると、カレントバッファが新しいバッファに切り替わって、2つの異なるバッファをウィンドウに表示しながら編集していくことができます。
最後にC-x 1コマンドを実行すると、ウィンドウにカレントバッファ1つだけが表示された状態に戻ります。
Emacsでコピーアンドペーストを使おう
以下ではコピー(もしくはカット)とペーストに使うコマンドを表にまとめました。
コマンド | 簡単な説明 |
C-k | カーソル位置から行末まで消去され(カット)、内容はバッファにコピーされる。連続してコマンドを実行すると、連続で消去され、連続でバッファにコピーされていく。 |
C-w | 指定された領域を消去(カット)する。領域を指定の仕方は以下に書く。 |
M-w | 指定された領域をコピーする。カットと違って、領域を消去せずにバッファへコピーする。 |
C-@ | マークを設定する。このマークの位置からカーソルの位置までが指定の領域となる。 |
C-y | コピーもしくはカットされた内容をペーストする。(貼り付ける) 連続でペーストすることも可。 |
ここで、カット(消去)というと全部消えてしまうような感じがしますが、カットした内容はバッファに保存されており、C-yでその保存された内容を貼り付けることができるので安心してください。
領域を指定する際に、C-@とするとマークの設定ができますが、そこからカーソル移動のコマンドを使ってコピーもしくはカットしたい位置までカーソルを移動していきます。
マーク設定のコマンドは、コントロールキーを押しながらスペースキーを押すことでも実行できます。
Emacsでバッファ内の文字列を検索しよう
Emacsには文字列を検索する機能があります。バッファが何ページにもわたる場合、特定の単語を見つけたりするのに非常に役に立ちます。
Emacsで日本語入力に切り替える
Emacsはデフォルトでは英文字入力になっているので、日本語入力に切り替えたい時は、C-\コマンドを実行します。
日本語入力に切り替わると、ステータスバーに[あ]と表示されることが分かると思います。
もう一度英文字入力に切り替えたい時は、もう一度C-\コマンドを実行してあげるといいです。
バッファ内の文字列を検索する
バッファ内のある文字列を検索したい時はC-sコマンドを使うと、カーソルのある位置から前向きに検索をかけてくれます。
このコマンドを実行すると、ミニバッファにI-Searchと表示されるのでそこで検索したい文字列を入力します。検索をするとその文字列が見つかった最初の位置にカーソルが移動します。
次に見つかった文字列に移動したい時は、再度C-sを実行します。
検索を中断したいときはC-gコマンドを使ってあげるといいです。
また、後ろ向きに検索をかけたい時はC-rコマンドを使ってあげるといいです。使い方はC-sコマンドと同じです。
日本語の検索をしたい時は、上と同じようにC-sを実行した後に、ミニバッファでエンターを押すと、表示がI-SearchからSearchに変わるので、そこで日本語を入力して検索すればよいです。
Emacsでバッファ内の文字列を置換しよう
ここでは、バッファ内の特定の文字列を置換する2つの方法を紹介していきます。
確認しながら文字列を置換する
M-xコマンドを実行し、ミニバッファでquery-replaceと入力してエンターを押すと、Query-replaceとでてきます。
これに続けて検索語を入力すると、Query-replace ~ withと表示されます。これに続けて置換語を入力するとQuery-replace ~ with ... と表示されます。
ここでバッファ内で最初に出てくる検索語が選択されてると思うので置換する場合はyを、置換しない場合はnを押します。
すると次に出てくる検索語が選択されるのでそこでもyかnを押します。このような流れで検索した文字列でバッファ内にあるものについて1つずつ置換するかどうか決めることができます。
確認なしで全ての文字列を置換する
次に上のような確認はなしで置換をしてしまうコマンドを紹介します。M-xに続けて、ミニバッファでreplace-stringとしてエンターを押します。
Replace stringとでてくるので検索したい文字列を入力し、エンターを押します。
すると、Replace string ~ withとでてくるので置換語を入力するとカーソル位置より後ろにあるバッファ内の全ての検索語と同じ文字列が置換語に変換されます。
まとめ
今回はEmacsを使う上で、知っていると便利なことを紹介しました。知っているか知っていないかだけで圧倒的に作業効率が変わるのでこの機会にしっかり覚えてしまいましょう。
Emacsでは他にもメール機能があったり、Emacs内でシェルを開けたりと色々な機能があるので随時発信していきます。
次回はリダイレクトとパイプという新しい概念について学んでいきましょう。
今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はツイッターの方もフォローお願いします!!