5

私の .emacs ファイルを縮小する方法について誰か助けてくれませんか。

現在、使用する各言語にカスタム タブがある場所に設定しています。たとえば、Java のフックがある場合は、次のようになります。

;; Java フック
(defun e-java-mode-hook ()
    (setq タブ幅 4)
    (setq indent-tabs-mode t)
    (define-key java-mode-map (kbd "") 'java-insert-tab))
(defun java-insert-tab (&optional arg)
    (インタラクティブな「P」)
    (挿入タブ引数))
(add-hook 'java-mode-hook'e-java-mode-hook)

また、CSS や JavaScript などの別の言語を追加する場合は、CSS 用の別のフックと JavaScript 用の別のフックを追加します。それで、それを設定するグローバルな方法があるかどうか疑問に思っていたので、それはあらゆる言語に適用されますか?

現在、Windows 7 で GNU Emacs 23.2.1 を実行しています。

4

3 に答える 3

5

私はタイラーに同意します。少し複雑ですが、デフォルトのインデント機能を理解してカスタマイズしようとすると、長期的にはうまくいくでしょう。Emacs Wiki には優れたリソースがあり、Stack Overflowにはその他の関連する Q&Aがあります。

タブ キーを にバインドすると、 などinsert-tabの利点indent-regionや、メジャー モードが提供するその他のインテリジェントな動作が完全に失われます。

ただし、特定の質問に対処するには:

(java-insert-tab)1) andなどを定義し(css-insert-tab)(javascript-insert-tab)いて、それらがすべてまったく同じことを行う場合...まあ、実際にはこれらの関数が複数必要ないことがわかると思います。より一般的な名前を付けて、再利用してください。

2)(local-set-key ...)と同じことを(define-key (current-local-map) ...)行います。つまり、メジャー モードに関係なく、単一の汎用関数を使用してタブのキーバインドをオーバーライドすることもできます。

(defun my-coding-config ()
    (setq tab-width 4)
    (setq indent-tabs-mode t)
    (local-set-key (kbd "<tab>") 'my-insert-tab))

(defun my-insert-tab (&optional arg)
    (interactive "P")
    (insert-tab arg))

my-coding-config次に、該当する各モード フック変数に追加するだけです。それらがたくさんある場合は、次のようにリストにまとめることができます。

;; Use my coding hook for all programming modes
(mapcar
 (lambda (language-mode-hook)
   (add-hook language-mode-hook 'my-coding-config))
 '(java-mode-hook
   javascript-mode-hook
   css-mode-hook
   ...))

C-h v tab-width RET3)と 同様にを見るindent-tabs-modeと、どちらも「何らかの方法で設定すると、自動的にバッファローカルになる」と書かれていることに気付くでしょう。

前述のカスタマイズ インターフェイスの代わりに、 を使用(set-default 'indent-tabs-mode t)して、そのような変数のデフォルト値を設定できます。バッファローカル値を設定するコードがない場合、すべてのバッファはデフォルトを使用します。これは、不要なモード フックの記述を避けるのに役立つ場合があります。

于 2011-01-29T00:00:17.580 に答える
2

あなたが何をしようとしているのかわからない。タブ幅をグローバルに 4 つのスペースに設定する場合は、customize コマンドを使用してそれを行うことができます。

M-x customize-variable tab-width <ret>

カスタマイズでタブ幅に加えた変更はすべてグローバルに適用されます。したがって、フックを使用してモードごとに個別に設定する必要はありません。

異なるモードに適用したい異なる設定がある場合は、.emacs に各モードに固有のコードが必ず必要になります。

より一般的には、独自のカスタム タブ挿入コマンドを作成しようとしているように見えます。組み込みのインデントは必要なことを実行しませんか? タブを必要な場所に手動で挿入するよりも、Emacs のインデント設定をカスタマイズする方が簡単だと思います。

まだ行っていない場合は、インデントに関するマニュアルのセクションを見て、多くの余分なフックなしで必要なことを実行できるかどうかを確認してください。

文字のインデント

(つまり: h -elp, r -read the manual, m -enu item Indentation )

また:

(info "(emacs)Indentation")
于 2011-01-28T14:10:48.240 に答える
1

espect.elはあなたが望むことを正確に実行しています。

ドキュメントから:


このモードでは、簡潔で拡張可能なミニ言語を使用して、個々のバッファーの設定を簡単に構成できます。モードやファイル名のチェックなど、一般的な構成選択タスクを単純な宣言型構文に抽象化します。条件を宣言します。新しいバッファがそれらと一致したときに関数を実行します。これにより、お気に入りのプログラミング言語でflyspell-prog-modeをオンにしたり、.mknで終わるすべてのテキストモードバッファに特別なプロパティを設定したりすることが簡単にできます。

于 2011-01-28T13:46:31.053 に答える