无法更改Emacs在HTML标记之间的默认缩进

ale*_*nco 12 emacs indentation

我对Emacs缩进范例感到困惑.

我在我的.emacs文件中有这个:

(setq-default tab-width 4)
Run Code Online (Sandbox Code Playgroud)

如果我在以下情况下按TAB键

                    <ul>
(caret)
                    </ul>
Run Code Online (Sandbox Code Playgroud)

它最终会像这样

                   <ul>
                     (caret)
                   </ul>
Run Code Online (Sandbox Code Playgroud)

(HTML标记之间有2个空格缩进.)

它应该像这样结束:

                   <ul>
                       (caret)
                   </ul>
Run Code Online (Sandbox Code Playgroud)

我尝试了一切:

(setq-default tab-width 4)
(setq-default indent-tabs-mode t)
(setq tab-stop-list '(4 8 12 16))
Run Code Online (Sandbox Code Playgroud)

我已将每个可能的Emacs设置设置为缩进到4,但仍有2个空格缩进.

有什么建议?

Eme*_*gul 23

设置标签宽度不适用于此方案,但我理解您的困惑; Emacs提供了几个与选项卡相关的变量,并且确定特定场景的正确变量可能会令人困惑.

此EmacsWiki文章提供了有关设置HTML缩进级别的更多详细信息 ; 一般来说,EmacsWiki是Emacs技巧的绝佳资源.

在这种特定情况下,由于您使用的是Emacs的标准HTML模式(html-mode由定义sgml-mode),因此您要设置的变量是sgml-basic-offset.该变量默认为2,但您可以将其更改为4,如下所示:

(setq sgml-basic-offset 4)
Run Code Online (Sandbox Code Playgroud)

要使此更改仅特定于html-mode,您可以使用以下代码:

(add-hook 'html-mode-hook
  (lambda ()
    ;; Default indentation is usually 2 spaces, changing to 4.
    (set (make-local-variable 'sgml-basic-offset) 4)))
Run Code Online (Sandbox Code Playgroud)

这一切都假设您正在使用Emacs 22或更高版本; 如果不是这种情况,我链接到的EmacsWiki页面包含早期版本的Emacs的解决方法.

  • HTML是SGML的衍生物.`html-mode`的Emacs功能由通用SGML包提供,这就是变量为`sgml-basic-offset`的原因.这就是为什么最好在`html-mode-hook`中设置该变量.这样,它只会影响HTML文件,而不会影响SGML文件. (2认同)