我的一个朋友正在考虑从 TextMate 切换到 Emacs。他习惯了 TextMate 的默认 HTML 编辑模式,该模式有 4 个空格制表位并插入制表符(即默认情况下不自动缩进)。它还允许使用“ Cmd-Shift->
”完成打开的 HTML 标记。有任何想法吗?
2 回答
我认为这些设置应该可以解决问题:
(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
. 它的用途留给读者作为练习。
我不具体了解 emacs 的 HTML 模式,但我可以回答有关一般编辑的问题:
默认情况下,Emacs 不会自动缩进,所以这里无事可做。
Emacs 保留制表符,除非您明确要求它们更改(签出
tabify
和untabify
)。它们的宽度由缓冲区局部tab-width
变量确定。M-x set-variable
,(setq...)
, 随意定制。您应该能够通过设置
indent-line-function
totab-to-tab-stop
、设置tab-stop-list
to(4 8 12 16...)
和indent-tabs-mode
to 来使用 tab 键获得所需的行为t
。
设置indent-tabs-mode
允许 Emacs 在缩进时插入制表符。这tab-to-tab-stop
是一种缩进形式,仅会出现在行中的特定位置,我们通过设置tab-stop-list
为 4 的倍数来设置它以匹配制表符的预期行为。
关于完成,我的肌肉记忆唯一告诉我的是“ C-c C-e
”,但我不记得它应该使用哪种主要模式。我在列表中看到的最接近的是sgml-close-tag
, 绑定到C-c /
有点政治:不要使用制表符,特别是如果您使用不等于 8 的宽度。它只会导致不可预知的结果