[CG実習 >  プログラミングのためのヒント]

プログラミングのためのヒント

ここでは,emacsでプログラムを作成する際に知っておくとよいことを簡単に紹介します.

もくじ

  1. Emacsのコマンド記法
  2. プログラムを実行してエラーが出たら
  3. プログラムの挙動を修正する手がかりを得る
  4. 手間を省く --- emacsでの切り貼り
  5. 元に戻す --- emacsでのundo
  6. プログラムをこまめにsaveしよう
  7. 修正の痕跡を残そう
  8. 混乱したら

Emacsのコマンド記法

Emacsでは[Ctrl]や[Alt]キーを使ったコマンドをよく使います(メニューでできる操作もあります).

[Ctrl]と他のキーを組み合わせて使うとき,Emacsの流儀では これを「C-x」というように記述します. この場合は[Ctrl]+[x]を意味します([Ctrl]を押しながら[x]を押す).

Emacsでは[Ctrl]と他のキーのペアを順に組み合わせて使うこともあります. たとえば[Ctrl]+[x],[Ctrl]+[s]を続けて入力するとファイルを保存するコマンドが実行されます. これをEmacsの流儀では「C-x C-s」と書きます ([Ctrl]を押しながら[x]を押して,[Ctrl]を押したまま,[s]を押す).

なお[Ctrl]や[Alt]以外のキーは押したらすぐに離します.

プログラムを実行してエラーが出たら

たとえば,次のようなプログラム(has_error.rb)を実行したとしましょう.


a = 1
c = a + b

すると,次のようなメッセージが表示されるはずです.

$ ruby  has_error.rb
has_error.rb:3: undefined local variable or method `b' for #<Object:0x2ac3ace0> (NameError)

これは,プログラムにエラー(間違い)があることを意味しています. 先頭の「has_error.rb:3:」は, ファイルhas_error.rbの第3行でエラーが発生したことを意味しています. このような場合には,ファイルの該当する行をみて, そこで何がエラーとなったのかを判断してプログラムの修正を行う必要があります.

ところでEmacsで特定の行に移動する際に,いちいち先頭から行を数える必要はありません. 画面下のモード行(細い帯)に「L??」と数値が表示されているはずです. その値が現在カーソルのある行を示しています.

なおエラーの原因は必ずしもエラーが発生した行にあるとは限りませんので注意が必要です. 別の行のエラーの影響で当該の行でエラーが見つかるという場合もあります.

プログラムの挙動を修正する手がかりを得る

たとえプログラムが動作しても,結果が想定通りにならないことはよくあります. そのような場合,プログラムに何らかの誤りがあるはずですが,プログラムの記述を調べるだけでは誤りが容易には見つけられないことも少なからずあります. そのようなとき,プログラム実行中に「誤りに関連がありそうな変数の値」を調べてみると,手がかりになりえます.

Rubyではp式(あるいはpp式)を使うと,変数の値を端末画面に表示させることができます. たとえば次のような例を考えてみます(例のための例で,実践的ではありませんが).


  x = 2
  y = 3

  p ['x',x,'y^2',y*y] 

これを実行すると,次のように表示されます.


  ["x", 2, "y^2", 9]

手間を省く --- emacsでの切り貼り

プログラムでは,同じような行をたくさん作ることもあるでしょう. しかし,そのようなときにすべて手で入力するのは,いかにも面倒ですし, そんなことをやるのは無駄です. そのような場合には,エディタの機能を利用して,必要なだけコピーを作っておいて,少しずつ修正していくべきです.

一般にエディタには,切り貼りの機能があります. もちろん,emacsにも切り貼りの機能があります. emacsでは,切り貼りのことをkill&yankといいます. これを実行する方法はいくつかありますが,もっとも簡単なのは次のものです.

C-k カーソルの位置から行末までをkillする(切り取る)
C-y 切り取ったテキストをyankする(貼り付ける)

C-kを行頭で実行すれば1行を切り取ることができます. またC-kを連続して実行すれば,2行以上を1回で切り取ることができます. 切り取った部分は,C-yで貼り付けられます. 2行以上を切り取った場合でも,1回のC-yで貼り付けられます. またC-yを繰り返せば,何度も貼り付ける(たくさんのコピーを作る)ことができます.

元に戻す --- emacsでのundo

間違ったことをしてしまった場合でも,元の状態に戻すことができます. そのような操作のことをundo(アンドゥ)といいます. emacsでは,次のコマンドでundoできます.

C-x u C-_ Undo(どちらでも可)

undoを繰り返し行うことで,どんどん前の状態に戻していくことができます. つまり,(操作情報が残っている限り)今までに自分の行った編集操作を1つづつ前へ前へと遡っていくことになるわけです. なおundoを行った後にC-gを入力して, 再びundoを行うとundoのundo(undoする前に戻す,undoの取消し)をすることができます.

プログラムをこまめにsaveしよう

プログラムを延々と書いた挙げ句,保存(save)する前に誤って消してしまったら泣くに泣けません. プログラムに限りませんが,ファイルを作成しているときは,こまめに保存(save)をすることをお奨めします.

emacsでのファイルの保存(save)のコマンドは『C-x C-s』です. プログラム作成中は,節目ごとにsave(C-x C-s)をかけるようにして下さい.

修正の痕跡を残そう

さて,プログラムを書いていると,一度作ったものを手直ししたくなるときがあります. そのとき,修正する部分を消して,新しいものを書いてもよいのですが, そうしてしまうと,あとで元に戻したくなったときに困ってしまいます.

そこで修正を行うときには,とりあえず元の状態を残しておくことをお奨めします. それにはいくつかのやり方が考えられますが, 修正前の部分をコメントにして残しておくのが簡単でしょう. もちろん,修正箇所をもとに戻すことがないようなら,元の部分は消してしまっても構いません.

また,修正が大規模になる場合には,一度ファイルを別名で保存しておくことも考えられます. ファイルのコピーを作っておくわけです. Unixでは,cpコマンドでファイルをコピーできます.

混乱したら

コンピュータでは,いろいろなことができます. そのため,却って,そうとは気づかずに自分が思いもしなかった操作をしてしまうこともあります.

emacsで間違ったコマンド入力をしたり, 何が起きているのか分からない状況になってしまったときは,cancelをかけてみると, 元に戻せることがよくあります. cancelの方法は次の通りです.

C-g キャンセル

これで現在実行している処理を取り止めます.C-gを何回押しても構いません (日置はクセで一度に2〜3回押します). このときミニバッファには次のように表示されます.

Quit
[CG実習 >  プログラミングのためのヒント]