Emacsによるソース操作 のバックアップの現在との差分(No.1) - アールメカブ

アールメカブ


Emacsによるソース操作 のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[Linuxの備忘録]]

[[ここ:http://www.alles.or.jp/~torutk/oojava/meadow/programcoding.html]]が手っ取り早く参考になった.以下は引用.

#contents


- コーディング時の便利機能
* コーディング時の便利機能 [#ra6b87bc]
コーディングミスを防止する
括弧の対応付けを表示

キャラクタ端末でも有効なblink-matching-parenとグラフィックス環境で有効なshow-paren-modeの2つがあります。
blink-matching-paren

デフォルトでは、プログラミング編集モードでは閉じ括弧をタイプすると、対応する開き括弧の位置へカーソルが短時間移動して戻ってきます。
変数名 	指定内容 	デフォルト値
 blink-matching-paren 	t / nil 	t
 blink-matching-delay 	秒 	1
 blink-matching-paren-distance 	文字 	25600
 show-paren-mode

Meadowではグラフィックスを使用できるので、上述のblink-matching-parenよりも見やすい対応括弧表示のモードが利用できます。以下のコマンドでモードのオン/オフが切り替えられます。

    M-x show-paren-mode

モードがオンのときは、以下のように対応する括弧が色つき表示されます。

- コメントの編集
--単一コメントの記述開始
* コメントの編集 [#p1a38dba]
-単一コメントの記述開始

    M-;

によって、カーソルのある行の然るべき位置にコメント入力が開始されます。(indent-for-comment)

    doSomething();
    // 
空白行でM-;とタイプすると、インデント位置に//が入る

    isActive = false;   //

コードのある行でM-;とタイプすると、行末に//が入る

-- 次の行へのコメントの編集継続
- 次の行へのコメントの編集継続

    C-M-j

によって、現在編集しているコメント行の次の行をコメント行として開始します。(indent-new-comment-line)

    // infinite loop
    // 

--loopの直後でC-M-jとタイプすると、次の行のインデント位置に//が入る
- loopの直後でC-M-jとタイプすると、次の行のインデント位置に//が入る

    /**
     * Calculate cost of the work
     *

--workの直後でC-M-jとタイプすると、次の行のインデント位置に*が入る
- workの直後でC-M-jとタイプすると、次の行のインデント位置に*が入る
行内のコメントの削除

    C-c - C-x ;

によって、カーソル行のコメント部分を削除します。(kill-comment)
行全部がコメントのときは、C-kで行削除した方が簡単ですが、この操作が威力を発揮するのは、行末コメントの場合にコメント部分だけが削除されることです。

-- 複数行をまとめてコメント化/コメント解除
- 複数行をまとめてコメント化/コメント解除

    C-c C-c

によって、リージョン(選択範囲)行をコメント化またはコメント化解除を行います。(comment-region)
位置の保存

- Javaではプログラム中で使用するクラスをimport文で宣言する必要があります。そのためコードを書いている途中でimport文を追加しにファイル先頭へ行って、またもとの場所へ戻ってくる作業が頻繁に発生します。このとき、import文を書く位置や現在編集中の位置をマークしておくと便利です。
* マーク [#n6fa675d]
Javaではプログラム中で使用するクラスをimport文で宣言する必要があります。そのためコードを書いている途中でimport文を追加しにファイル先頭へ行って、またもとの場所へ戻ってくる作業が頻繁に発生します。このとき、import文を書く位置や現在編集中の位置をマークしておくと便利です。
注)最近のバージョンではimport文を追加するWizard機能があるので、その機能を使った方が100倍楽です。
--1.レジスタに位置を保存
-1.レジスタに位置を保存

レジスタ(1文字の名前)にポイント位置を記憶するには

    C-x r [spc] <名前>

たとえばimport文を書く位置にポイントをあわせ、C-x r [spc] iとレジスタiに記憶します。[spc]はスペースキーを押すことを表わします。
-- 2.レジスタに記憶した位置へ移動
- 2.レジスタに記憶した位置へ移動
レジスタに記憶した位置へ移動するには

    C-x r j <名前>

 先のiレジスタの位置へ移動するには、C-x r j i と実行します。
-- 3.現在編集中の位置をマーク
- 3.現在編集中の位置をマーク

上述1.2.の手順でimport文記述位置をレジスタiに保存し移動することができるようになりました。しかし、いったん移動したあと、もとの編集場所へ戻ることが大変です。そこで、2.で移動する前に、現在の位置をマークしておきます。別な名前のレジスタに保存してもよいのですが、それよりもマークを使った方が簡単です。

    C-[spc]

を実行すると、ミニバッファ行に"Mark set"と表示されます。そして2.の手順でimport文を記述した後、

    C-u C-[spc]

を実行すると、先ほどマークした場所に移動します。このマークは1回限りなので、再度移動するときにはまたマークをします。

- 自動インデント実行
* 自動インデント実行 [#j2988d97]

ソースコードのインデントが何らかの理由で崩れているとき、インデントを自動で整形することができる。ブロック単位(中括弧'{', '}'で囲まれた範囲)で実行される。

-- 操作方法
- 操作方法
インデントを整形したいブロックの始まり(すなわち中括弧の始まり'{')がある行にカーソルを合わせ、M C-q 。ブロック始まり行にカーソルを動かすには、M C-uとすると便利。 

- 文字補完(動的略語展開)
* 文字補完(動的略語展開) [#t85201af]

Emacsには、動的略語(dynamic abbrev)という機能があります。これを使うとコーディング効率がぐっと向上します。使い方は下記例を見れば一目瞭然でしょう。

    ObjectOutputStream objectOutputStream =
        new Ob

と打ってから、M-/ を実行すると、下線部が

    ObjectOutputStream objectOutputStream =
        new ObjectOutputStream

と展開されます。上記の場合はカーソル位置から直前のObで始まる単語を展開します。ただし、Javaでは大文字小文字を区別する必要があるので、動的略語展開では大文字小文字検索を区別するように.emacsに設定しておきます。

 (setq dabbrev-case-fold-search nil)