如何将Emacs html-mode配置为像TextMate的默认HTML包一样?

时间:2009-06-18 13:56:28

标签: html emacs textmate

我的一位朋友正在考虑从TextMate切换到Emacs。他习惯于TextMate的默认HTML编辑模式,该模式具有4个空格的制表位并插入制表符(即默认情况下不会自动缩进)。它还允许使用“Cmd-Shift->”完成打开的HTML标记。有什么想法吗?

2 个答案:

答案 0 :(得分:9)

我认为这些设置可以解决问题:

(defun my-html-mode-hook ()
  (setq tab-width 4)
  (setq indent-tabs-mode t)
  (define-key html-mode-map (kbd "<tab>") 'my-insert-tab)
  (define-key html-mode-map (kbd "C->") 'sgml-close-tag))

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

(add-hook 'html-mode-hook 'my-html-mode-hook)

'my-html-mode-hook中设置的说明如下:

  • 将标签宽度设置为4
  • 强制插入标签(与空格相对)
  • 强制TAB键插入一个标签(默认情况下,它会绑定缩进,而不仅仅是插入标签
  • 'sgml-close-tag是为您插入关闭标记的命令,此设置可为您提供所需的键绑定

我有一点大脑冻结,无法弄清楚让TAB键插入TAB字符的简单方法,所以我自己编写了。我不知道为什么绑定到'self-insert-command不起作用(这是普通键绑定的)。

最后一行只是将设置功能添加到'html-mode-hook。键绑定实际上只需要运行一次(与每次启用html模式相反),但这比使用'eval-after-load更容易阅读。它的用途留给读者练习。

答案 1 :(得分:2)

我不是特别了解emacs的HTML模式,但我可以回答一般编辑:

  • 默认情况下,Emacs不会自动进行,因此无需执行任何操作。

  • Emacs会保留制表符,除非您明确要求更改它们(请查看tabifyuntabify)。它们的宽度由缓冲区本地tab-width变量决定。 M-x set-variable(setq...),随意定制。

  • 通过将indent-line-function设置为tab-to-tab-stop,将tab-stop-list设置为(4 8 12 16...)并{{1},您应该能够通过Tab键获得所需的行为{}} {}

设置indent-tabs-mode允许Emacs在缩进时插入制表符。 t是一种缩进形式,只能转到该行中的特定位置,我们将其设置为通过将indent-tabs-mode设置为4的倍数来匹配制表符的预期行为。

关于完成,我肌肉记忆中唯一告诉我的是“tab-to-tab-stop”,但我不记得确定它应该采用哪种主要模式。我在列表中看到的最接近的是tab-stop-list,绑定到C-c C-e

一些政治:不要使用制表符,特别是如果你使用不等于8的宽度。它只会导致不可预测的结果

相关问题