2011-07-27 5 views
3

インデントモードをタブにのみ設定したいと思います。どのモードでも4文字幅に設定します。これは些細なことだと思われますが、私は成功していません。すべてのモードには独自の変数とオプションがあるようです。私はPerlとRのためにこれを成功させることなく試みました。働いていない もの:Emacsのインデントレベルのグローバルオーバーライド

(setq-default tab-width 4) 
(setq standard-indent 4) 
(setq-default r-indent-level 4) 
(setq perl-indent-level 4) 

(setqのC-基本オフセット4)Cモードが、他には何のために働きます。私は何かを忘れていますか?間違った変数を設定しましたか?そのような選択肢はありませんか?

私は毎日さまざまな言語(R、Perl、sh、C/C++など)で作業しています。私は言語間で同じ字下げを使用したいので、字下げのレベルとスタイルがすべてのモードで一貫しているように設定できるグローバルオーバーライド変数はありますか?そうでない場合は、起動時に各モードに設定する方法がありますか?他のすべてが失敗した場合は、これを行うelispスクリプトが必要です。

のEmacs 23


使用

解決済み:私はそのようなグローバルなオーバーライドが存在しないため、個別に各モードのための変数を設定する必要がありました。あなたの〜/ .emacsファイルに次の文を入れて、起動時にemacsを設定することができます。

RモードはESSパッケージから提供されます。あなただけの各モードで右の変数を検索する必要がありますよう(setq cperl-indent-level 4)

が見えるCPerlモードでは(setq ess-indent-level 4)

:ドキュメントを通じて読書、私はこれを見つけました。

答えて

5

Emacsでのインデントは、実際には「些細なこと」ではありません。あなたは、Emacsのウィキでそれについてのすべてを読むことができます:
http://www.emacswiki.org/emacs/CategoryIndentation

任意のメジャーモードは、インデントを実装して自由であるが、それは、インデント関連の変数を導入し、それらのいくつか、あなたが気づいたように、希望と、可能なすべてのメジャーモードに影響を与えることが保証されているグローバルインデント設定はありません(実際には、特定の変数は慣例により完全に標準であるです)。

起動しない場合は、起動時に各モードに設定する方法がありますか?

もちろんです。最も簡単な方法は、defcustomで定義された変数のみが表示されるものの、のMxcustomizeRETインタフェースを使用して値やデフォルト値を設定することですので、それは必ずしも包括的ではありません(それはまだ利用可能の一部を閲覧するために非常に便利ですたとえ実際に値を設定するために使用していない場合でも)。

initファイルの設定値(または自動的にバッファローカル変数の場合はデフォルト)は、setqsetq-defaultのように設定しても問題ありません。

さらに制御したい場合は、モードフックを使用できます。ほとんどすべてのモードは、バッファ内で初期化した後に(mode-name)-hook変数に割り当てられた関数のリストを実行するので、モード固有のカスタマイズはすべてelisp関数に書き込まれ、initファイルの適切なフックリストに追加できます。 emacsの中に私のために

例えば:

(defun my-c-mode-config() 
    (whitespace-mode 1) 
    (setq indent-tabs-mode t 
     tab-width  4 
     c-basic-offset 4)) 

(add-hook 'c-mode-hook 'my-c-mode-config) 
4

変数standard-indentを使用します。スタートアップファイルに設定することも、カスタマイズすることもできます。インデントグループにあります。 M-x customizeを実行してから、[編集] - [インデント]を選択します。あるいは、M-x customize-group indentを実行します。

スペースではなくタブでインデントする場合は、indent-tabs-modeからtに設定するだけです。それは同じ方法でカスタマイズ可能です。

1

(setq default-tab-width 2)作品24