emacs:想要缩进制表符(制表符大小 2 或 4)与空格对齐

emacs: Want to indent with tabs (tab-size 2 or 4) allign with spaces

我现在使用 emacs 一段时间并且在大多数情况下都喜欢它(对 ssh、语法高亮等很有用)。

但是说到代码的缩进和对齐(对齐),我对emacs不是很清楚。

我想要 我所有的代码 (SQL, C, Java, ECMAScript, HTML, PHP, CSS, ...) 按 "TAB" 键真的会生成一个 TAB 字符(我通常使用 2 个空格的大小,但 4 或 6 个也不错)。 [我同意,代码中的制表符在对齐方面是有害的,但空格在缩进方面也是有害的!]你可以看看,我想在我的 HTML 模板中使用它: https://github.com/pheek/HTMLTemplate/blob/master/template.html

另一方面,我总是与空格对齐,所以其他程序员在我的代码中正确对齐了所有等号。这工作正常,除了 2 个例外:

  1. 要输入 TAB-Char,我总是必须按 "CTRL-q TAB",这很烦人。
  2. 不同的编程语言在emacs 中配置为使用不同的TAB 大小。对于我自己,我总是希望 TAB 的大小为 2 个空格。

我怎样才能做到这一点

a) 按 TAB 键总是插入一个 TAB 字符?

b) TAB 在所有 emacs 模式下 (c, java, html, php, css, ecmascript, ...) 2 个字符宽?

正如@lawlist 所说,每种主要模式都不同。每个通常都有自己的 indent-line-function,像 tab-width 这样的设置是本地缓冲区。

有一个 smart-tabs 包 (https://github.com/jcsalomon/smarttabs) 对我来说效果很好,但我只将它用于类 C 模式(这并不是说它对其他人不起作用,我只是没试过)。

(use-package smart-tabs-mode
  :commands (smart-tabs-mode)
  :init
  (add-hook 'c-mode-common-hook #'smart-tabs-mode)
  :config
  (smart-tabs-advice c-indent-line     c-basic-offset)
  (smart-tabs-advice c-indent-region   c-basic-offset)
  )

tab-width 应该全局设置为您的首选宽度,并且可以在主要模式挂钩中更改为在某些模式下不同。

(setq-default tab-width 2)

(defun jpk/c-mode-common-hook ()
   (setq tab-width 4))
(add-hook 'c-mode-common-hook #'jpk/c-mode-common-hook)

a) 在您的 emacs 配置文件中将 indent-tabs-mode 的值设置为非零。 (setq-default indent-tabs-mode t) 应该可以解决问题。 https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation.html

b) 同样,将tab-width 的值设置为所需的宽度。 (setq-default tab-width 2) 你的情况。 https://www.gnu.org/software/emacs/manual/html_node/efaq/Changing-the-length-of-a-Tab.html