[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsには、LispやCといったプログラム言語の構文を 理解するように設計されたコマンドが数多くあります。 以下のことを行えます。
単語/文/段落を扱うコマンドは、 自然言語のテキストを編集するのが本来の目的ですが、 コードを編集する場合にもおおいに役立ちます。 なぜなら、たいていのシンボルは単語ですし(see 節 U.1 単語)、 文は文字列やコメントの中にも含まれるからです(see 節 U.2 文)。 段落は本質的にはコードの中には存在しませんが、 プログラム言語向けのメジャーモードでは、 段落は空行で始まり空行で終わると定義するので、 段落コマンドも役立ちます(see 節 U.3 段落)。 空行をうまく使ってプログラムが整然と見えるようにすると、 段落コマンドもうまく働きます。
選択的表示機能は、関数の全体構成を眺めるのに便利です (see 節 J.4 選択的な表示)。 この機能は、指定幅以内の字下げ幅の行だけを表示します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsには、Lisp、Scheme(Lispの方言の1つ)、Awk、C、C++、Fortran、 Icon、Java、Objective-C、Pascal、Perl、Pike、CORBA IDL、 Tclといった各種プログラム言語向けのメジャーモードがあります。 makefile用のメジャーモード、makefileモードもあります。 Perl向けの別のモードとして、cperlモードもあります。
理想的には、Emacsで編集する可能性のあるすべてのプログラム言語に対して、 それぞれのメジャーモードを実装すべきです。 しかし、ある言語向けのモードが、構文的に類似した他の言語にも 使えることがよくあります。 既存の言語モード群は、誰かがわざわざ書こうと決心したものです。
Lispモードにはいくつか変種がありますが、 Lispを実行する際のインターフェイス方法が異なります。 See 節 W.6 Lisp式の実行 (2004/08/16)。
各プログラム言語向けメジャーモードでは、 その言語の慣用的な字下げ方法を理解し 現在行をそのように字下げする関数を実行するように TABキーを定義します。 たとえば、Cモードでは、TABはc-indent-line
にバインドされています。 また、C-jは、RETに続けてTABを実行するように 定義されています。 つまり、モードに固有の字下げも行います。
多くのプログラム言語では、行ごとに字下げ量が異なります。 そのため、そのような言語向けのメジャーモードでは、 (コマンドbackward-delete-char-untabify
を使って) タブ文字を等価な個数の空白と同じに扱うようにDELを再定義しています。 その結果、字下げが空白かタブのどちらで構成されているのか気にせずに、 1度に1桁ずつ消去することが可能となります。 そのようなモードでは、ポイントの直前にあるタブ文字を削除するには C-b C-dを使います。
プログラム言語向けモードでは、段落は空行で分割されると定義するので、 段落コマンドも便利に使えます。 プログラム言語向けメジャーモードで 自動詰め込み(auto-fill)モードがオンのときには、 新たに行を作ると自動的に字下げも行われます。
メジャーモードに入ると、モードフック(mode hook)と 呼ばれるノーマルフックが実行されます。 モードフックは、Lisp変数の値です。 各メジャーモードにはモードフックがあり、 フック名はつねにモードに入るためのコマンド名に`-hook'を付加したものです。 たとえば、Cモードに入るとフックc-mode-hook
が実行され、 Lispモードではフックlisp-mode-hook
が実行されます。 See 節 AE.2.3 フック。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
慣習として、釣り合った式を扱うEmacsのキーは、普通、コントロール・メタ文字です。 これらは、コントロールやメタだけの対応したキーの機能に似せてあります。 これらは、プログラム言語の式だけに関係したコマンドだと考えられがちですが、 ある種の括弧が存在する(自然言語も含めた)任意の言語に対しても有益なものです。
これらのコマンドは、2つのグループに分けられます。 一方は(括弧でまとめた)リスト(list)(30)だけを扱うもので、 丸括弧、角括弧、中括弧(使用言語において対応が取れている必要がある括弧)と、 それらをクォートするエスケープ文字だけに注目するコマンド群です。
もう一方は、式あるいはS式(sexp)を扱うコマンド群です。 「sexp」という用語は、 Lispの式を意味する古くからの用語s-expressionに由来します。 Emacsでは「S式」の概念をLispに限定しません。 プログラムを記述した言語が何であっても、その式をS式と呼びます。 各プログラム言語には独自のメジャーモードがあり、 そこでは、その言語の式をS式とみなすように構文テーブルを調整してあります。
一般にS式には、丸括弧、角括弧、中括弧に囲まれた部分だけでなく、 シンボル、数値、文字列定数も含まれます。
Cのように前置演算子と中置演算子を使う言語では、 すべての式をS式として扱うことは不可能です。 たとえば、Cモードでは、`foo + bar'はCの式ですが、 S式としては認識しません。 かわりに、`foo'と`bar'をそれぞれ1つのS式として認識し、 `+'はあいだにある句読点として認識します。 これは根本的に曖昧なのです。 たとえば、ポイントが`f'にあるとき、横断すべきS式としては、 `foo + bar'でも`foo'でも正当な選択肢です。 `(foo + bar)'は、Cモードにおいて単一のS式であることに注意してください。
式の構文が曖昧なために、 Emacsが正しく解釈できるようにしようなどとは誰も思わない言語もあります。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
forward-sexp
)。backward-sexp
)。kill-sexp
)。backward-kill-sexp
)。backward-up-list
)。down-list
)。forward-list
)。backward-list
)。transpose-sexps
)。mark-sexp
)。 S式を横断して前向きに移動するには、 C-M-f(forward-sexp
)を使います。 ポイントに続く最初の意味ある文字が開き区切り (Lisp では`('、Cでは`('や`['や`{')であれば、 対応する閉じ区切りのうしろに移動します。 シンボル、文字列、数値を始める文字の場合には、 それらを横断してその末尾に移動します。
コマンドC-M-b(backward-sexp
)は、 S式を横断して後向きに移動します。 移動の詳しい規則は上記のC-M-fと同様ですが、方向は逆です。 S式のまえに接頭辞文字(Lispではシングルクォート、バッククォート、コンマ)が ある場合には、それらも横断します。 ほとんどのモードでは、S式コマンドはコメントを空白であるかのように 飛び越えます。
C-M-fやC-M-bに引数を指定すると、 指定された回数だけ動作を繰り返します。 負の引数では、逆向きに移動します。
1つのS式全体をキルするには、C-M-k(kill-sexp
)や C-M-DEL(backward-kill-sexp
)で行います。 C-M-kはC-M-fで横断するだけの文字をキルし、 C-M-DELはC-M-bで横断するだけの文字をキルします。
S式コマンドと同様に、リストコマンドはリストを横断しますが、 リスト以外のS式(シンボルや文字列など)は飛び越します。 これらのコマンドは、C-M-n(forward-list
)と C-M-p(backward-list
)です。 これらのコマンドが便利である主な理由は、 (コメントにはリストが何も含まれないのが普通なので) コメントを無視するからです。
C-M-nとC-M-pは、可能な限り同じレベルの括弧にとどまります。 1つ(あるいはnだけ)上のレベルに移動するには、 C-M-u(backward-up-list
)を使います。 C-M-uは、対応の取れていない開き区切りのまえへ後向きに移動して、 1つレベルを上げます。 正の引数は反復回数になります。 負の引数は、移動を逆向きにしますが、やはり反復回数です。 つまり、前向きに移動して、1つ以上レベルを上げます。
リスト構造中で下のレベルに移動するには、 C-M-d(down-list
)を使います。 Lispモードでは、`('が唯一の開き区切りなので、 このコマンドは`('を探索するのとほとんど同じです。 引数は下がるべき括弧のレベルを指定します。
本当は役に立つのに、何の役に立つのだろうと思われるコマンドが C-M-t(transpose-sexps
)です。 これはポイントのまえにあるS式を、つぎにあるS式を越えて移動するコマンドです。 引数は反復回数となり、負の引数では後向きにS式を移動します (つまり正の引数を指定したC-M-tの効果を打ち消せる)。 引数が0の場合は、何もしないのではなくて、 ポイントのあとにあるS式とマークのあとにあるS式を入れ替えます。
バッファ内でつぎにあるS式の周りにリージョンを設定するには、 C-M-@(mark-sexp
)を使います。 このコマンドは、C-M-fによる移動先にマークを設定します。 C-M-@は、C-M-fと同様に引数を取ります。 とりわけ、負の引数は、直前のS式の先頭にマークを設定するのに便利です。
リストおよびS式コマンドが行う構文の解釈は、 構文テーブルに完全に支配されます。 たとえば、任意の文字を開き区切りとして宣言できて、 そうすると開き括弧のようにふるまうようになります。 See 節 AE.5 構文テーブル。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsでは、トップレベルの括弧でグループ化したものは 関数定義(defun)と呼ばれます。 この名前は、Lispファイルではトップレベルにあるリストの大半が スペシャルフォームdefun
であるという事実に由来します。 しかし、その中身が何であろうとも、また、使用プログラム言語が何であろうとも、 Emacs流には、トップレベルの括弧でグループ化されたものは すべて関数定義(defun)です。 たとえば、Cの関数定義の本体は関数定義(defun)です。
beginning-of-defun
)。end-of-defun
)。mark-defun
)。 現在の関数定義の先頭や末尾に移動するコマンドは、 C-M-a(beginning-of-defun
)と C-M-e(end-of-defun
)です。
現在の関数定義を操作したいのであれば、 C-M-h(mark-defun
)を使って、 現在の関数定義かつぎの関数定義の先頭にポイントを置き、 その末尾にマークを設定します。 たとえば、関数定義をテキストの別の位置に移動する準備をするには、 このコマンドを使うのがもっとも簡単な方法です。 Cモードでは、C-M-hはc-mark-function
を実行しますが、 mark-defun
とほとんど同じです。 違いは、引数宣言、関数名、戻り値の型名と遡って、 Cの関数全体をリージョンに含めることです。 See 節 H.5 テキストオブジェクトをマークするコマンド (2005/03/20)。
Emacsは、もっとも左の桁でみつけた任意の開き括弧を 関数定義の始まりであると仮定します。 したがって、トップレベルのリストの始まりでない限り、 Lispファイルの中では左端に開き括弧を置いてはいけません。 また、関数本体の始まりを表すのでない限り、 Cのコードの行頭に開き中括弧や開き区切りを置いてはいけません。 もっとも起こりやすい場面は、 文字列の途中で、行頭に開き区切りを入れたい場合です。 トラブルを避けるために、開き区切りのまえに エスケープ文字(CやEmacs Lispでは `\'、 その他のLisp方言のいくつかでは`/')を入れてください。 これで文字列の内容が影響を受けることはありません。
大昔のもともとのEmacsでは、関数定義を探すために、 より上位レベルの括弧がなくなるまで遡っていました。 この方法では、たとえ小さな関数であっても、 バッファの先頭まで遡って走査することがつねに必要でした。 これを高速化するために、左端内の任意の`(' (あるいは、開き区切りと宣言された任意の文字)が 関数定義の始まりであると仮定するように、Emacsを変更しました。 この発見的手法で、ほとんど正しく処理できて、時間のかかる走査を回避できます。 しかし、上述の約束事は必要です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
正しく字下げされた状態にプログラムを保つ最良の方法は、 変更したらEmacsに字下げをやり直させることです。 Emacsには、1行の字下げ、指定された行数の字下げ、あるいは、 括弧でグループ化した内部のすべての行の字下げを行うコマンドがあります。
V.5.1 プログラムの字下げ基本コマンド Indenting a single line. V.5.2 複数行の字下げ Commands to reindent many lines at once. V.5.3 Lispの字下げのカスタマイズ Specifying how each Lisp function should be indented. V.5.4 Cの字下げコマンド Extra features for indenting C and related modes. V.5.5 Cの字下げのカスタマイズ Controlling indentation style for C and related modes.
Emacsでは、ライブラリpp
にLispのプリティプリンタ(31) もあります。 このプログラムは、美しく見えるように字下げを施してLispオブジェクトを 清書するプログラムです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
newline-and-indent
)。 基本的な字下げコマンドはTABです。 直前の数行から判断した正しい字下げを現在行に施します。 TABが実行する関数は、メジャーモードに依存します。 たとえば、Lispモードではlisp-indent-line
、 Cモードではc-indent-line
が実行されます。 これらの関数はそれぞれの言語の構文を解釈しますが、 どれも同じことを行うためのものです。 プログラム言語向けメジャーモードにおいては、 TABは、現在行のどこにポイントがあっても、 現在行の先頭に白文字を挿入したり削除したりします。 ポイントが行頭の白文字の中にあったときは、 TABは最後の白文字のうしろにポイントを置きます。 そうでなければ、TABを打ったときの文字のところに留まります。
ポイント位置にタブを挿入するには、C-q TABを使います。
新たにソースコード行を入力するときには、 C-j(newline-and-indent
)を使ってください。 これは、RETに続けてTABを打鍵することと等価です。 C-jは、空行を作ってから、その行で適切な字下げを行います。
括弧でグループにまとめたところでは、 TABは、2行目以降の行をそれぞれ直前の行の真下にくるように字下げします。 したがって、ある行を非標準的な字下げにすると、 以降の行もその字下げに従うことになります。 TABによる標準的な字下げが、 特定の行では美しくないので無視したい場合には、 字下げのこのようなふるまいが便利です。
(字下げ処理を含めて)Emacsは、左端にある、開き丸括弧、開き中括弧、 および、その他の開き区切りを関数の始まりと仮定することを 覚えておきましょう。 たとえ文字列の中であっても、 関数の始まりでない開き区切りをけっして0桁目に置いてはいけません。 この制約は字下げコマンドを高速にするためにきわめて重要です。 無条件で受け入れてください。 これに関してより詳しくは、See 節 V.4 関数定義(defun)。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
変更した複数行や、リスト構造中の異なるレベル箇所へ移した複数の行を 字下げし直すには、いくつかのコマンドを利用できます。
indent-sexp
)。indent-region
)。 1つのリストの中身を字下げし直すには、 リストの始まり位置にポイントを置いて C-M-q(Lispモードではindent-sexp
、 Cモードではc-indent-exp
、 他のモードでは適切なコマンドにバインドされている)と打ちます。 S式が始まる行の字下げは変化しません。 つまり、リスト内の相対的な字下げが変化するだけで、 リストの位置は変わりません。 リストの開始位置も直すには、C-M-qのまえにTABを打ってください。
リスト内の相対的な字下げは正しいけれども、 リストの開始行の字下げが正しくない場合には、 その行に移動してC-u TABと打ちます。 TABに数引数を指定すると、通常どおり現在行を字下げしてから、 その行から始まるリスト内のすべての行にも同じ量の字下げを加えます。 いいかえれば、グループ全体をひとまとめに字下げし直します。 ただし、このコマンドは賢くて、文字列の中の行は移動しませんし、 Cモードではプリプロセッサ行を移動しません。
字下げし直す範囲を指定するには、リージョンを使うこともできます。 コマンドC-M-\(indent-region
)は、 ポイントとマークのあいだに 行の先頭文字が含まれるすべての行についてTABを実行します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Lisp式に対する字下げの仕方を、 その式から呼ばれる関数と関係付けることができます。 各Lisp関数に対して、あらかじめ定義された字下げパターンの中から選んだり、 Lispプログラムで任意のものを定義したりできます。
字下げの標準パターンは、つぎのとおりです。 式の開始行に関数呼び出しの引数がある場合は、 最初の引数の直下に2行目がくるように字下げします。 それ以外の場合は、関数名の直下に2行目がくるように字下げします。 続く各行は、入れ子の深さが同じである行の字下げと同じになります。
変数lisp-indent-offset
がnil
以外ならば、 式の2行目に対する通常の字下げパターンを無効にして、 式の開始桁からつねにlisp-indent-offset
だけ字下げします。
標準パターンが使用されない関数もいくつかあります。 名前がdef
で始まる関数に対しては、 式を開始する開き括弧の桁位置にlisp-body-indent
を加えた桁位置へ 2行目がくるように字下げします。
関数名の属性lisp-indent-function
を変更すれば、 各関数ごとに標準パターン以外の字下げを施せます。 この属性が取りえる値にはつぎの4つがあります。
nil
defun
def
で始まる関数に用いる字下げパターンを使用する。lisp-body-indent
を加えた桁位置へ字下げする。 引数が区別された引数で最初か2番目ならば、 lisp-body-indent
の2倍を加えた桁位置へ字下げする。 引数が区別された引数であっても3番目以降ならば、標準パターンを適用する。parse-partial-sexp
(字下げと入れ子の計算を行うLispの基本的な関数)の戻り値。[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ここでは、Cモードとその関連モードにおける字下げコマンドを紹介します。
C-c C-q
c-indent-defun
)。
C-M-q
c-indent-exp
)。 前置引数を指定すると、 不正な構文に対する検査をせずに、警告メッセージも発しない。
TAB
c-indent-command
)。
c-tab-always-indent
がt
ならば、 現在行を字下げし直すだけで、他には何もしない。 これがデフォルト。
この変数がnil
ならば、 ポイントが左端か字下げの余白部分にある場合に限り、字下げし直す。 さもなければ、タブ (あるいは、indent-tabs-mode
がnil
ならば、 等価な個数の空白)を挿入する。
上記の(nil
やt
)以外の値であれば、通常どおり字下げし直す。 ただし、コメント、文字列、プリプロセッサ指令の内側では、タブを挿入する。
C-u TAB
カレントバッファ全体を字下げし直すには、 C-x h C-M-\と打ちます。 これは、まず、バッファ全体をリージョンとしてから、 そのリージョンを字下げし直します。
カレントブロックを字下げし直すには、C-M-u C-M-qと打ちます。 これは、まず、ブロックの先頭に移動してから、 ブロック全体を字下げし直します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Cモードとその関連モードでは、字下げのカスタマイズには、 単純ですが柔軟性のある機構を用いています。 この機構は2段階で動作します。 まず、行をその内容と文脈から構文的に分類します。 つぎに、構文構成要素の各種類に、 カスタマイズ可能な字下げのオフセットを対応させます。
V.5.5.1 第1段階−−構文解析 V.5.5.2 第2段階−−字下げ計算 V.5.5.3 字下げスタイルの変更 V.5.5.4 構文シンボル V.5.5.5 Cの字下げのための変数 V.5.5.6 Cの字下げスタイル
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
第1段階では、Cの字下げ機構は、字下げしようとしているまえの行を調べて、 その行を構成する構文上の構成要素を決定します。 つまり、構文シンボルとバッファ内の相対位置を要素とする 構文構成要素のリストを組み立てます。 構文シンボルには、statement
(文)や substatement
(部分文)のように 文法要素を記述するものと、 class-open
(クラス開始)や knr-argdecl
(K&R版引数宣言)のように文法要素のあいだの位置を 記述するものがあります。
概念的には、Cのコード行は、バッファ中でそれよりまえに あるいずれかの行に対して必ず相対的に字下げされます。 これは構文構成要素リストの中にあるバッファ内位置として表現されます。
以下に例を示します。 つぎのコードが、C++モードのバッファに入っているとしましょう (実際にバッファに行番号が表示されるわけではない)。
1: void swap (int& a, int& b) 2: { 3: int tmp = a; 4: a = b; 5: b = tmp; 6: } |
4行目で(c-show-syntactic-information
を実行する) C-c C-sを打つと、 その行に対する字下げ機構の結果が表示されます。
((statement . 32)) |
これは、その行が文であり、 バッファ内位置32に対して相対的に字下げされていることを示します。 バッファ内位置32は、3行目のint
の`i'にあたります。 カーソルを3行目に動かしてC-c C-sと打つと、 今度はつぎのように表示されます。
((defun-block-intro . 28)) |
この結果は、int
行がブロックの最初の文であり、 バッファ内位置28に対して相対的に字下げされていることを示しています。 バッファ内位置28は、関数ヘッダの直後の中括弧にあたります。
別の例を見てみましょう。
1: int add (int val, int incr, int doit) 2: { 3: if (doit) 4: { 5: return (val + incr); 6: } 7: return (val); 8: } |
4行目でC-c C-sと打つと、つぎのように表示されます。
((substatement-open . 43)) |
これは、中括弧が部分文のブロックを始めていることを示しています。 ところで、部分文とは、if
、else
、while
、 do
、switch
、for
、try
、catch
、 finally
、synchronized
のあとの行を表します。
Cの字下げコマンドにおいては、 字下げのために行を構文解析し終えると、 変数c-syntactic-context
には解析結果を表すリストが入ります。 このリストの各要素は構文構成要素であり、 構文シンボルと(省かれるかもしれない)対応するバッファ内位置の コンスセルです。 構文構成要素リストには、複数の要素が含まれることもあります。 また、典型的には、バッファ内位置を持つ要素は1つだけです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Cの字下げ機構は、構文解析で得られた構文構成要素リスト c-syntactic-context
を使って、現在行の字下げ幅を計算します。 このリストの各要素は、構文シンボルを含むコンスセルですが、 バッファ内位置を含んでいる場合もあります。
リストの各要素は、最終的な総字下げ量に2つの方法で寄与します。 まず、各構文シンボルに字下げオフセットを対応付ける連想リスト c-offsets-alist
から要素を探すために構文シンボルが使われます。 各構文構成シンボルのオフセットを総字下げ量に加えます。 つぎに、リストの要素にバッファ内位置が含まれていれば、 その箇所の桁位置を字下げ量に加えます。 これらのオフセットと桁数をすべて加えることで、総字下げ量が求まります。
以下の例でCの字下げ機構の動作を説明しましょう。
1: void swap (int& a, int& b) 2: { 3: int tmp = a; 4: a = b; 5: b = tmp; 6: } |
3行目にポイントがあって、そこでTABと打って字下げし直すとしましょう。 上(see 節 V.5.5.1 第1段階−−構文解析)でも説明しましたが、 その行に対する構文構成要素リストはつぎのようになります。
((defun-block-intro . 28)) |
ここでは、まず、連想リストc-offsets-alist
から defun-block-intro
を探すことから始めます。 その結果が整数値2であったとしましょう。 この値を計算中の合計(0で初期化されている)に加えて、 総字下げ量は空白2文字と更新されます。
つぎの段階は、バッファ内位置28の桁位置を求めることです。 バッファ内位置28の中括弧は0桁目にあるので、 0を計算中の合計に加えます。 3行目には構文要素が1つしかないので、総字下げ量は空白2文字となります。
1: int add (int val, int incr, int doit) 2: { 3: if (doit) 4: { 5: return(val + incr); 6: } 7: return(val); 8: } |
4行目でTABと打つと、同じ過程を繰り返しますが、 異なる値を使って計算されます。 この行に対する構文構成要素リストはつぎのとおりです。
((substatement-open . 43)) |
まずは、シンボルsubstatement-open
を連想リスト c-offsets-alist
から探します。 このシンボルに対するオフセットが2であったとしましょう。 この時点で計算中の合計は2(0 + 2 = 2)です。 つぎに、バッファ内位置43(3行目のif
の`i'の位置)の 桁位置2を加えます。 結果として、空白4文字という総字下げ量が求まります。
行を解析した結果、c-offsets-alist
に現れない構文シンボルが みつかった場合、そのシンボルは無視します。 しかし、変数c-strict-syntax-p
がnil
以外の値であれば、 エラーを報告します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
C流のモードの字下げをカスタマイズする方法は2つあります。 1つは、あらかじめ定義されているスタイルから選択する方法です。 それぞれのスタイルでは、各構文シンボルに対するオフセットが定められています。 もう1つはより柔軟な方法で、各構文シンボルの扱い方をカスタマイズできます。 定義されている構文シンボルの一覧については、See 節 V.5.5.4 構文シンボル。
c-set-offset
)。 2番目の引数offsetで、字下げのオフセットを指定する。変数c-offsets-alist
は、各構文シンボルに与える字下げ量を制御します。 この変数の値は連想リストであり、 各要素は(syntactic-symbol . offset)
の形をしています。 さまざまな構文シンボルに対するオフセットを変えることで、 字下げを細かくカスタマイズできます。 連想リストを変更するには、c-set-offset
を使います(下記参照)。
c-offsets-alist
内の各オフセットには、 整数、関数名や変数名、あるいは、 変数c-basic-offset
の値の正負の倍数を表すシンボルである +
、-
、++
、--
、*
、 /
のいずれかを設定できます。 したがって、基本の字下げ幅を空白2文字から3文字に変更したければ、 c-basic-offset
に3を設定します。
オフセットに関数を用いると、 字下げのカスタマイズに究極の柔軟性を持たせられます。 この関数は、構文シンボルとバッファ内位置があればそれをcons
したものを 引数として呼ばれます。 戻り値としては、整数値のオフセットを返す必要があります。 オフセットの値がリストの場合、 各要素は、nil
以外の値がみつかるまで上の規則にしたがって処理されます。 その後、その値は、通常のように、字下げの総量に加えられます。 これは、主に、複数の関数の結果を組み合わせるために使われます。
対話的に設定するにしてもファイル`~/.emacs'で設定するにしても、 オフセットを設定するもっとも簡単な方法は、 コマンドC-c C-o(c-set-offset
)を使うことです。 最初の引数は構文シンボル、2番目の引数は希望のオフセットです。 有効な構文シンボル名とその意味の一覧は、See 節 V.5.5.4 構文シンボル。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Cモードや関連するモードの字下げに対して有効な構文シンボルを、 構文上の意味とともに、以下に示します。 これらのほとんどのシンボルには、 c-offsets-alist
でオフセットが与えられています。
string
c
defun-open
defun-close
defun-block-intro
class-open
class-close
inline-open
inline-close
extern-lang-open
extern-lang-close
func-decl-cont
throws
宣言などを置ける。
knr-argdecl-intro
knr-argdecl
topmost-intro
topmost-intro-cont
member-init-intro
member-init-cont
inher-intro
inher-cont
block-open
block-close
brace-list-open
enum
のリストや静的配列の初期化リストを開始する中括弧。
brace-list-close
enum
のリストや静的配列の初期化リストを終了する中括弧。
brace-list-intro
enum
のリストや静的配列の初期化リストの最初の行。
brace-list-entry
enum
のリストや静的配列の初期化リストの2行目以降。
brace-entry-open
enum
のリストや静的配列の初期化リストの2行目以降。
statement
statement-cont
statement-block-intro
statement-case-intro
case
ブロックの最初の行。
statement-case-open
case
ブロックの最初の行。
inexpr-statement
inexpr-class
substatement
if
、while
、for
、 do
、else
の直後の最初の行
substatement-open
case-label
case
またはdefault
ラベルを表す。
access-label
private
、protected
、public
を表す。
label
do-while-closure
do
-while
文のwhile
。
else-clause
if
-else
文のelse
。
catch-clause
try
...catch
構成の catch
行やfinally
行。
comment-intro
arglist-intro
arglist-cont
arglist-cont-nonempty
arglist-close
stream-op
inclass
inextern-lang
inexpr-statement
({ ... })
を使うCに対するGCC拡張に用いる。 文ブロックを引数としてとるPikeの特殊関数にも用いる。
inexpr-class
cpp-macro
friend
friend
宣言。
objc-method-intro
objc-method-args-cont
objc-method-call-cont
inlambda
inclass
と同様だが、ラムダ(つまり、無名)関数の内側に用いる。 Pikeのみで用いる。
lambda-intro-cont
lambda
と関数本体のあいだの、 ラムダ関数のヘッダーの継続行。 Pikeのみで用いる。[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本節では、Cモードとその関連モードの字下げ動作を制御する、 モードに固有な変数について説明します。
c-offsets-alist
c-set-offset
を使うこと。 詳細については、see 節 V.5.5.3 字下げスタイルの変更。
c-style-alist
c-basic-offset
c-offsets-alist
の中で、 シンボル+
や-
が用いるオフセットの基本量。
c-special-indent-hook
変数c-style-alist
は、 あらかじめ定義された字下げスタイルを保持します。 各要素は(name variable-setting...)
の形をしていて、 nameはスタイル名です。 また、各variable-settingは、 (variable . value)
の形をしています。 variableには、Cモードが使用するカスタマイズ用変数の1つを指定します。 valueは、選択されたスタイルが使われるときのvariableの値です。
variableがc-offsets-alist
である場合は、特殊なケースです。 c-offsets-alist
の値をvalueの値で置き換えるのではなく、 c-offsets-alist
の値の先頭にvalueを追加します。 したがって、valueにすべての構文シンボルを設定する必要はありません。 デフォルトと異なる構文シンボルだけを単に設定すればよいのです。
コメントだけを含んだ行の字下げも、 変数c-comment-only-line-offset
(see 節 V.12.5 Cモードのコメント)に影響されます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Cスタイルとは、カスタマイズされた字下げスタイルの集合です。 Emacsには、Cモードや関連するモードのためにあらかじめ定義された、 gnu
、k&r
、bsd
、stroustrup
、 linux
、python
、java
、whitesmith
、 ellemtel
、cc-mode
といった字下げスタイルがあります。 デフォルトのスタイルはgnu
です。
望みのスタイルを選択するには、コマンドM-x c-set-styleを使います。 引数としてスタイル名を指定します (Cスタイル名では大文字小文字は区別しない)。 選択したスタイルは新たに訪問したバッファにだけ影響し、 すでに編集中のバッファには影響しません。 さまざまなメジャーモードのスタイルを指定するために 変数c-default-style
を設定することもできます。 その値は連想リストである必要があり、 その各要素は、1つのメジャーモードと そのモードで使う字下げスタイルを指定します。 たとえば、
(setq c-default-style '((java-mode . "java") (other . "gnu"))) |
は、Javaモードには対しては選択を明示し、 他のC流モードには`gnu'をデフォルトとします。
Cの字下げスタイルを新たに定義するには、関数c-add-style
を呼びます。
(c-add-style name values use-now) |
ここで、nameは新しいスタイルの名前(文字列)、 valuesは要素が(variable . value)
の形をした 連想リストです。 variableには、V.5.5.5 Cの字下げのための変数に 書かれているものを指定してください。
use-nowがnil
以外ならば、 新しいスタイルの定義後すぐにそれに切り替えます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsの括弧の対応付け機能は、テキスト中でどのように括弧が 対応しているか自動的に表示するよう設計されています。 閉じ区切りである自己挿入文字を打つと、 それに対応する開き区切りが画面上にあれば、 その箇所にほんのしばらくカーソルが移動します。 画面上になければ、エコー領域にその箇所の近くにある文字列を表示します。 いずれにしても、1つのまとまりが閉じたことが判ります。
Lispでは、括弧だけに対して自動的な対応付けを行います。 Cでは、中括弧や角括弧も対象となります。 Emacsは、メジャーモードが設定する構文テーブルに基づいて、 どの文字が対応関係にある区切りであるか判定します。 See 節 AE.5 構文テーブル。
`[x)'のように、開き区切りと閉じ区切りが対応しない場合、 エコー領域に警告メッセージを表示します。 正しい対応関係は構文テーブルで指定します。
括弧の対応表示を制御する変数は3つあります。 blink-maching-paren
は、対応表示機能をオンまたはオフにします。 nil
を設定すると対応表示機能はオフになりますが、 デフォルトはt
であり、対応表示を行います。 blink-matching-delay
は、対応表示のために待つ秒数を指定します。 デフォルトは1秒ですが、システムによっては何分の1秒のほうが便利かもしれません。 blink-matching-paren-distance
は、 対応している開き区切りをみつけるために、 何文字分まで戻って探索するか指定します。 その範囲内で対応するものがみつからなければ、走査をやめて何も表示しません。 これは、存在しもしない対応する区切りを探すことに 時間を浪費するのを防ぐためです。 デフォルトは12,000です。
Xウィンドウシステムを使用している場合、 対応括弧表示(show-paren)モードにすれば、 より強力な括弧の対応表示を利用できます。 このモードは、通常の対応表示をオフにするかわりに、 対応する括弧同士を示すために強調表示を行います。 ポイントが閉じ括弧の直後にあるときには、 閉じ括弧とそれに対応する開き括弧の両方を強調表示します。 ポイントが開き括弧の直前にあるときには、対応する閉じ括弧を強調表示します。 (ポイントの直後に開き括弧があるときには、 カーソルが開き括弧に重ねて表示されるので、 開き括弧を強調表示する必要はない。) このモードをオン/オフするには、 コマンドM-x show-paren-modeを使います。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
コメントはプログラミングの重要な部分なので、 Emacsにはコメントの編集や挿入を行うための特別なコマンドがあります。
V.7.1 コメント用コマンド V.7.2 複数行にわたるコメント V.7.3 コメントを制御するオプション
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
コメント用コマンドはコメントの挿入、削除、および位置揃えを行います。
indent-for-comment
)。set-comment-column
)。kill-comment
)。indent-new-comment-line
)。コメントを挿入するコマンドはM-;(indent-for-comment
)です。 行にコメントがなければ、新規にコメントを作成して、 コメント桁位置と呼ばれる特定の桁に置きます。 コメントを作成する際には、Emacsが正しいと信じるコメント開始文字列 (comment-start
の値。下記参照)を挿入します。 ポイントはその文字列の直後に置かれます。 コードのテキストがコメント桁位置を越えているときには、 適当な境界に字下げします(通常は少なくとも空白1文字)。 メジャーモードでコメント終了文字列が指定されていれば、 構文を正しく保つために、ポイントの直後にその文字列を挿入します。
M-;は、既存のコメントを位置揃えするためにも使えます。 行にコメント開始文字列がすでに含まれていれば、 その文字列の直後にポイントを移動してから、適切な位置に字下げします。 例外として、0桁目から始まるコメントは動かしません。
特定の文脈における、ある種のコメントの字下げには特殊な規則を持つ メジャーモードもあります。 たとえば、Lispのコードでは、セミコロン2つで始まるコメントは、 コメント桁位置に揃えるのでなく、コードであるかのように字下げされます。 また、セミコロン3つで始まるコメントは左端に置くと仮定されます。 Emacsはこれらの慣習を理解していて、 セミコロン2つのコメントはTABで字下げし、 セミコロン3つのコメントは字下げをまったく変更しません。
;; This function is just an example ;;; Here either two or three semicolons are appropriate. (defun foo (x) ;;; And now, the first part of the function: ;; The following line adds one. (1+ x)) ; This line adds one. |
Cのコードでは、コメントのまえに白文字しかない場合には、 そのコメントをコードのように字下げします。
既存のコメントの位置が適切に揃えられている場合でも、 コメント開始直後の位置にすぐに移動するにはM-;が便利です。
C-u - C-x ;(kill-comment
)は、 現在行にコメントがあれば、それをキルします。 コメント開始文字列のまえにある字下げもキルします。 コメントと思われるものが何もなければ、何もしません。 他の行にコメントを再挿入するには、 その行の末尾に移動してからC-yと打って、 さらに、位置を再調整するためにM-;と打ちます。 C-u - C-x ;はひとまとまりのキーではなく、 負の引数を指定したC-x ;(set-comment-column
)で あることに注意しましょう。 このコマンドは、負の引数を受け取ると、 kill-comment
を呼ぶようにプログラムされています。 kill-comment
は、望むならばキーに直接バインドできる通常のコマンドです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
コメントを入力していて別の行に継続したければ、 コマンド C-M-j(indent-new-comment-line
)を利用できます。 このコマンドは、入力中のコメントを終了して、 そのつぎに空行を作り、 直前のコメントの直下にくるように字下げして新たなコメントを始めます。 自動詰め込み(auto-fill)モードがオンならば、 コメントを入力中に詰め込み桁を越えると、 同様にコメントはつぎの行に継続されます。 C-M-jを打ったときにポイントが行末になければ、 ポイント位置から行末までのテキストは新たなコメントの一部になります。
既存の行をコメントにするには、 コマンドM-x comment-regionを使います。 このコマンドは、リージョン内で始まる各行にコメント区切り文字列を加えて コメントにします。 負の引数を指定すると逆の操作、 つまり、コメント区切り文字列を削除します。
正の引数を指定すると、comment-region
は、 追加するコメント開始文字列の最後の文字を重複させます。 つまり、引数は、その文字を何回重複させるかを示します。 たとえば、LispモードでC-u 2 M-x commment-regionとすると、 各行に`;;'を付加します。 コメント区切り文字を重複させるのは、コメントに注意を引き付けるためです。 また、コメントの字下げにも影響します。 Lispでは、適切な字下げになるように、 関数定義(defun)のあいだでは引数として3を、 関数定義の内側では引数として2を指定すべきです。
変数comment-padding
は、 comment-region
がコメント区切りと各行のもとのテキストとのあいだに 挿入する空白の個数を指定します。 デフォルトは1です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
コメント桁位置は、変数comment-column
に入っています。 この変数には明示的に値を設定できます。 あるいは、コマンド C-x ;(set-comment-column
)を使って、 ポイント位置の桁をコメント桁位置として設定できます。 C-u C-x ;は、バッファ内で現在行よりまえにある最後のコメントの桁位置を コメント桁位置としてから、 M-;を行って現在行のコメントをまえのコメントの直下にくるように 位置を揃えます。 C-u - C-x ;は、前述のように 関数kill-comment
を実行することに注意してください。
変数comment-column
は、バッファごとの変数です。 つまり、通常の方法で設定すると、カレントバッファだけに影響しますが、 setq-default
でデフォルト値を変更できます。 See 節 AE.2.4 ローカル変数。 多くのメジャーモードでは、この変数をカレントバッファ用に初期化します。
コメント用コマンドは、変数comment-start-skip
の正規表現に基づいて コメントを認識します。 この正規表現が空文字列には一致しないようにしてください。 厳密にはコメント開始文字列よりも長く一致するかもしれません。 たとえば、Cモードではこの変数の値は"/\\*+ *"
ですが、 これは `/*'のうしろの余分なアスタリスクと空白に一致します。 (Lispの構文では、文字列中に`\'を含めるために`\\'とする必要がある。 この`\'は、最初のアスタリスクの正規表現における特別な 意味を抑制するために必要。 see 節 K.5 正規表現の構文 (2004/03/26)。)
コメント用コマンドで新たなコメントを作ると、 コメントを始めるためにcomment-start
の値を挿入します。 また、ポイントの直後にはcomment-end
の値が挿入されて、 これから入力するテキストのあとに続くことになります。 Cモードでは、comment-start
の値は"/* "
、 comment-end
の値は" */"
です。
変数comment-multi-line
は、 C-M-j(indent-new-comment-line
)が コメントの内側で使われたときの動作を制御します。 comment-multi-line
がnil
(通常の設定)ならば、 現在行のコメントを終了し、新たなコメントをつぎの行から始めます。 comment-multi-line
がnil
以外ならば、 現在行と同じコメントが継続されます。 つまり、現在行のコメントを終えず、新たな行にも開始文字列を挿入しません。 複数行にわたるコメントを許す言語では、 この変数に設定する値は好みの問題です。
変数comment-indent-function
には、 新たに挿入したコメントの字下げや 既存のコメントに桁を揃えるための字下げを計算する関数を 設定する必要があります。 この変数には、メジャーモードごとに異なった関数が設定されます。 この関数は引数なしで呼ばれますが、 コメントがあるときにはその開始位置にポイントを置いて、 新規コメントの挿入時には行末にポイントを置いて呼ばれます。 戻り値は、コメントを始めるべき桁位置です。 たとえば、Lispモードでは、この字下げ用フック関数は、 既存のコメントのセミコロンの個数と まえの行のコードに基づいて計算を行います。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
insert-parentheses
)。move-past-close-and-reindent
)。 コマンドM-((insert-parenthesis
)と M-)(move-past-close-and-reindent
)は、 括弧の対応をつねに保ったまま編集するために設計されました。 M-(は一対の括弧を挿入します。 引数がなければ`()'を挿入しますが、 引数を指定すると、つぎのその個数分のS式を括弧で囲みます。 ポイントは開き括弧の直後に置かれます。 コマンドM-)は、閉じ括弧のまえにある字下げを削除しながら 閉じ括弧のうしろにポイントを移動し、 そのあと、C-jで字下げします。
たとえば、( F O O )と打つかわりにM-( F O Oと打てば、 カーソルが閉じ括弧のまえにくることを除けば同じ効果を得られます。
M-(は、直前の文字の構文クラスによっては、 開き括弧のまえに空白を1個挿入することがあります。 これを禁止したければ、 parens-require-spaces
にnil
を設定してください。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常、補完はミニバッファで行われます。 しかし、ある種の補完は任意のバッファで利用できます。 それはシンボル名に対する補完です。
M-TABは、ポイント直前の部分的なシンボルを、 意味のあるシンボル名の集合から補完するコマンドを実行します。 部分的な名前から補完された追加文字はポイント位置に挿入されます。
バッファ内の部分的な名前に対して、 複数個の補完候補があり、しかも、追加できる共通部分がない場合には、 補完候補一覧を別のウィンドウに表示します。
ほとんどのプログラム言語向けメジャーモードでは、 M-TABはコマンドcomplete-symbol
を実行します。 この関数には、2種類の補完機能があります。 通常、このコマンドはタグテーブル(see 節 X.2 タグテーブル)に基づいて補完を行います。 数引数(値は無関係)を指定すると、当該言語のinfoファイルの索引に 並べられた名前を対象として補完を行います。 すなわち、プログラム中で定義されたシンボル名を補完するには 引数なしでM-TABを使い、 標準ライブラリ関数の名前を補完するにはC-u M-TABを使います。 もちろん、infoに基づいた補完は、使用言語の標準ライブラリ関数に対する infoファイルがあり、かつ、それがインストールされている場合にだけ動作します。
Emacs Lispモードでは、補完対象の名前空間は、 関数定義、値や属性を持つEmacs中の特殊なシンボルから成ります。 しかし、部分的なシンボルの直前に開き括弧があれば、 関数定義を持つシンボルだけを補完対象とします。 これを実現するコマンドはlisp-complete-symbol
です。
テキスト(text)モードとその関連モードでは、 M-TABはスペルチェッカの辞書に基づいた補完を行います。 See 節 L.4 綴りの検査と訂正。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
関数名表示(which-function)モードは、 バッファ内を動き廻るに従って現在の関数名をモード行に表示する マイナモードです。
関数名表示(which-function)モードをオン(あるいはオフ)にするには、 コマンドM-x which-function-modeを使います。 このコマンドはグローバルです。 つまり、既存のバッファでもこれから作るバッファでも、 すべてのバッファに通用します。 しかし、which-func-modes
の値で指定された 特定のメジャーモードでのみ効果があります。 (which-func-modes
のデフォルト値はt
であり、 関数名表示(which-function)モードの支援方法を知っている すべてのメジャーモードに適用されることを意味する。 具体的には、imenuを使えるメジャーモード。)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsで実行するLispコードを編集するときには、 関数や変数の説明文字列を表示するコマンド、 C-h f(describe-function
)や C-h v(describe-variable
)を利用できます。 これらのコマンドは、説明文字列を表示したい関数や変数の名前を ミニバッファから読み取り、ウィンドウに説明文字列を表示します。
たいへん便利なことに、これらのコマンドはポイント近傍のコードから、 デフォルトの引数を選択します。 C-h fは、ポイントを含むもっとも内側のリストで呼ばれる関数をデフォルト とします。 C-h vは、ポイントの周辺にあるか隣接するシンボル名を デフォルトとします。
Emacs Lispコードに対しては、eldocモードも使えます。 このマイナモードは、ポイント位置で呼び出されている関数の引数リストを、 たえずエコー領域に表示します。 (いいかえれば、ポイントを含む関数呼び出しを探し、 その関数の引数リストを表示する。) eldocマイナモードは、Emacs Lispモードと Lisp対話(lisp-interaction)モードだけに適用できます。 この機能をオン/オフするには、コマンドM-x eldoc-modeを使います。
C、Lisp、その他言語のシンボルのinfo文書を見るには C-h C-i(info-lookup-symbol
)を使います。 ミニバッファでシンボルを指定します。 デフォルトは、バッファ中のポイント位置にあるシンボルです。 シンボルに対する説明文書を探す場所、つまり、 どのinfoファイルのどの索引を探せばよいかは、 メジャーモードが決定します。 また、ファイル名に対する説明文書を探すには M-x info-lookup-fileを使います。
M-x manual-entryコマンドを使って、 オペレーティングシステムのコマンド、ライブラリ関数、システムコールの 『マニュアルページ』を読むことができます。 このコマンドは、マニュアルページを清書するために man
プログラムを実行します。 システムが許せば非同期に実行するので、 マニュアルページが清書されるまで、編集を継続できます (MS-DOSやMS-Windows 3.xでは、非同期的なサブプロセスを実行できない。 このため、これらのシステムではman
の終了をEmacsが待つあいだは 編集できない)。 結果は、`*Man topic*'という名前のバッファに入ります。 これらのバッファではマン(man)モードと呼ばれる特別な メジャーモードが使われ、 スクロールや他のマニュアルページの調査を容易に行えます。 より詳しくは、マニュアルページ用のバッファで、 C-h mと打ってください。
長いマニュアルページでは、適切なフェイスを設定するにはとても時間がかかります。 さまざまなフォントや表示色を表示できる環境であれば、 デフォルトでマニュアルページにフェイスを用いるようになっています。 変数Man-fontify-manpage-flag
にnil
を設定すれば、 マニュアルページにおけるフェイスの使用をオフにできます。
他の方法でマニュアルページのテキストをEmacsバッファに挿入した場合、 M-x manual-entryと同じ変換を施すには、 そこでM-x Man-fontify-manpageコマンドを実行します。
GNUプロジェクトでは最終的に、ほとんどのマニュアルページを infoで閲覧可能なよりよく構成されたマニュアルに置き換えることを望んでいます。 See 節 G.8 その他のヘルプコマンド。 この作業は、ほんの一部が完了しただけなので、 まだマニュアルページを読めることは有益です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本節では、C、C++、Objective-C、Java、CORBA IDL、 Pike用の各モードで利用可能な特別な機能について述べます。 『Cモードと関連するモード』と書いたときには、 これらのモードを意味します。
V.12.1 Cモードの移動コマンド V.12.2 エレクトリックC文字 V.12.3 Cの欲張りな削除機能 V.12.4 Cモードのその他のコマンド V.12.5 Cモードのコメント
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
本節では、Cモードとその関連モードでポイントを移動する コマンドについて述べます。
C-c C-u
#elif
は、#if
が続く#else
のように扱われる。 前向きに進む場合、#elif
は無視される (32)。
C-c C-p
C-c C-n
M-a
c-beginning-of-statement
)。 すでに文の先頭にポイントがある場合、直前の文の先頭に移動する。 数引数nを指定すると、n-1だけまえの文に移動する。
ポイントが、文字列やコメントの内側、あるいは、 コメントのうしろ(コメントのあいだに白文字がある場合のみ)にある場合、 Cの文ではなく自然言語の文単位で移動する。
プログラムから呼ばれるときには、この関数は、3つの引数、つまり、 反復回数、(これよりも後向きには戻らない)移動限界、 ポイントがコメントの内側にある場合に自然言語の文単位の移動をするかどうか、 を取るが、これらは省略できる。
M-e
c-end-of-statement
)。
M-x c-backward-into-nomenclature
GNUプロジェクトでは、 CやC++の識別子は、大文字小文字で区別するのではなく、 単語を下線で区切ることを推奨する。
M-x c-forward-into-nomenclature
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Cモードとその関連モードでは、ある種の印字文字は『エレクトリック』です。 つまり、その文字自身を挿入することに加えて、 現在行を字下げし直したり、改行も挿入することさえあります。 この機能は、変数c-auto-newline
で制御されます。 『エレクトリック』文字は、{、}、:、#、 ;、,、<、>、/、*、(、)です。
自動改行(auto-newline)機能がオン (モード行のモード名のあとに`/a'と表示される)の場合に限り、 エレクトリック文字は改行を挿入します。 この機能は、変数c-auto-newline
で制御されます。 コマンドC-c C-aでこの機能をオン/オフできます。
c-toggle-auto-state
)。 数引数を指定した場合、正ならば自動改行機能をオンにし、 負ならばオフにする。コロン:はエレクトリックです。 なぜなら、単独のコロンの入力の解釈としてはそれが適切だからです。 しかし、C++で2つの連続するコロンを挿入する場合、 コロンのエレクトリックな動作は不便です。 C-c :と打てば、字下げも改行の挿入も行わずにコロンを2つ挿入できます。
c-scope-operator
)。エレクトリックキー#は、 プリプロセッサ指令の始まりと思われる位置では、行を字下げし直します。 変数c-electric-pound-behavior
の値が(alignleft)
のときには、 このようになります。 この機能をオフにするには、 c-electric-pound-behavior
にnil
を設定します。
変数c-hanging-braces-alist
は、 挿入された中括弧の前/後への改行の挿入を制御します。 これは、(syntactic-symbol . nl-list)
の形の要素 から成る連想リストです。 c-offsets-alist
に現れるほとんどの構文シンボルは、 ここでも意味を持ちます。
リストnl-listは、シンボルbefore
かafter
のいずれか、 あるいはその両方、もしくはnil
を含みます。 中括弧が挿入されるときには、その中括弧が定義する構文上の文脈を c-hanging-braces-alist
から探します。 みつかれば、nl-listを使って 中括弧の前/後/前後のどこに改行を挿入するか決定します。 みつからなければ、デフォルトとして中括弧の前後に改行を挿入します。
変数c-hanging-colons-alist
は、 挿入されたコロンの前/後への改行の挿入を制御します。 これは、(syntactic-symbol . nl-list)
の形の要素 から成る連想リストです。 リストnl-listは、シンボルbefore
かafter
のいずれか、 あるいはその両方、もしくはnil
を含みます。
コロンが挿入されるときには、そのコロンが定義する構文シンボルを この連想リストから探します。 みつかれば、nl-listを使って コロンの前/後のどこに改行を挿入するか決定します。 みつからなければ、改行を挿入しません。
自動改行機能がオンのときには、エレクトリック文字は自動的に改行を削除します。 この機能により、 改行が不要だと思われるもっとも一般的な場面で改行を削除するので、 自動改行機能をユーザーにより受け入れやすくしています。 Emacsは改行を削除することが望ましいいくつかの場面を認識できますが、 変数c-cleanup-list
を設定すれば、どの場面で行うか指定できます。 この変数の値はシンボルのリストです。 各要素は、改行を削除してよい場面を1つ指定します。 以下に指定できるシンボルとその意味を示します。
brace-catch-brace
catch
やcondition以外に中括弧のあいだになにもないときに `{'を打つと再配置する。
brace-else-brace
else
に続けて`{'を打ったときに再配置するが、 中括弧とelse
のあいだに空白以外の文字がない場合に限る。
brace-elseif-brace
if
の条件式を除いて、 `}'と`{'のあいだに空白以外の文字がない場合に限る。
empty-defun-braces
defun-close-semi
struct
や同様の型宣言のあとのセミコロンを閉じ中括弧と同じ行に再配置する。 セミコロンを打ったときに再配置する。
list-close-comma
scope-operator
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
欲張りな削除機能をオン (モード行のモード名のあとに`/h'か`/ah'で表示される)にすると、 1つのDELコマンドで、直前の空白1つだけでなく、白文字すべてを削除します。 この機能をオン/オフにするには、C-c C-dを使います。
c-toggle-hungry-state
)をオン/オフする。 数引数を指定した場合、正ならば欲張り削除機能をオンにし、 負ならばオフにする。
c-toggle-auto-hungry-state
)。 変数c-hungry-delete-key
は、 欲張り削除機能がオンかオフかを制御します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
c-mark-function
)。
c-fill-paragraph
)。 現在行にコメントがあったり、現在行がコメントの内側なら、 コメントの字下げとコメント区切りを保存したまま、 ポイント位置のコメントや段落を詰め込む。
c-macro-expand
)。 リージョンのまえにあるテキストにマクロ定義があることもあるので、 それらもプリプロセッサに渡されるが、その部分の出力は表示しない。
マクロを用いたCのコードをデバッグするとき、 どのようにマクロが展開されるか正確に理解するのが難しいことがある。 このコマンドを使えば、マクロ展開のことを考える必要はない。 展開結果を目にすることができる。
c-backslash-region
)。 Cのマクロ定義を書いたり編集したあとに便利なコマンド。
行末がすでに`\'で終っているなら、そのまえに置く白文字の個数を調整する。 そうでなければ、新たに`\'を挿入する。 ただし、リージョン内の最後の行は特別扱いする。 その行に`\'を挿入することはなく、また、`\'がある場合には削除する。
c-show-syntactic-information
)。 この情報は行の字下げを指示する。[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Cモードとその関連モードでは、 コメントの整形にいくつかの変数を使います。
c-comment-only-line-offset
(non-anchored-offset . anchored-offset)
の形の コンスセルのどちらでもかまわない。 ここで、non-anchored-offsetは、 1桁目以降から始まるコメントに与えるオフセット。 anchored-offsetは、0桁目から始まるコメントに与えるオフセット。 整数値だけの場合は、(val . 0)
と等価。
c-comment-start-regexp
c-hanging-comment-ender-p
nil
であると、c-fill-paragraph
は、 ブロックコメントのコメント終了区切りだけの行を作る。 デフォルト値はt
で、 コメント終了区切り`*/'をコメントの最後の行の末尾に置く。
c-hanging-comment-starter-p
nil
であると、c-fill-paragraph
は、 ブロックコメントのコメント開始区切りだけの行を作る。 デフォルト値はt
で、 コメント開始区切り`/*'をコメントの最初の行の先頭に置く。[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortranモードには、Fortranの文と副プログラム向けの特別な移動コマンド、 Fortranの入れ子、行番号と継続文の約束事に従う字下げコマンドがあります。 Fortranモードには、長い行を適切なFortranの継続行に分ける 専用の自動詰め込み(fortran-auto-fill)モードがあります。
Fortranのコメントは他の言語のコメントとは異なっているので、 コメントに対する特別なコマンドもあります。 Fortranのキーワードを入力するときの打鍵量を減らせる、 組み込みの略語もあります。
Fortran用のメジャーモードに切り替えるには、M-x fortran-modeを使います。 このコマンドは、フックfortran-mode-hook
を実行します(see 節 AE.2.3 フック)。
V.13.1 移動コマンド Moving point by statements or subprograms. V.13.2 Fortranの字下げ Indentation commands for Fortran. V.13.3 Fortranのコメント Inserting and aligning comments. V.13.4 Fortran専用自動詰め込み(fortran-auto-fill)モード Auto fill minor mode for Fortran. V.13.5 桁位置の確認 Measuring columns for valid Fortran. V.13.6 Fortranのキーワードの略語 Built-in abbrevs for Fortran keywords. V.13.7 Fortranモードのその他のコマンド Other Fortran mode features.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortran モードには、副プログラム(関数やサブルーチン)や文を単位とて 移動するための特別なコマンドがあります。 また、副プログラムを囲むリージョンを設定するコマンドもあり、 副プログラムをキルしたり移動したりするのに便利です。
beginning-of-fortran-subprogram
)。end-of-fortran-subprogram
)。mark-fortran-subprogram
)。fortran-next-statement
)。fortran-previous-statement
)。[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortranのコードでは、構文上の各種要素(行番号、コメント行指示子、 継続マーク)は標準Fortranが要求する桁に現れるようにしなくてはいけないので、 字下げに関する特別なコマンドと機能が必要です。
V.13.2.1 Fortranの字下げコマンド Commands for indenting Fortran. V.13.2.2 継続行 How continuation lines indent. V.13.2.3 行番号 How line numbers auto-indent. V.13.2.4 構文上の規約 Conventions you must obey to avoid trouble. V.13.2.5 Fortranの字下げのための変数 Variables controlling Fortran indent style.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
fortran-indent-line
)。fortran-indent-new-line
)。fortran-indent-subprogram
)。 Fortranモードでは、Fortranの行を字下げするようにTABを再定義します (fortran-indent-line
)。 このコマンドは、行番号と継続マークを要求される桁位置に字下げしたうえ、 それとは独立にプログラム中の入れ子に基づいて文本体を字下げします。
キーC-jはfortran-indent-new-line
を実行します。 これは、現在行を字下げしてから、新たな行を作成して字下げします。 新たな行を始めるまえに、`do'ループやその他のブロックを 閉じる文を字下げし直すのに便利です。
キーC-M-qは、ポイントを含むFortranの副プログラム (関数やサブルーチン)の行すべてを字下げする コマンドfortran-indent-subprogram
を実行します。
キーC-M-jは、適切な方法でFortranの行を分割するコマンド fortran-split-line
を実行します。 コメント行でなければ、後半部を継続行にし、それに応じて字下げします。 コメント行ならば、前後半部分とも独立したコメント行になります。
M-^は、fortran-split-line
の逆操作を行う コマンドfortran-join-line
を実行します。 現在行と直前の行を、Fortranコードとして適切に繋げます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
近代的なほとんどのFortranコンパイラには、 継続行の記述方法が2つ用意されています。 ある行の空白でない最初の文字が5桁目にあれば、先行する行の継続行です。 このスタイルを固定フォーマットと呼びます。 (GNU Emacsでは、桁位置はつねに0から数える。) 変数fortran-continuation-string
は、5桁目に置く文字を指定します。 タブ文字で始まり`0'以外の数字が続く行も継続行です。 このスタイルをタブフォーマットと呼びます。
Fortranモードではどちらのスタイルの継続行も利用できますが、 希望するほうを指定する必要があります。 変数indent-tabs-mode
の値で希望を指定します。 nil
ならば固定フォーマット、 nil
以外ならばタブフォーマットになります。 モード行に文字列`Tab'があるかどうかで、 現在使用しているスタイルがわかります。
Fortranモードでは、テキストが慣用的なFortranの継続マーク`$'で始まる、 あるいは、 5桁目から白文字以外の文字で始まる場合には、その行を継続行として扱います。 TABで継続行を字下げすると、 選択されている継続行のスタイルに変換します。 C-M-jでFortranの文を分割すると、 継続行のスタイルに応じて新たな行には継続マークを付けます。
継続行のスタイルは、Fortranモードでの編集に関わる その他の側面にも影響します。 固定フォーマットでは、文本体を置く最小桁位置は6になります。 Fortranのブロックの内側にある行を7桁目以降に字下げするときには、 白文字には空白文字を使います。 一方、タブフォーマットでは、文本体を置く最小桁位置は8で、 8桁目よりまえの白文字はつねにタブ文字です。
既存のファイルに対してFortranモードに入ると、 その内容から自動的に適切な継続行のスタイルを推測しようとします。 タブ文字か空白6個で始まる最初の行でスタイルを判断します。 変数fortran-analyze-depth
で、 (ファイルの先頭から)何行分をスタイル判断に使用するか指定します。 この範囲内にスタイルを示すような行がみつからなければ、 変数fortran-tab-mode-default
がスタイルを指定します。 nil
なら固定フォーマット、nil
以外ならタブフォーマットです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ある行の白文字以外の最初の文字が数字であれば、 Fortranの字下げではそれを行番号とみなして0桁目から4桁目のあいだに移動します。 (GNU Emacsでは、桁位置はつねに0から始まる。)
通常、4桁以下の行番号は空白1個で字下げします。 変数fortran-line-number-indent
でこの字下げ幅を制御します。 この変数の値は、行番号の最大字下げ幅を表します。 最大字下げ幅まで字下げできなくなると、 行番号の最後の桁が4桁目になるように右揃えで字下げします。 この変数のデフォルト値は1です。
これらの規則に従って行番号を字下げするには、 行番号を挿入するだけで十分です。 行番号の各桁が挿入されるたびに、字下げ幅を再計算します。 この機能をオフにするには、 変数fortran-electric-line-number
にnil
を設定します。 こうすると、行番号の挿入はその他の文字の挿入と同様に行われます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortranモードでは、適切な字下げをするためのFortranプログラムの解釈を 簡単にするために、以下の規約に従っているものと仮定します。
一般にFortranコンパイラは文字列定数の外側にある空白を無視するが、 Fortranモードは途中に空白が入っているキーワードを認識しない。 `else if'や`end do'のような書き方は許されるが、 2つの単語を同じ行に置いた場合に限る。 継続行に分かれていると認識しない。
以上の規約に従っていない場合には、行を美しく字下げできないこともあります。 しかしながら、たとえ規約に従っていなくても、 正しいFortranプログラムであれば字下げによって意味が変わることはありません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortranの字下げ動作に影響する変数がいくつかあります。
fortran-do-indent
fortran-if-indent
fortran-structure-indent
fortran-continuation-indent
fortran-check-all-num-for-matching-do
nil
なら、字下げ処理では、 `do'文は`continue'文で終っていると仮定する。 こうすると、`continue'以外の文の字下げを計算するときに、 当該文が`do'文を終えるかどうか検査しなくてよいので、 時間を節約できる。 この変数がnil
以外であれば、 行番号が付いた文の字下げを計算するときには、 当該文が`do'文を終えるかどうか検査する必要がある。 デフォルト値はnil
。
fortran-blink-matching-if
t
なら、`endif'文の字下げを行うときに、 対応する`if'文を示すために一時的にカーソルを移動する。 デフォルト値はnil
。
fortran-minimum-statement-indent-fixed
fortran-minimum-statement-indent-tab
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsの通常のコメント用コマンドは、コメントをコードのあとにも置けると仮定します。 Fortranでは、標準的なコメントの構文は、1つの行全体を必要とします。 そのため、Fortranモードでは、 Emacsの通常のコメント用コマンドを置き換え、新たな変数をいくつか定義しています。
Fortranモードでは、文字`!'で始まり他のテキストのあとにも置ける 非標準的なコメントの構文も扱えます。 しかし、この構文を受け付けるFortranコンパイラは限られるため、 まえもって指定しておかない限り、 Fortranモードは非標準のコメントを使いません。 このスタイルのコメントを使うには、 変数comment-start
に`"!"'を設定します(see 節 AE.2 変数)。
fortran-indent-comment
)。
fortran-comment-region
)。FortranモードのM-;は、 コマンドfortran-indent-comment
に再定義されています。 通常のM-;と同じく、既存のコメントを認識して、 そのテキストの桁位置を揃えます。 コメントがなければ、コメントを挿入して桁位置を揃えます。 しかし、Fortranモードのコメントの挿入と揃え方は、 他のモードと同じではありません。
新たにコメントを挿入する場合、 現在行が空行のときは(1行全体を占める)行コメントを挿入します。 空行でないとき、非標準のコメントを使うように指定してあれば 非標準の`!'コメントを挿入します。 いずれでもないときには、現在行のまえに行コメントを挿入します。
非標準の`!'コメントは他の言語のコメントと同じように揃えられますが、 行コメントの場合はようすが異なります。 標準の行コメントでは、コメント区切りはつねに0桁目にある必要があります。 コメント内部のテキストだけを揃えます。 fortran-comment-indent-style
を設定して、 3種類の揃え方を選べます。
fixed
fortran-comment-line-extra-indent
と文に対する最小字下げ幅を合計し た桁位置にテキストを揃える。 デフォルトはこれ。
文の最小字下げ幅は、 固定フォーマットの継続行スタイルの場合には fortran-minimum-statement-indent-fixed
の値、 タブフォーマットの場合にはfortran-minimum-statement-indent-tab
の値。
relative
fortran-comment-line-extra-indent
だけ余計に桁をずらす。
nil
また、行コメントの字下げ文字を変更したければ、 変数fortran-comment-indent-char
に好みの1文字を設定してください。
Fortranモードには、comment-line-start
と comment-line-start-skip
の2つの変数が新たに導入されています。 これらは、コードのあとに置く通常のコメントに対するcomment-start
と comment-start-skip
と同様の役割を、行コメントに対して果たします。 どちらもFortranモードが適切に設定するので、 変更する必要はありません。
Emacsの通常のコメント用コマンドC-x ;は、再定義されていません。 このコマンドは`!'コメントを扱えます。 `!'コメントを使っていない場合には、 このコマンドはFortranモードでは役に立ちません。
コマンドC-c ;(fortran-comment-region
)は、 リージョン内のすべての行の先頭に`C$$$'を挿入して コメントに変えます。 数引数を指定すると、行の先頭から`C$$$'を削除して、 リージョンを生きたコードに戻します。 これらのコメントに使う文字列は、 変数fortran-comment-region
の設定で制御できます。 ところで、ここではコマンドと変数に同じ名前が使われています。 LispやEmacsにおいては、使用される文脈から コマンドと変数をつねに区別できるので、 このような名前の使い方が問題を起こすことはありません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortran専用自動詰め込み(fortran-auto-fill)モードは、 挿入したFortranの文が長くなりすぎると自動的に文を分割するマイナモードです。 文を分割するには、 fortran-continuation-string
(see 節 V.13.2.2 継続行)を用いて 継続行を作ります。 SPC、RET、TABを打ったときや、 字下げコマンドを使ったときに分割されます。
M-x fortran-auto-fill-modeは、 Fortran専用自動詰め込み(fortran-auto-fill)モードがオンならばオフにし、 オフならばオンにします。 このコマンドは、通常の自動詰め込み(auto-fill)モード (see 節 U.5 テキストの詰め込み)であるM-x auto-fill-modeが行うのと 同じように働きます。 正の数引数を指定すると、 Fortran専用自動詰め込み(fortran-auto-fill)モードをオンにし、 負であればオフにします。 このモードのオン/オフは、モード行の括弧の中に`Fill'が あるかどうかで判断できます。 Fortran専用自動詰め込み(fortran-auto-fill)モードはマイナモードなので、 各バッファごとに独立にオン/オフにできます。 See 節 AE.1 マイナモード(minor mode)。
Fortran専用自動詰め込み(fortran-auto-fill)モードは、 行の長さが規定の幅(fill-column
の値)を越えると、 空白や区切りの位置で行を分割します。 Fortran専用自動詰め込み(fortran-auto-fill)が分割する区切りは、 `,'、`''、`+'、`-'、`/'、`*'、 `='、`)'です。 変数fortran-break-before-delimiters
がnil
の場合には、 区切りのうしろで分割します。 それ以外(デフォルトでもある)では、区切りのまえで分割します。
デフォルトではFortran専用自動詰め込み(fortran-auto-fill)モードはオフです。 この機能を恒常的に使いたければ、 (fortran-auto-fill-mode 1)
を実行するフック関数を fortran-mode-hook
に追加してください。 See 節 AE.2.3 フック。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
fortran-column-ruler
)。fortran-window-create-momentarily
)。 コマンドC-c C-r(fortran-column-ruler
)は、 桁定規をしばらくのあいだ、現在行の上に表示します。 桁定規は、Fortranプログラムにおいて特別な意味をもつ桁位置を表す 2行のテキストです。 2行目の角括弧と中括弧で、それぞれ、行番号と文の本体の範囲を表します。 桁番号は(それらの上の)1行目に表示されます。
GNU Emacsでは桁番号をつねに0から数えることに注意してください。 その結果、桁定規に示される桁番号は、 慣れ親しんだものより1だけ小さくなります。 しかし、それらが表す位置はFortranの標準に従ったものです。
桁定規の表示に用いるテキストは、 変数indent-tabs-mode
の値に依存します。 この変数の値がnil
ならば、 変数fortran-column-ruler-fixed
の値を桁定規の表示に使います。 nil
以外であれば、変数 fortran-column-ruler-tab
の内容を表示に使います。 これらの変数の内容を変更すれば、桁定規の表示を変更できます。
さらに桁合わせを支援するために、 C-c C-w(fortran-window-create
)は、 現在のウィンドウを幅が72桁になるように横位置で分割します。 このウィンドウで編集すれば、 正しいFortranのプログラムとしては長すぎる行を即座に発見できます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortranモードには、一般的なキーワードや宣言に対する 数多くの組み込み略語があります。 これらは、ユーザー自身が定義できる略語と同じ種類のものです。 それらを使うには、略語(abbrev)モードをオンにします。 See 節 Y. 略語の利用法 (2004/01/12)。
組み込み略語は他の略語と1つの点で変わっています。 すべてセミコロンで始まります。 通常は略語にはセミコロンを使えませんが、 Fortranモードでは、セミコロンの構文上の意味を『単語を構成する文字』に 変更することで、これを可能にしています。
たとえば、`continue'に対する組み込みFortran略語は`;c'です。 略語(abbrev)モードがオンのときに、 `;c'を挿入してから空白や改行といった句読点文字を挿入すると、 `;c'は自動的に`continue'と展開されます。
組み込みFortran略語とその展開形の一覧を表示するには、 `;?'あるいは`;C-h'と打ちます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Fortranモードでは、 キーC-x n dはコマンドfortran-narrow-to-subprogram
を実行するように 再定義しています。 このコマンドは、キーの通常の定義をFrotran風にしたものです。 バッファをポイントを含む副プログラムにナロイングします。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
asmモードは、アセンブリコードのファイルを編集するためのメジャーモードです。 つぎのコマンドが定義されています。
tab-to-tab-stop
。tab-to-tab-stop
で字下げする。tab-to-tab-stop
を行う。変数asm-comment-char
は、 アセンブラ構文でコメントを開始する文字を指定します。
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |