ソフトウェア設計及び演習2015

応用編

コンパイル

コンパイルの実行「M-x compile」

ほとんどの人が利用しているとは思いますが,作成したプログラムのコンパイルはEmacsから実行すると便利です.

M-x compile

とタイプすると,ミニバッファに「Compile Command: 」と表示されます.ここに実行したいコマンドを入力するとコンパイルを実行できます. 今まではミニバッファに「gcc xxxx.c -o xxxx」のようなコマンドを入力していたと思いますが, Makefile が作られている場合は,ミニバッファ「make」などとタイプすればOKです.

エラー処理

(こちらも既に活用している人がいるかもしれませんが)Emacsからコンパイルする利点はコンパイルエラーを処理するときです. ショートカットキーを一度タイプするだけでエラー箇所へジャンプしてくれます.

M-g n 次のエラーに対応する箇所へジャンプ(next-error)「C-x ` (バッククォート)」でも同じことができる.
M-g p 前のエラーに対応する箇所へジャンプ(previous-error)

このコマンドを次々に実行して,エラー箇所をチェックすることができます.

バッファ,ウィンドウ,フレーム

バッファ

Emacsでファイルを編集するとき,ファイルを直接に編集するわけではありません. まずファイルをいったんバッファにコピーして,コピーしたものを編集します. 編集したコピーをファイルに保存すると,編集内容がファイルに反映されます. バッファに関する代表的な操作を3つ挙げます.

C-x b 直前のバッファと切替える
C-x C-b バッファ一覧の表示
C-x k 現在のバッファを閉じる

ウィンドウ

バッファを表示している部分のことをウィンドウと言います. 要は,テキストを編集する部分のことです. ウィンドウに関する代表的な操作を下に挙げます.

C-x 2 現在のウィンドウを上下に2分割します.
C-x 3 現在のウィンドウを左右に2分割します.
C-x o 別のウィンドウにカーソルを移動します.
C-x 0 カーソルがあるウィンドウを消します.
C-x 1 カーソルがあるウィンドウを残して、他のウィンドウを消します.

ウィンドウの分割と合わせて使おう: シエルコマンドの実行

Emacsからコマンドを実行できます.ウィンドウ分割と合わせて使いましょう.

M-x shell サブシェルを起動.Emacsバッファを介して,コマンドの入出力を対話的に行うことができる
M-! ミニバッファ内でシェルコマンドを指定すると,そのコマンドの実行結果を表示してくれる (shell-command).

フレーム(講義では省略)

画面に表示されている emacs 全体のことをフレームと言います. フレームに関する便利なショートカットを以下にまとめます.

C-x 5 2 新しいフレームを作成して,現在のバッファを表示します.
C-x 5 o 他のフレームへ移動します.
C-x 5 0 現在のフレームを削除します.
C-x 5 f 新しいフレームを作成して,そこで指定したファイルを開きます
C-x 5 b 新しいフレームを作成して,そこで指定したバッファを表示します.

C-mode

モード

Emacsは,編集するファイルに応じて固有の「モード」があります. 例えば

  • Cプログラムを編集するのはC mode
  • テキストを編集するのはtext mode
  • Makefileを編集するのはmakefile mode

これらのモード(メジャーモード)は,主にファイルの拡張子で決まります.

  • 拡張子が c や h ならC mode
  • 拡張子が txt ならtext mode
  • ファイル名が Makefile や makefile なら makefile mode

それぞれのモードには,その種類のファイルを編集するための色々な機能が用意されています. 例えば C mode では

  • 適切に字下げ(インデント)してくれる
  • ファイル内を移動する便利なコマンド

などが用意されています.

現在のモード

現在利用しているモードは,モードライン(Emacs下部にある灰色の部分)に表示されています.

C-modeで使える便利な機能

C-c C-q 現在編集中の関数全体をインデント
M-a カーソルが1 statementずつ戻る
M-e カーソルが1 statementずつ進む
C-M-a 関数の先頭へ移動
C-M-e 関数の末尾へ移動
C-c C-c リージョン内をコメントアウト
C-u C-c C-c 上の逆操作(リージョン内のコメントをはずす)

タグ

タグって?

プログラムを作るとき,

  • 「この関数の定義を見直したい」
  • 「前に#defineした値を忘れた」

と思うことが度々あります.その度にファイルをさかのぼって定義を見直すのは結構面倒な作業になります. さらに複数のファイルを使ってプログラムを作っているときは「この関数を定義したファイルはどれだっけ?」ということになり,さらに面倒になります.

タグ(TAG)を使うと,こうした面倒から解消されます. マクロ,関数などがどのファイルにあるかという情報を,タグファイルというファイルに保存しておき,Emacsから必要なときに瞬時に参照したい情報を見ることができるようになります.

タグテーブルの作成

タグテーブルとは,複数のファイルで構成されるプログラムが,どのように各ファイルに分割されているのか記述したものです. これは,プログラムを構成するファイル名,そのファイルに入っている関数の名前やファイル内の位置の一覧です.

ソースファイルがあるディレクトリで,次のコマンドを実行します.

% etags ファイル名

プログラムをたくさんのファイルを使って作成している場合は

% etags *.h *.c

実行すると,そのディレクトリに TAGS というファイルができます。 このファイルには,プログラムで定義されている関数や変数の名前などが記録されています。

補足

もしプログラムのソースを複数のディレクトリを使って作成している場合は,以下のようにして TAGS を作ります。

% find . -name "*.[ch]" -print | xargs etags

これで現在のディレクトリの下にある全ての *.c *.h ファイルを使ってTAGSを作ることができます.

タグの機能を使ってみる.

以下の2つの機能を使ってみよう.

M-. 指定した関数を定義したファイルを開き,関数を定義している場所を表示(ジャンプ)
M-* ジャンプ後,元の位置に戻る
C-x 4 . 指定した関数を定義したファイルを別ウィンドウに開き,関数を定義している場所を表示

はじめてタグの機能を使うときは,タグテーブルの場所を聞かれるが, 先ほど作ったファイル(TAGS)をしてすれば良い.通常は,デフォルトのままで良い(つまり,そのままリターンを押せばよい).


最終更新日:2015/05/22 11:57:47