【问题标题】:How to make Emacs use tabs instead of spaces?如何让 Emacs 使用制表符而不是空格?
【发布时间】:2014-03-14 08:04:08
【问题描述】:

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

我想使用 Emacs 作为完全可定制的编辑器,正如它所宣布的那样。这样它就可以完全按照我的意愿行事。我根本不在乎开发者的意见,我想定制一切。这是错的吗?

【问题讨论】:

  • 这有点取决于您所说的“制表符而不是空格”的确切含义。正如您所建议的,Emacs 具有极高的可配置性,它不仅具有制表符/空格切换设置。 EmacsWiki 有 several pages on different approaches 可能对你有用。
  • 当我调用indent-for-tab-command 时,它总是在行的开头添加一些空格和制表符。我希望这些空格和制表符始终是制表符。这就是我的意思。
  • 如果您使用制表符而不是空格,那么您就处于保存状态,因为每个人都可以将他们的编辑器配置为尽可能宽地显示制表符,因此每个人都可以得到他们想要的。 (唯一的问题:人们不明白这一点。)

标签: emacs tabs elisp indentation space


【解决方案1】:

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

在类 C 语言的基于 cc-mode 的模式中,这样的事情应该可以满足您的需求:

(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)

【讨论】:

  • 我已经更新了我的答案,这应该会让你选择 C。行设置 tab-width 应该使用 setq-default,而不是 setq。您使用的是哪种 HTML 模式?
  • 默认的。据我所知,它被称为 HTML 模式。
  • 这样它在 C 和 Ruby 上运行良好。看来我需要分别研究每种语言。我可以使用哪些文档来执行此操作?
  • @German,我为ruby-modehtml-mode 添加了一些设置(基于sgml-mode,并使用其偏移量)。
  • 干得好!最后,我可以在所有主要模式的真实标签中使用“正确缩进”功能。
【解决方案2】:

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

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

【讨论】:

  • 我认为他想要的恰恰相反。
【解决方案3】:

indent-tabs-mode 设置为非零值是告诉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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 2011-07-06
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    相关资源
    最近更新 更多