2009-06-18 29 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.只會導致不可預測的結果