3

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

4

2 回答 2

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不起作用(这就是普通键所绑定的)。

最后一行只是将 setup 函数添加到'html-mode-hook. 键绑定实际上只需要运行一次(而不是每次启用 html 模式),但这比使用'eval-after-load. 它的用途留给读者作为练习。

于 2009-06-18T15:27:44.650 回答
2

我不具体了解 emacs 的 HTML 模式,但我可以回答有关一般编辑的问题:

  • 默认情况下,Emacs 不会自动缩进,所以这里无事可做。

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

  • 您应该能够通过设置indent-line-functionto tab-to-tab-stop、设置tab-stop-listto(4 8 12 16...)indent-tabs-modeto 来使用 tab 键获得所需的行为t

设置indent-tabs-mode允许 Emacs 在缩进时插入制表符。这tab-to-tab-stop是一种缩进形式,仅会出现在行中的特定位置,我们通过设置tab-stop-list为 4 的倍数来设置它以匹配制表符的预期行为。

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

有点政治:不要使用制表符,特别是如果您使用不等于 8 的宽度。它只会导致不可预知的结果

于 2009-06-18T15:37:20.777 回答