2008-12-05 58 views
5

我想覆蓋emacs中的錯誤默認選項卡方案,以便它可以像大多數其他編輯器(eclipse,notepad ++)一樣工作。我想要設置它,以便不管模式如何,選項卡都會插入一個選項卡,然後按Enter鍵將使我保持當前選項卡的深度。Emacs中的改進選項卡

我想這一點,但什麼都不做:

(global-set-key (kbd "TAB") 'tab-to-tab-stop) 
(setq default-tab-width 4) ;; 8 is way too many 
+0

一些主要模式可能會覆蓋此。你能說更多關於你的環境嗎? – dmckee 2008-12-05 20:13:40

+2

我真的打算在所有的環境中獲得它。當它確定它比我知道的更好,並且拒絕讓我按照我的意願縮進時,它真的讓我很煩惱。例如。在apache配置中,它允許我使用1個8字符選項卡,而不需要更多。 elisp模式是理智的,但與平常不一致。 – AlexH 2008-12-06 00:12:03

+0

如果它只允許一個8字符的選項卡,修復就是改變*那個*,改變它的製表符。 (或者更改縮進功能。) – ShreevatsaR 2008-12-06 19:57:44

回答

9

爲了使Enter鍵帶你到下一行,並自動縮進它,你可以把

(global-set-key (kbd "RET") 'newline-and-indent) 

.emacs。 [或者你可以點擊C-j而不是Enter。]一旦你有了,你將永遠不需要手動插入標籤,因爲Emacs在一個大括號等等之後自動縮進一個新的線條到額外的深度。如果你想要改變縮進,您可以打TAB,直到它將您帶到正確的縮進處,然後從那裏開始輸入。 [當你輸入一個右大括號時,Emacs足夠聰明,可以使其支持一個縮進級別。]

您應該刪除(global-set-key (kbd "TAB") 'tab-to-tab-stop)以使其工作。

1

C-j確實想要走出按下回車鍵的新行+縮進功能。

7

許多主要模式都會覆蓋TAB綁定,例如cc-mode會綁定TAB'c-indent-to-column

建議的'global-set-key沒有做任何事情,因爲幾乎每個主要模式都會覆蓋TAB

可能適用於您的一個訣竅是複製'pabbrev使用的方法,並定義一個全局小模式,該模式的綁定範圍爲TAB。你能做到這一點,像這樣:

(defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode") 
(define-minor-mode just-tab-mode 
    "Just want the TAB key to be a TAB" 
    :global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap 
    (define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command)) 

然而,這將禁用所有TAB完成。您可能會通過逐一覆蓋每個主要模式獲得最佳結果(以避免混淆TAB完成)。

2

當我第一次開始使用Emacs時,這也給我帶來了困擾。不過,我已經開始喜歡它了。如果我想正確縮進,如果我想要插入一個文字標籤,我打了<tab>;,我打M-i(元和'我'或 - 在某些說法中),這是綁定到tab-to-tab-stop

3

我認爲特雷傑克遜的答案可能是你想要的,除了可能使用'self-insert-command而不是'indent-for-tab-command。我個人比較喜歡emacs的默認行爲,但self-insert-command做它說什麼,而不是嘗試做任何事情像確保您的代碼格式良好。

幾次我實際上想要插入一個選項卡(不縮進)我按M-i。

2

您可能會對我在http://github.com/vohrta/regtab創建的這個小模式感興趣。

它使得當你按Tab鍵時,一個製表符(如果indent-tabs-mod不是零)或製表符寬度的空格將被放置在點上。該模式還能夠處理您可能會考慮對選定文本區域進行常規操作的內容,並且可以移動標籤以移除行首(或行集)的標籤。

您可以隨時按M-x regtab-mode啓用或禁用它。