2010-05-21 55 views
2

我正在嘗試診斷此問題。 TAB創建4個空格,而不是像我想要的那樣使用4個標籤。但我不認爲這應該是因爲C-h v indent-tabs-mode上的緩衝區有問題說它設置爲t。當我檢查我的鍵盤綁定時,TAB設置爲c-indent-line-or-region。此功能是否會忽略我的標籤模式?爲什麼我的Emacs會使用空格而不是製表符?

+0

請注意,許多人(包括我自己)認爲標籤是邪惡的:http://www.emacswiki.org/emacs/TabsAreEvil - 您已將標籤寬度從默認的8改爲4.如果我要看在你的代碼中,縮進是錯誤的。此外,您通常希望對齊部分代碼,即函數參數 - 單獨使用選項卡將無法實現此功能,並且最終會混合使用製表符和空格。 – slu 2010-05-22 12:44:11

回答

3

Emacs中的選項卡和縮進比大多數人預期的要複雜得多。我強烈建議花一些時間閱讀它 - 從長遠來看,幾乎肯定會爲您節省一些困惑。

下頁在Emacs的維基組最相關的討論一起: http://www.emacswiki.org/emacs/CategoryIndentation

有不少在那裏,但它是值得翻翻。

一個或其他的TabsAreEvil和SmartTabs配置很可能會吸引你,順便說一句,這取決於你對這個問題的個人意見!

請確保您閱讀了tab-stop-list變量上的頁面。它隱藏在鏈接列表底部附近,但在沒有自動縮進規則的情況下理解制表符的行爲以及諸如「tabify」之類的事情至關重要。

標尺模式在這裏也很有用。我使用文本模式自動啓用它:

;; Use ruler in text-mode 
(add-hook 'text-mode-hook 
      (function (lambda() 
         (setq ruler-mode-show-tab-stops t) 
         (ruler-mode 1)))) 
1

檢查tab-width變量。如果它是8(默認值),那麼Emacs當然必須插入四個空格,因爲選項卡會「太多」。

+0

它是8.我剛纔改爲4,但問題仍然存在。 – 2010-05-21 21:01:21

1

檢查文件是否爲Emacs "File Local Variables"。這些特殊格式的行可以在加載該文件時覆蓋您的設置。

這裏是從一個位的Ruby代碼的底部,迫使縮進到2位的例子,和製表符轉換爲空格:

# Local Variables: 
# tab-width: 2 
# ruby-indent-level: 2 
# indent-tabs-mode: nil 
# End: 
2

我想出問題。畢竟它是插入一個製表符。事實證明,我認爲這不是因爲當我擊退退格鍵時,鍵被綁定到c-electric-backspace,它看起來變量c-backspace-function被設置爲backward-delete-char-untabify,其中IMO擊敗了製表符的目的。

+1

您可能會發現x-stretch-cursor變量和空白模式對於可視化標識選項卡很有用。後者在默認情況下可能非常花哨,但它可以合理地自定義,因此您可能會發現一個令人滿意的配置。 – phils 2010-05-25 09:57:58

+0

+1。如果我早些時候看到了這個答案,我將會拯救我一個小時的生命。 – 2010-07-19 21:06:17

1

一定要看看文件的第一行。如果您看到類似 // - - tab-width:4;模式:C++; c-basic-offset:4; indent-tabs-mode:nil - - 此行將覆蓋任何全局或模式設置。

相關問題