私はタイラーに同意します。少し複雑ですが、デフォルトのインデント機能を理解してカスタマイズしようとすると、長期的にはうまくいくでしょう。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)
して、そのような変数のデフォルト値を設定できます。バッファローカル値を設定するコードがない場合、すべてのバッファはデフォルトを使用します。これは、不要なモード フックの記述を避けるのに役立つ場合があります。