Emacsの使い方


プログラムを作るには、そのソース(元)ファイルという、プログラムを 書いたファイルを作らなくてはなりません。また、LaTeXで文章を作成する場合も、
やはり LaTeXの形式に従ってソースファイルを作らなくてはなりません。この実習では、大変高機能なエディタであるEmacsを使います。

Emacsをつかう 1: 文字の入力

これだけは 最初に覚えるべし

最低限、これは絶対に忘れないでください。

表記:

emacs を使うときは、多くのコマンドをコントロール(CTRL)キーを押しながら、 とか、ESCキーを押してから、という操作で実行します。いちいち 書くと面倒なので、コントロールキーを「押しながら」という操作を "C-" で示し、ESCを「押してから」という操作を "M-" で表現します (画面にもそう表示が出ます)。具体的には「コントロールキーを 押しながら'g'を押すこと」を "C-g" と表記します。さらに、 「CTRLを押しながら x, 続けて CTRLを押しながら s」 という場合は "C-x C-s" を表記し、 「CTRLを押しながら x, 続けてただ i を 入力」という場合には "C-x i" と表記します(後半にC-が つかないことに注意)。

起動:

端末の上で emacs & とします。もし、編集すべきファイル名が決まっているなら emacs ファイル名 & とします。 ファイル名を間違っても、保存するまではファイルはできないので、 間違ったら、一旦終了してしまいましょう。

終了:C-x C-c C-x C-c

emacs を終了します。もし、編集していたファイルの1つでも 保存していないと "Save file .. ?" と聞かれます(こういうメッセージは 一番下の一行だけの枠:ミニバッファに表示されます)。 保存するときは 'y' で、しないときは 'n'で答えます。'n'と 答えるとしつこく聞かれますので、よく質問を読んで答えてください。

コマンドキャンセル:C-g

良く分からないことになったら、まず試すべきが C-g です。 特に、CTRLを押しながらなにか入力すると、謎のコマンドが発動することが あります。一発実行でなければ、これを C-g でキャンセルできます。 下に変なメッセージが出たら、まずは C-g 、どうしようもなさそうだったら 終了しましょう。もちろん、「あ、やっぱり、このコマンドやめ」と 思い直す場合も C-g です。

アンドゥ: C-/ (SHIFTのとなりの/)

うっかり消してしまったり、謎のコマンドの実行で変になったら、 まずは C-/ を試してみてください。emacs のアンドゥ(操作取り消し)は かなり強力で、かなり昔までもどれます。うっかり戻りすぎてしまった ときは、適当な文字を一文字入力してから、C-/ を押すと、戻った 過程を戻っていきます。

だいたい、以上の操作は忘れないでください。そうすれば、あとは わりと直感的につかえます。

基本的な操作

内容の編集の基礎:

一度でもコンピュータで文書をつくったことがあれば、すぐになれると 思います。基本的に文字の入力はカーソルのところで行います (厳密にはカーソルの左端の縁らしいです)。←↓↑→キーでカーソルを 動かして、文字を打てば、編集はできます。BSキーを押せば前の文字が、 C-d を押すと直後(というかカーソルのある文字)が消えます。 (BSかDELかどっちかを押すとヘルプがでてくることがあります。 必要なければ C-g で消してしまいましょう。興味があれば読んでみるのも よいとおもいます) 感覚がつかめない人は、TAの人をつかまえて、とことん聞いてください。 これができないと、この先非常に困ることになります。

さっさと移動: C-v, M-v, M->, M-<

ファイルが大きい場合、あちこち動くのに一行一行動いていては たいへんです。そこで、一度に大幅に動く操作があります。C-v は ほぼ1画面分下に、 M-v は1画面上に動きます。また M-> (ESCを押してから、Shiftを押しながら、">."のキー)で 一番最後、M-< で先頭にジャンプします。

ファイルの保存: C-x C-s

C-x C-s と入力すると、ファイル名がすでに決まっている場合(下の方に ファイル名があります)は そのまま保存します。決まっていない場合は (scratch と書いてあります)ファイル名を聞いてくるので、ファイル名を 決めてください。 人によると、終了(C-x C-c)で 終了コマンドで保存、という癖をもってたり しますが、好ましくありません。このコマンドを覚えておきましょう。 また、いつ変な状態になってもいいよう、定期的に無意識に C-x C-s を 押すくらいになりましょう(多少行過ぎ)。

