2011-06-24 66 views
6

我正在學習Emacs,我試圖設置我的初始化文件。 目前,它看起來像這樣(發現它的地方在web):使Emacs選項卡的行爲完全像vim的

(setq indent-tabs-mode t) 
(setq-default indent-tabs-mode t) 
(global-set-key (kbd "TAB") 'self-insert-command) 
(setq default-tab-width 4) 
(setq tab-width 4) 
(setq c-basic-indent 4) 

但它不表現得像標籤的Vim的風格。

我只是希望它使用標籤時表現得像Vim的。 這意味着不會用空格替換製表符(我認爲Emacs默認會這樣做)。

讓每個人都能在自己喜歡的標籤寬度編輯文件。我通常使用4作爲製表符寬度。而當我按下Backspace時,它將向後輸入相同的數字,這意味着如果我已將Tab設置爲4,並且按下Tab,則按下Backspace後按4個字符。 它也應該總是使用4個空格作爲製表符。因爲有時在emacs中它不會那樣做。

+0

Emacs中的縮進是一個有點複雜的主題,但我認爲值得花一些時間去理解一些細節。有關大量信息,請參閱http://www.emacswiki.org/emacs/CategoryIndentation。 – phils

回答

6

Vim的標籤處理可配置,所以它不是你想要做什麼好說明,但你的描述的其餘部分有足夠的信息,大部分。

應付標籤最簡單的方法是從來沒有使用它們。所以,如果以你喜歡的方式設置標籤需要一些工作,請不要感到驚訝。

您已經設置了標籤鍵來插入製表符。這不是Emacs中的定製:通常標籤鍵用於縮進當前行。對於默認設置,您所做的已足夠,但特定於語言的模式仍可能會使選項卡縮進。我假設你包含了c-basic-indent你正在編寫C代碼;所以你需要告訴C模式你不想讓Tab縮進。這應做到:

(eval-after-load "cc-mode" 
    '(define-key c-mode-map (kbd "TAB") 'self-insert-command)) 

你碰到的另一件事是,默認情況下,退格鍵試圖通過一列向後移動,而不是一個字符。以下應該刪除一個字符:

(global-set-key (kbd "DEL") 'backward-delete-char) 
(setq c-backspace-function 'backward-delete-char) 
+0

我使用vim的默認設置,不過我使用4的tabstop。現在這個工作非常好,謝謝。 – rob

+0

設置分號後,emacs將該行向左移兩個字符。你知道如何解決這個問題嗎?我的init文件看起來像這樣目前(setq縮進標籤-模式t) (全球設置鍵(KBD 「DEL」) '向後刪除字元) (setq C-退格功能' 向後刪除炭) (setq默認縮進凸片-模式t) (全球設置鍵(KBD 「TAB」)的自我插入命令) (setq默認標籤寬度4) (setq標籤寬度4 )(定義鍵c-模式映射(kbd「TAB」)「自我(模式)) (setq c-basic-indent 4) (setq備份禁止t) (eval-after-load」cc-模式「 ' -insert命令)) (刪除選擇,模式t) (setq自動保存默認無) – rob

+0

@rob如果您不希望Emacs的,當你按下'自動縮進;'(和其他幾個字符s),用'(加載後評估「cc-mode」'(define-key c-mode-map「;」nil))'將它們解除在'c-mode-map'中。如果您的投訴是Emacs不縮進您想要的列數,請告訴它您最喜歡的縮進樣式是什麼;請參閱[C模式手冊](http://cc-mode.sourceforge.net/html-manual/Customizing-Indentation.html#Customizing-Indentation)。 – Gilles