我的一位朋友正在考虑从TextMate切换到Emacs。他习惯于TextMate的默认HTML编辑模式,该模式具有4个空格的制表位并插入制表符(即默认情况下不会自动缩进)。它还允许使用“Cmd-Shift->
”完成打开的HTML标记。有什么想法吗?
答案 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
中设置的说明如下:
TAB
键插入一个标签(默认情况下,它会绑定缩进,而不仅仅是插入标签'sgml-close-tag
是为您插入关闭标记的命令,此设置可为您提供所需的键绑定我有一点大脑冻结,无法弄清楚让TAB
键插入TAB字符的简单方法,所以我自己编写了。我不知道为什么绑定到'self-insert-command
不起作用(这是普通键绑定的)。
最后一行只是将设置功能添加到'html-mode-hook
。键绑定实际上只需要运行一次(与每次启用html模式相反),但这比使用'eval-after-load
更容易阅读。它的用途留给读者练习。
答案 1 :(得分:2)
我不是特别了解emacs的HTML模式,但我可以回答一般编辑:
默认情况下,Emacs不会自动进行,因此无需执行任何操作。
Emacs会保留制表符,除非您明确要求更改它们(请查看tabify
和untabify
)。它们的宽度由缓冲区本地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的宽度。它只会导致不可预测的结果