一行削除: C-k

間違った行を一文字ずつ消すと面倒です。そういうときには、 行の頭で C-k を打ちます。C-k はカーソル以降を消すため、 行の途中からでも消せます。また、C-k 1回目は文字を消して、 2回目(それ以降文字が無い場合)は次の行をつなぎます。 行を消滅させる場合にはC-kを2回押すことになります。

マーク&領域削除: C-スペース、C-w

もっとゴッソリ消したいときは「領域削除 C-w」をつかいます。 このためには、予め、領域の先頭(終点にもなり得る)を設定します。 そのために、「マーク設定 C-スペース」を使います。 消したい範囲の端で CTRLを押しながらスペースキーを押すと 下に "Mark set" とメッセージが出て、マークが設定されます。 次に、もう一方の端で C-w とすると、その範囲が削除されます。 注意点は「矩形状に」削除されるのではない、ということです。 emacs ではファイルは最初から最後までひと続きの文字の連なりとして 表現されるためです。

貼付け: C-y

emacs には 明示的な移動、コピーのコマンドはありません。そのかわり、 「貼付け C-y」によって移動、コピーが可能です。C-k や C-w で 画面から消えた文字は、陰のほうに保管されています。C-y はそれを 持ち出してきて、いまのカーソルのところに挿入するコマンドです。 移動の場合は C-k や C-w で一旦削除して目的地で C-y で貼付けます。 コピーの場合はどうしたらいいでしょうか? C-y は最後に C-k, C-w で 削除した領域を何度でも貼付けることができます。これを利用して、 (1)C-k, C-w で一旦削除 (2)カーソルを動かさず、その場に C-y で 貼付け (3) 目的地で C-y で貼付け という3ステップでコピーできます。 C-k, C-w, C-y はセットで覚えておくと仕事が早くなります。 (よりエレガントが好きな方には M-w というコマンドをお勧めします。 領域を C-y は出来るようにしますが、C-w と違って、削除はしません)

大量に実行: C-u, C-数字

行削除や同じ文字の入力を大量にしたいときがあります。例えば、 ======================================== など(どちらかというと飾り目的)。そういうときに使うのが C-u,C-数字です。 C-u は次のコマンドを4倍にします。C-u a とすると、a を4回押したのと 同じ効果が、C-u C-k とすれば4行消えます(微妙にC-kの動作と 違いますが気にしないように:-))。C-u C-u a とすると、"C-u a を4倍"に なって、16倍になります。残念ながら C-y には効かないようです。 4の巾乗だけだと不便ですが、CTRL を押したままで数字を入力してから、 なにかすると、その数だけ実行されます。たとえば、上の例は '=' が 40個ですが、この場合 "C-4 C-0 =" と入力しています。 あんまり役にたたなさそうですが、「ここからファイルの最後まで消したい!」 とかいうときに、"C-u C-u C-u C-u C-u C-k" なんてすることもできます。

検索: C-s, C-r

あの関数どこやったっけ? など 特定の文字列を探したいことはよくあります。 そういうときには 「検索 C-s or C-r 」を使います。C-s と C-r の 違いは、C-s がカーソル以降で C-r がカーソル以前を探すことです。 いずれも、下で検索対象を求められますので、入力してください。 この検索はおもしろくて、入力されている範囲で一致するものを探します。 ので、独特の文字列だと、あまり入力せずにすぐに見つかるでしょう。 候補が複数ある場合は、C-s を押す度に次に C-r を押す度に前にすすみます。 また、それぞれ最後までいくと最初から始めます。また、C-s で行過ぎた ときに C-r でもどる、などの操作も可能です。 なお、目的地についたら、ESC や C-スペースや、カーソル移動でその場に 居着きます。C-g を押すと、検索を始めた場所にもどります。また、 一度 C-s, C-r を使うと、2度目以降は空欄のまま C-s と もう一度押すと 前回の内容が呼び出されます。

ファイルの挿入: C-x i

