如何让Emacs使用制表符而不是空格?

时间:2014-02-14 19:42:35

标签: emacs tabs elisp indentation space

我已将一个indent-for-tab-command命令绑定到一个键,我希望它能够像使用标签一样进行智能模式特定的缩进。在所有模式中。它总是插入空格而不是制表符。如何重新配置​​/重新编程?

我希望将Emacs用作完全可自定义的编辑器,因为它已宣布为。这样它的行为就像我想要的那样。我根本不关心开发人员的意见,并希望自定义一切。这是错的吗?

3 个答案:

答案 0 :(得分:7)

并非所有主要模式都以相同的方式处理缩进,因此您可能必须对某些模式进行一些调整才能获得所需的行为。他们通常会有自己的缩进设置,例如cperl-indent-level

在基于cc-mode的类似C语言的模式中,这样的事情可以做你想要的:

(setq-default indent-tabs-mode t)
(setq-default tab-width 4) ; Assuming you want your tabs to be four spaces wide
(defvaralias 'c-basic-offset 'tab-width)

请注意,使用制表符进行缩进时可能会出现一些有趣的情况。 EmacsWiki indentation basics页面值得一读,如果只是为了理解Emacs如何处理缩进与其他编辑不同。

修改

对于ruby-mode,这应该有效(假设您已经如上所述设置了tab-width):

(setq ruby-indent-tabs-mode t)
(defvaralias 'ruby-indent-level 'tab-width)

适用于sgml-mode - 派生模式,包括html-mode

(defvaralias 'sgml-basic-offset 'tab-width)

答案 1 :(得分:1)

indent-tabs-mode设置为非nil值是告诉Emacs“我希望缩进尽可能使用TAB”的方法。但是问题是,如果您的tab-width是8(即TAB字符跨越8列),并且缩进代码发现缩进应该在第13列,则无法仅使用TAB到达那里,因此Emacs然后将插入TAB和SPC的组合。

但是,如果您确实只想要TAB,则可以覆盖缩进的列选择。例如:

(setq-default indent-tabs-mode 'only)

与类似的东西一起

(advice-add 'indent-to :around
  (lambda (orig-fun column &rest args)
    (when (eq indent-tabs-mode 'only)
      (setq column (* tab-width (round column tab-width))))
    (apply orig-fun column args)))

答案 2 :(得分:-1)

(setq-default indent-tabs-mode nil)放入您的.emacs文件中。

https://www.emacswiki.org/emacs/NoTabs