4

インデントモードをタブのみに設定し、どのモードでも4文字の幅にしたい。これは些細なことのように思えますが、私は成功していません。すべてのモードには独自の変数とオプションがあるようです。私はこれをPerlとRで試しましたが成功しませんでした。うまくいかなかったこと:

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

(setq c-basic-offset 4)はcモードで機能しますが、それ以外は機能しません。私は何かを忘れていますか?間違った変数を設定しましたか?そのようなオプションはありませんか?

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

Emacs23の使用


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

RモードはESSパッケージに由来します。ドキュメントを読んで、私はこれを見つけました:(setq ess-indent-level 4)

CPerlモードの場合(setq cperl-indent-level 4)

各モードで適切な変数を検索する必要があるようです。

4

3 に答える 3

6

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

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

そうでない場合は、起動時にモードごとに設定する方法はありますか?

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

setqとを使用してinitファイルに値(または自動的にバッファローカル変数の場合はデフォルト)を設定するsetq-defaultこともできます。

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

例えば:

(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)
于 2011-07-28T08:30:56.337 に答える
5

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

スペースの代わりにタブでインデントする場合は、に設定indent-tabs-modeするだけtです。同じようにカスタマイズできます。

于 2011-07-27T21:10:40.787 に答える
1

(setq default-tab-width 2)emacs24で私のために働く

于 2016-07-12T03:41:38.393 に答える