いま編集中のファイルに別のファイルを挿入したいことがあります。 典型的な例だと、あとで説明するメイルで プログラムを送りたいときとか(笑)。 そういうときに、「ファイル挿入 C-x i」を実行します。すると、下で ファイル名を聞かれますので、入力してください。ちなみに、そのとき、 現在のディレクトリが入力された状態になっています。その先頭に "~/" という部分がある場合があります。これは各自がログインした ディレクトリ(ホームディレクトリ)を示しています。

ファイルの呼出: C-x C-f

C-x C-f とすると、別のファイルを開くことができます。C-x i と 同じようなことが聞かれます。もし、ファイルが存在していれば、 新しくバッファ(後述)をつくって読み込みます(いままで編集した ファイルは見えなくなるだけ)。もし、なければ、新しい名前の ファイルをつくることになります(実際にはC-x C-sまで ファイルは 出来ません)。

ファイルの名前を変えて保存: C-x C-w 今のプログラムを取っておいて、名前を変えて改造したい、という 場合などにつかいます。ファイル名の入力を求められますので、 答えれば、そのファイルになります。以後 C-x C-s で保存する先も 新しいファイル名になります。

以上が、基本的な操作です。 知っていると ファイルの作成が楽になることでしょう。

バッファ・ウィンドウの操作

emacs は同時に複数のファイルを編集できます。それぞれは別々の 「バッファ」と呼ばれています。また、画面に普段は1つのバッファ しか表示されていませんが、画面を分割して、2つのバッファを 見比べながら編集することも可能です。また、うっかりとか、 他の誤操作の副作用でウィンドウに分割されてしまうこともよく ありますので、これらの操作法を覚えておくことは損ではありません。

バッファの切り替え: C-x b

C-x b と入力すると、どのバッファに切り替えるか?と聞かれます。 バッファ名(普通はファイル名)を指定します。ただEnterキーを 入力すると"( )"内に表示されているバッファに切り替わります (前回切り替えたバッファ:ふたつのバッファだけならEnterだけで 行き来できます)。間違ったものを 入力しますと、その名前であたらしくバッファが出来てしまいます (新規ファイルをつくることもできますが)。そのときは、後述の方法で すぐに消してしまいましょう。 emacs は賢いので TABキーで補完ができます。バッファ名を聞かれたとき、 最初の数文字を入れてから TAB を押すと、残りが確定します。何も 入力せずにTABを押すと、一覧がでますので、それを参考に入力することも できます。ちなみに、TAB で補完が完了しているところで さらに TAB を押すと "Sole completion" と表示が出ます。念のため、これを 確認すると良いでしょう。test1.c test2.c とあった場合、補完は 共通部分の test で止ってしまうためです。共通部分で止ったところで TAB を押すと、候補が表示されます。

バッファの消去: C-x k

まちがってつくったバッファや、もう必要のなくなったバッファは それを表示しつつ C-x k とすると消えます。保存していない変更が あるばあい、消す前に保存するかどうかをきかれます。

ウィンドウの移動と消去: C-x o, C-x 0(ゼロ)

emacs 内でウィンドウを分割した場合や、なぜか分割されてしまった 場合には、C-x o で別のウィンドウにカーソル、すなわち編集対象を 移動できます。また、マウスが使える状態なら、マウスでクリックしても 実は動きます。 C-x 0(ゼロ)でカーソルがあるウィンドウが画面から消えます。もちろん バッファとしては残っています。 そのほか、C-x 2 でウィンドウを上下分割、C-x 1 で今使っている ウィンドウ以外消去などもできます。

ウィンドウのサイズ変更: C-x ^ , M-x shrink-window

基本的にふたつになったウィンドウは同じサイズです。ですが、 何かを見ながら、という場合一方のサイズを大きくしたいことが あります。そういうときは、大きくしたウィンドウで "C-x ^" と 入力すると1行だけ大きくなります。もっと、という場合は、 4倍コマンド "C-u" と組み合わせてつかいましょう。 いや、縮めるほうが趣味にあっている、という場合、 "M-x shrink-window" とします。この M-x というのは emacs のコマンドを実行するためのものです。これまで紹介してきた 各種キー操作は実はこれらのコマンドを呼び出すように割り当てて あったのですが(文字の入力すら、そうです)、縮める shrink-window には 残念ながら割り当てがないので、コマンドを打つ必要があります。 同じようにコマンドを入力するもので 覚えておくと便利なのは "M-x goto-line" です。これは行番号を聞かれるので答えると、 その行にジャンプします。C言語のコンパイルなどでエラーが出たときに 探すには便利です。

