![]() |
Emacsによるソースファイル編集 |
Emacsによるソースファイルの編集機能について見ていきます。
キャラクタ端末でも有効なblink-matching-parenとグラフィックス環境で有効なshow-paren-modeの2つがあります。
デフォルトでは、プログラミング編集モードでは閉じ括弧をタイプすると、対応する開き括弧の位置へカーソルが短時間移動して戻ってきます。
| 変数名 | 指定内容 | デフォルト値 |
|---|---|---|
| blink-matching-paren | t / nil | t |
| blink-matching-delay | 秒 | 1 |
| blink-matching-paren-distance | 文字 | 25600 |
Meadowではグラフィックスを使用できるので、上述のblink-matching-parenよりも見やすい対応括弧表示のモードが利用できます。以下のコマンドでモードのオン/オフが切り替えられます。
M-x show-paren-mode
モードがオンのときは、以下のように対応する括弧が色つき表示されます。
![]() |
M-;
によって、カーソルのある行の然るべき位置にコメント入力が開始されます。(indent-for-comment)
doSomething();
//
|
空白行でM-;とタイプすると、インデント位置に//が入る |
isActive = false; // |
コードのある行でM-;とタイプすると、行末に//が入る |
C-M-j
によって、現在編集しているコメント行の次の行をコメント行として開始します。(indent-new-comment-line)
// infinite loop
//
|
loopの直後でC-M-jとタイプすると、次の行のインデント位置に//が入る |
/**
* Calculate cost of the work
*
|
workの直後でC-M-jとタイプすると、次の行のインデント位置に*が入る |
C-c - C-x ;
によって、カーソル行のコメント部分を削除します。(kill-comment)
行全部がコメントのときは、C-kで行削除した方が簡単ですが、この操作が威力を発揮するのは、行末コメントの場合にコメント部分だけが削除されることです。
C-c C-c
によって、リージョン(選択範囲)行をコメント化またはコメント化解除を行います。(comment-region)
Javaではプログラム中で使用するクラスをimport文で宣言する必要があります。そのためコードを書いている途中でimport文を追加しにファイル先頭へ行って、またもとの場所へ戻ってくる作業が頻繁に発生します。このとき、import文を書く位置や現在編集中の位置をマークしておくと便利です。
注)最近のバージョンではimport文を追加するWizard機能があるので、その機能を使った方が100倍楽です。
レジスタ(1文字の名前)にポイント位置を記憶するには
C-x r [spc] <名前>
たとえばimport文を書く位置にポイントをあわせ、C-x r [spc] iとレジスタiに記憶します。[spc]はスペースキーを押すことを表わします。
レジスタに記憶した位置へ移動するには
C-x r j <名前>
先のiレジスタの位置へ移動するには、C-x r j i と実行します。
上述1.2.の手順でimport文記述位置をレジスタiに保存し移動することができるようになりました。しかし、いったん移動したあと、もとの編集場所へ戻ることが大変です。そこで、2.で移動する前に、現在の位置をマークしておきます。別な名前のレジスタに保存してもよいのですが、それよりもマークを使った方が簡単です。
C-[spc]
を実行すると、ミニバッファ行に"Mark set"と表示されます。そして2.の手順でimport文を記述した後、
C-u C-[spc]
を実行すると、先ほどマークした場所に移動します。このマークは1回限りなので、再度移動するときにはまたマークをします。
ソースコードのインデントが何らかの理由で崩れているとき、インデントを自動で整形することができる。ブロック単位(中括弧'{', '}'で囲まれた範囲)で実行される。
Emacsには、動的略語(dynamic abbrev)という機能があります。これを使うとコーディング効率がぐっと向上します。使い方は下記例を見れば一目瞭然でしょう。
ObjectOutputStream objectOutputStream =
new Ob
と打ってから、M-/ を実行すると、下線部が
ObjectOutputStream objectOutputStream =
new ObjectOutputStream
と展開されます。上記の場合はカーソル位置から直前のObで始まる単語を展開します。ただし、Javaでは大文字小文字を区別する必要があるので、動的略語展開では大文字小文字検索を区別するように.emacsに設定しておきます。
(setq dabbrev-case-fold-search nil) |