[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18. 字下げ

本章では, 字下げ(indentation)を 付加/削除/調整するEmacsコマンドについて説明します.

<TAB>

モードに固有の方法で, 現在行を『適切に』字下げする.

C-j

<RET>に続けて<TAB>を実行する(newline-and-indent).

M-^

2つの行を連結して1つにする(delete-indentation). C-jの効果を取り消す.

C-M-o

ポイント位置で行を分割する. つまり, 行内のポイント以降のテキストは新たな行になり, かつ, ポイント位置まで字下げする(split-line).

M-m

現在行の空白でない最初の文字までポイントを (行末か行頭へ向かって)移動する(back-to-indentation).

C-M-\

複数の行を同じ桁に字下げする(indent-region).

C-x <TAB>

複数の行の塊を(右か左に)同じ量だけきっちり移動する (indent-rigidly).

M-i

ポイント位置からあらかじめ設定したつぎのタブストップ位置まで字下げする (tab-to-tab-stop).

M-x indent-relative

ポイント位置からまえの行の字下げ位置まで字下げする.

ほとんどのプログラム言語には, 字下げの慣習があります. Lispコードでは, 括弧の入れ子の深さに従って行を字下げします. 細部はかなり異なりますが, 概念的にはCコードでも同様の考え方で字下げします.

どんな言語であっても, 行を字下げするには<TAB>コマンドを使います. 各メジャーモードでは, 特定の言語に適した字下げを行うように, このコマンドを定義します. Lispモードでは, <TAB>は括弧の深さに応じて行を整列します. 行のどこで<TAB>を打鍵しても, その行全体を整列します. Cモードでは, <TAB>は, Cの構文上のさまざまな側面を考慮した巧みで洗練された 字下げスタイルを実現しています.

テキスト(text)モードでは, <TAB>はtab-to-tab-stopコマンドを実行します. これは, つぎのタブストップ位置まで字下げを行います. タブストップ位置はM-x edit-tab-stopsで設定できます.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.1 字下げコマンドとその技巧

行の字下げを飛び越えるには, M-mback-to-indentation)を使います. 行のどこで実行しても, その行の空白でない最初の文字位置にポイントを移動します.

現在行のまえに字下げした行を挿入するには, C-a C-o <TAB>を使います. 現在行のあとに字下げした行を挿入するには, C-e C-jを使います.

単にタブ文字を挿入するには, C-q <TAB>と打ちます.

C-M-osplit-line)は, ポイントから行末までのテキストを垂直に下ろします. その結果, 現在行は2つの行に分割されます. C-M-oは, まず, ポイントの直後に空白やタブがある限りポイントを進めます. そして, ポイントの直後に, 改行とポイント位置の桁までに必要な字下げを挿入します. ポイント自身は挿入した改行の直前に留まります. この点では, C-M-oC-oに似ています.

2つの行を連結するには, コマンドM-^delete-indentation)を使います. このコマンドは, 現在行の行頭の字下げと行区切り(改行文字)を 削除して空白1個に置き換えます. ただし, この空白1個を省いてしまう(Lispコードには便利な)特別な場合があります. 2つの行を繋げた結果, 開き括弧や閉じ括弧が連続する場合, あるいは, さらに改行が続く場合です. 現在行の字下げだけを削除するには, 行頭に移動してからM-\delete-horizontal-space)を使います. このコマンドは, カーソル(ポイント)の周りの空白とタブをすべて削除します.

詰め込み接頭辞がある場合, M-^は, 削除される改行の直後に現れる詰め込み接頭辞を削除します. See section 詰め込み接頭辞.

一度に複数の行の字下げを変更するコマンドもあります. C-M-\indent-region)は, リージョン内で始まるすべての行に作用します. このコマンドは, 行頭で<TAB>を打鍵したかのように 『普通の』方法で各行を字下げします. 数引数は字下げする桁位置を指定します. つまり, 最初の空白でない文字がその桁位置にくるように 行全体を右か左に水平移動します. C-x <TAB>indent-rigidly)は, リージョン内のすべての行を, 引数で指定した分だけ右に移動します(引数が負であれば左に移動). 複数の行全部をきちっと揃えて(rigidly)横に移動することから, コマンドにはこのような名前が付いています.

M-x indent-relativeは, 先行する行(実際には空行でないいちばん近くの行)に 基づいてポイント位置を字下げします. ポイント位置に空白を挿入してポイントを進めて, ポイントが先行する行の字下げ位置の真下にくるようにします. 字下げ位置とは連続した白文字の末尾か行末のことです. ポイントが先行する行のどの字下げ位置よりも右にある場合には, ポイントのまえの白文字を削除してから, 先行する行の適用可能な最初の字下げ位置まで字下げします. 適用可能な字下げ位置がない場合には, indent-relativetab-to-tab-stopを実行します

字下げテキスト(indented text)モードでは, <TAB>はindent-relativeと定義されます. See section 自然言語用のコマンド.

テキストの一部を字下げする別の方法についてはSee section 整形済みテキストの字下げ.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.2 タブストップ

表を入力するには, テキスト(textモード)における<TAB>の定義, tab-to-tab-stopを利用できます. このコマンドは, ポイントがつぎのタブストップ位置に達するまで ポイントのまえに字下げを挿入します. テキスト(text)モードでなくても, M-iでこのコマンドを実行できます.

M-iが使用するタブストップは任意に設定できます. この設定は, 昇順に並べた桁番号のリストとして tab-stop-listと呼ばれる変数に格納されます.

タブストップを設定する便利な方法は, M-x edit-tab-stopsを使うことです. このコマンドは, タブストップの設定を記述したバッファを作成して選択します. このバッファを編集して今までとは異なるタブストップを指定し, C-c C-cと打ってその新たな設定を有効にします. edit-tab-stopsは, 呼ばれたときのカレントバッファをあらかじめ 記録しておくので, そのバッファに新たなタブストップを設定します. 通常, 全バッファで同じタブストップを共有しているので, 1つのバッファでタブストップを変更すると, すべてのバッファに影響をします. しかし, あるバッファでtab-stop-listをローカルにしておくと, そのバッファでedit-tab-stopsを実行するとローカルな設定を編集します.

一般的に使われる8桁ごとに設定されたタブストップの場合, 設定用バッファの内容はつぎのようになります.

 
        :       :       :       :       :       :
0         1         2         3         4
0123456789012345678901234567890123456789012345678
To install changes, type C-c C-c

1行目は, 各タブストップ位置をコロンで表します. 残りの行は, タブストップ位置を読み取りやすくためや使い方です.

tab-to-tab-stopを制御するタブストップと, バッファ内でのタブ文字の表示とは, 関係がないことに注意してください. 詳細についてはSee section 表示を制御する変数.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3 タブと空白

Emacsでは, 通常, 行の字下げにはタブと空白の両方を使用します. しかし, 空白だけを用いて字下げを行うことも可能です. そうするには, 変数indent-tabs-modenilを設定します. この変数はバッファごとの変数です. 変数を変更してもカレントバッファだけに影響しますが, デフォルト値を変更することもできます. See section ローカル変数.

空白以外のテキストの桁を保存したまま, タブを空白(あるいはその逆)に 変換するコマンドもあります. M-x tabifyは, リージョン内の連続する空白を探して, 字下げを変えることがなければ少なくとも連続する3個の空白をタブに変換します. M-x untabifyは, リージョン内のすべてのタブを 適切な個数の空白に変換します.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by 新堂 安孝 on September 22, 2009 using texi2html 1.82.