このくらいまで使うと、あとはキータイプ速度でしょうか。


Emacsをつかう 2: 日本語の入力

C言語のプログラムに日本語は必須かといえば、必須ではありません。 世の多くのプログラミング言語はアルファベットと記号だけで済みます (一部に日本語ベースのものもありますが)。しかしながら、 プログラムの出力メッセージや、注釈(コメント)に日本語を使いたい 場合もありますし、メール、レポート作成と言った場合には 日本語は必須と言えます。 そこで、ここでは emacs での日本語の入力を扱います。 なお、emacsの操作はある程度出来ることを 前提にします。

ひらがなの入力

基本的に入力はローマ字入力です。ローマ字が分からない...という 方はいないと信じていますが、いたら こっそり相談してください。 忘れた、という場合には、小学校の教科書を実家から取り寄せてください..。

emacs で日本語を入力する場合は、日本語専用の状態に切り替えます。 このためには "C-" と入力します。CTRLを押しながら ENTER の 上辺りにある "\" (場合によっては¥) を押します。すると、 左下に "[あ]" と表示されます。この状態で "C-"をもう一度押すと "[--]" となり、もとに戻ります。

日本語入力状態で、"aiueo" とうつと "|あいうえお|" と表示が出ます。 両側の "|" は操作範囲を示すものです。ここで Enter を押すと、 "|" がとれて、入力が完了です。入力をキャンセルするときは C-g で 消えます。

漢字への変換

漢字に直すには、ひらがなを入力して Enter を押さずに、スペースを 押します。 すると変換結果が表示されます。

|[愛]上尾|

辞書はかなり頭が悪いので心してください:-)。これでよければ、 Enter を押すことになりますが、

注:ここでボロクソにかかれている「辞書」というのは、 Wnnという日本語処理システムのもので、たしかにいま使うと腹立ちますが、当時は画期的だったそうです。 2009年からの実習サーバにはAnthyという日本語入力システムが入っており、 これはもう普通のワープロ並に使えます。 以下はWnnに関する記述ですので、読まなくて結構です。

ふつうはよくありません。

基本的に変換は文節単位で行われます。変換中の表示で ' '(空白)や '-' が入っているところが文節の切目です。' 'はただの切目、 '-' は接頭語、接尾語 ではないかと、コンピュータは想定しています (もちろん、正確に認識しているとは限りません)。最初はカーソルは 先頭の文節にいます。ここで スペースを押すと 次の候補になります。 うっかり押しすぎて行過ぎたときは C-p を押しましょう。1つ戻ります。 次の文節に移りたい場合は C-f、1つ前の文節は C-b です(forward, backward)。 それぞれの文節を望む表示になるまで選んでください。

ところが、そもそも、この文節の区切りがへんなことがあります。 そういうときは、変に区切られた文節にカーソルを移動した上で、 C-o, C-i を押します。C-o で文節が長くなり、C-i で短くなります。 多くの場合、この操作も必須なので覚えておきましょう。

さて、いくら頑張っても目的の漢字が出ないときはどうしましょう。 そのときは、あきらめて、思い付く限り同じ漢字を含む別の 単語を入れてみるしかありません。出てきたら Enter 押して、 要らない部分を消去してください。

あとはこの操作を繰り返します。

知ってて損のない操作

カタカナを入力したい:

この変換は必ず一番最後の候補にカタカナを用意しています(最初に出たら それ以外思い付かなかったということ)。かといって、「か」のような ひたすら漢字があるようなものだと大変です。そういうときは C-p を 2回くらい押します。そうすると、出てくるでしょう。

小さな文字を入力したい:

「ゃゅょ」は「にゃ」などで入りますが、「ぁぃぅぇぉ」みたいな ものも入力したいことがあります。こういうときは その文字の前に 'x' を押します。「ぁ」なら "xa" です。これをつかうと、 「ぁゃιぃ」などとかけます。ん? 日本語に小さな「し」って あったっけ????(もちろん "xshi"じゃでませんよ(笑))。

漢字が一杯ありすぎて選ぶのがしんどい:

その場合、変換中に M-s を押します。そうすると、下に一気に 表示できるだけでます。この状態で C-p C-n で上下、C-f C-b で左右に カーソルが動きますので、目的のものを選んでください。 これも案外大変なので、コンピュータ以上に頭を使って「目的の 漢字を含む、他に候補のなさそうな単語」を変換する、というのも 手です。例えば「価」を入力したいときに「か」とすると大変ですが、 「価格」とすると一発で出てくることでしょう。

正方形の?アルファベットや記号を入力したい:

普通にアルファベットを打つと、多くの場合ひらがなになってしまいます。 ですが、「ABC」なとど正方形の文字で入力したいこともあります (プログラムではメッセージなどでしかつかえませんが)。 こういうときは「Aa」なら "ZAZa" と最初に'Z'をうちます。 "Z " と打つと 幅の広いスペース「 」ができます。ただし、これは 要注意で、まちがってプログラムに紛れ込むと 正体不明のエラーを 多発することになります。

記号を入力したい:

一部の記号「?」などはそのまま出ますが、「←」などは なかなか 出てきません(やじるし、で出ますが)。そういう記号類は "z" の次に何かを押すと、でます。が、私も何を押すとどれが出るか、 覚えてません(笑)。良く使う矢印は、z+h,j,k,l で 「←↓↑→」になることだけ知ってます。さっきどこかでみた気がする、 と思った人は良く読んでます(^^;。あとは「〜」は "z-" です。

記号を入力したい2:

それでも無いときは、文字の一覧から探すことができます。 ギリシャ文字などもあります。漢字変換モードで C-^ を入力します。 下の方に Garbage collecting...done と出て、なにやら止ったようですが、 C-f などを押すと、ちゃんと表示されます。ここで記号などを 入力できます。

[IPA]ってなんだ!?:

突然へんな文字しか入らなくなって、よくみると右したに[IPA]と 書いてあることがあります。そのときは 焦らずに、終了してしまうか (わからない状態になったら終了するのもひとつ)、C-] を押しましょう。 手が滑って C-] を押してしまうと [IPA]になって、もう一度押すと もどります。長いこと、これに苦しめられました(笑)。

自分の名前くらいちゃんと変換して欲しいのですが...:

最近のパソコン辞書はかなり賢くなってきて、ついに私の名前も 変換できるようになったみたいです(長い月日でした)。 自分の名前くらい、ちゃんと一発で変換して欲しいのですが、 なかなか出てきません。名前に限らず、良く使う単語は覚えて ほしいものです。 そのような場合、覚えさせることができます。まずは、何とかして 目的の漢字(単語)を入力します。その先頭にカーソルをもっていって "C-スペース" で マークを付けます。次に最後にカーソルを持っていって "M-x toroku-region" と入力します。すると、読みをきかれるので 読みを、登録辞書はそのまま Enter、品詞は自分の名前なら固有名詞なので 1 Enter、さらに人名で 1 Enter です。 うまく行けば、次からちゃんと変換してくれることでしょう。 最後の方、なにか偏りがひどい気もしますが、知っていて 損はないとおもいます。


Emacs練習課題: ソースファイルの作成

emacsで以下の内容のファイルを作り、test1.cとして保存して下さい。

/* Program "test1.c" */

#include <stdio.h>

int main(void) {
  printf("Practice C Programming \n");
  return 0;
}

次に、以下の内容のファイル"file.dat"をemacsで作成して下さい。

 1   10   11   10   200
 2   31   21   40     1
 3    0   11   10    10
 4    5    3    7   110

データはtab又はスペースで区切って並べます。

余力がある人は以下の課題に挑戦してみましょう。

gnuplotによる描画

先ほど作成した"file.dat"を使って図を作成してみましょう。gnuplotは、2次元・3次元のグラフを作成するためのアプリケーションソフトウェアの一つです。
まずgnuplotを起動します。

 gnuplot 

起動したgnuplotターミナル上で以下のコマンドを入力してください。
plot'file.dat' u 2:3 ps 3 pt 7
ここで、"u"はusing、"ps"はpoint size、"pt"はpoint typeを意味しています。また、"2:3"は"file.dat"の中の2列目を横軸に、 3列目を縦軸にプロットするために指定しています。"file.dat"の中には4列目までデータがあるので、余力がある人は他の列のデータを使て 図を作ってみてください。

