【问题标题】:emacs: Want to indent with tabs (tab-size 2 or 4) allign with spacesemacs:想要缩进制表符(制表符大小 2 或 4)与空格对齐
【发布时间】:2018-11-11 16:39:27
【问题描述】:

我现在使用 emacs 有一段时间了,在大多数情况下都喜欢它(在 ssh 上很有用,语法高亮,...)。

但是当涉及到代码的缩进和对齐(对齐)时,我对 emacs 不太清楚。

我希望在我的所有代码(SQL、C、Java、ECMAScript、HTML、PHP、CSS 等)中按下“TAB”键确实会生成一个 TAB 字符(我通常有 2 个空格的大小,但 4 或 6 个也不错)。 [我同意,代码中的 TAB 在对齐方面是邪恶的,但在缩进方面空格也是邪恶的!] 你可以看看,我想如何在我的 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 个字符宽?

【问题讨论】:

  • C-q TAB 将插入一个标签。每个主要模式可以以不同的方式设置这些东西,有些有自己的变量需要定制才能达到预期的结果。因此,专注于设置一个主要模式,然后继续进行下一个,直到满意为止。这是一个示例链接,可帮助您入门:emacs.stackexchange.com/questions/17563/… 另请参阅:stackoverflow.com/questions/69934/…

标签: emacs tabs indentation spaces tab-size


【解决方案1】:

正如@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)

【讨论】:

  • 感谢您的回答。我之前看过“smart-tabs-mode”,现在下载了“smart-tabs-mode.el”并从我的配置文件中加载它。不幸的是,您上面提到的代码(尤其是“使用包”)不起作用。我收到消息:Debugger entered--Lisp error: (void-function use-package)。怎么办,才能使用“use-package”命令?
  • 我终于用“smart-tabs-mode.el”让它工作了。我不使用您的use-package 代码,而只是加载smart-tabs-mode.el,然后运行暗示代码:(smart-tabs-insinuate 'c 'c++ 'java 'javascript 'cperl 'python 'ruby 'nxml)。有效!
  • @iGeeks use-package 是一种安装和配置软件包的流行方式,但它不是内置的。我很懒,只是粘贴了我的配置,而不是将其转换为内置命令。
【解决方案2】:

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

【讨论】:

  • 我的配置文件中已经有了两个“setq-default”。接缝,某些主要模式会覆盖我的行为。但是感谢您的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多