5

emacs xml (sgml?) モードをスペースではなくタブでインデントしようと必死です。私がこれまでに試したこと:

(defun my-xml-hook ()
  (setq c-tab-always-indent t
        tab-width 4
        indent-tabs-mode t) ; use tabs for indentation
  (setq indent-line-function 'insert-tab)
)
(add-hook 'xml-mode-hook 'my-xml-hook)
(defun local-sgml-mode-hook
  (setq fill-column 70
        indent-tabs-mode t
        next-line-add-newlines nil
        sgml-indent-data t)
  (auto-fill-mode t)
  (setq indent-line-function 'insert-tab)
  )
(add-hook 'psgml-mode-hook '(lambda () (local-psgml-mode-hook)))

ただし、何も機能しません。*.xml ファイルを編集すると、2 つのスペース (emacs23 と emacs24) でインデントが発生します。

私も持っていることに注意してください

(setq indent-tabs-mode nil)

私の.emacsファイルでは、フックは後で呼び出す必要があるため、これをオーバーライドする必要があります。

*.xml ファイルのタブで emacs を強制的にインデントするにはどうすればよいですか? フックが機能しないのはなぜですか?

4

2 に答える 2

7

(c-)tab-always-indent何を挿入するかではなく、TAB キーを押したときの動作を制御します。

に設定indent-line-functionするinsert-tabと、モードのスマート インデントが失われます。

最新の emacs を使用している場合、xml-mode ではなく nxml-mode を使用している可能性があります。その場合nxml-mode-hookは、あなたがすべきことです(setq indent-tabs-mode t)

デフォルトの sgml モードを使用している場合はsgml-mode-hook、実行する必要がある場所である必要があります(setq indent-tabs-mode t)(使用しているスニペットでpsgml-mode-hook)

(そして、tab-always-indent と indent-line-function はデフォルト状態のままにしておくことができます)

編集

以下の会話を要約すると、変数nxml-child-indentは 未満であってはなりませんtab-width

(そして、これらの変数のデフォルトのemacs値は2と8であるため、emacsでタブを使用してXMLをインデントするようにemacsを構成することは、本来よりも困難です)

于 2013-08-08T09:38:09.830 に答える
4

nxml-modeタブを使いこなすのにかなり時間がかかりました。smart-tabs-mode簡潔な解決策を提供するを使用することになりました。価値があるので、最終的に落ち着いた構成は次のとおりです。

;; indentation using smart-tabs-mode
(setq-default tab-width 4)
(smart-tabs-insinuate 'c 'c++ 'java 'javascript 'cperl 'python 'ruby 'nxml)

;; nxml-mode
(setq 
    nxml-child-indent 4
    nxml-attribute-indent 4
    nxml-slash-auto-complete-flag t)

実際に を設定する必要はありませんがnxml-slash-auto-complete-flag、終了タグの自動補完が得られます。これは非常に便利です。

于 2014-06-02T20:18:42.137 に答える