次に作った図を保存してみましょう。これまでの操作は図をプロットしただけで保存されていないため、gnuplotターミナルを閉じると消えてしまいます。 以下のコマンドをターミナルに入力してください。

set terminal postscript enhanced color eps
set output'illust.eps'
plot'file.dat' u 2:3 ps 3 pt 7
図を保存するためにはどの形式(eps,png,jpeg,pdfなど)で保存するかをまず指定する必要があります。今回はeps形式で保存しています。 その次に保存するファイル名("illust.eps")を指定します。 ここまででillust.epsというキャンバスが用意できたので、最後にもう一度描画したいデータを指定します。

最後にgnuplotターミナルを終了します。

exit
LXターミナルに戻った後で"ls"をしてみると、"illust.eps"のファイルが生成されていると思います。 このファイルの中身を見るためには"evince"を使うとよいでしょう。
evince illust.eps

TeX文書の作成(参考)

まだ余裕があれば、TeXを使って文書を作成してみましょう。 TeXはUNIXで使われている 文書作成ソフトウェアです。 数式などのレイアウトが美しくできるという特徴があります。

まずTeXをインストールしましょう。ターミナルに以下のコマンドを入力してください。

sudo apt install texlive-lang-japanese
途中で"[y/m]"と聞かれるので、"y"と入力してください。

インストールが終わったらemacsで以下の内容のファイルを作り、sample.texとして保存して下さい。

\documentclass[12pt,a4j]{jarticle}
\usepackage[dvips]{graphics, color}

\title{これはTeXのサンプルやで}
\author{サザエさん}
\date{\today}

\begin{document}

\maketitle

この講義は面白いですか。この辺りの文章は適当に打ち込んで下さい。
Texに関して詳しく、テキスト(p.1-8)や、実習室にあるTexの本を参考にして
下さい。Texでは基本的に改行しても文章はつながります。

段落を分けたい場合には、このように空行を入れます。
文字を中央にそろえたい時には、

\begin{center}
このように
\end{center}

\begin{verbatim}
    \begin{center}と
    \end{center}で
\end{verbatim}
囲みます。

文字の大きさも変えられます。\\
{\footnotesize ほげ}\\
{\small ほげ}\\
{\normalsize ほげ(通常サイズ)}\\
{\Large ほげ}\\
{\LARGE ほげ}\\
{\huge ほげ}\\
{\Huge ほげ}\\

ここで$\backslash \backslash$と書くと改行になります。\\
記号も出すことができます。
$\alpha, \beta, \gamma, \delta, \leftarrow,\rightarrow$\\
\TeX では特に美しい数式を描くことができます。\\

\begin{equation}
f(x) = \int^{100}_{0} \sqrt{g(t)}\frac{1}{e^{\int^{t}_{0} h(s) ds}} dt
\end{equation} \\

また、\%以降はコメント(説明)文として無視されます。
%ほら、これがコメントね。

tgifで描いた図形を入れることもできます。
\begin{figure}[hbtp]
  \begin{center}
   \resizebox{!}{6cm}             % \resizebox{横の大きさ}{縦の大きさ}
    {                             % 縦横比を保持するには片方を!にする
     \includegraphics{illust.eps} % 挿入する図を指定
    }
    \vspace*{1cm}         %キャプションの縦の位置を調節する
    \hspace*{-2.5cm}        %キャプションの横の位置を調節する
    \caption{ほらこの通り}        % キャプション
  \end{center}
\end{figure}

箇条書きはこのように書きます。

\begin{itemize}
\item 項目1
    \begin{itemize}
    \item こんなふうに
    \item 項目の中に項目を作ることもできますよ
        \begin{itemize}
        \item さらに!
        \item 項目を作ることもできます
        \end{itemize}
    \end{itemize}
\end{itemize}

\end{document}

作成できたら、以下のコマンドをターミナルに入力してください。

platex sample.tex
dvipdfmx sample.dvi
その後で"ls"コマンドを入力すると、sample.aux, .dvi, .log, .pdfファイルが作成されていると思います。 その中から"sample.pdf"を開いてみましょう。
evince sample.pdf
先ほどemacsで作成した文書をpdf化することができました。

学会や論文雑誌などでは基本的にTeXを使って文書を作成する場合が多いです。 余力がある方は是非マスターしましょう!


戻る