2009-06-18 28 views
3

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

+0

确认,我上面不准确。我不是指实际的制表符,而是4个空格代替制表符。为此道歉。 – 2009-06-18 16:38:06

回答

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

我使用ctrl-z和meta-z来滚动/滚动/向下单行。 (这是标准的,我认为在像80年代的emacs中。)我不得不在XEmacs 21.5.29中将其添加到我的custom.el中,但随后发现定制被HTML主模式所覆盖。 Trey的机制正是我所需要的,让它再次运作。布拉沃特雷。没有什么能让你在滚动的时候消失窗口来消灭你的流量...... – 2016-04-20 15:43:56

2

我不知道的Emacs的HTML模式具体,但我可以回答关于一般编辑:

  • 在默认情况下,Emacs将不进行自动缩进,所以没有在这里做。

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

  • ,你应该能够通过设置indent-line-functiontab-to-tab-stop,设置tab-stop-list(4 8 12 16...)indent-tabs-modet得到你想要用tab键的行为。

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

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

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