我找不到这个:如何在EMACS中使用4个空格代替制表符?

6
我正在转向使用EMACS,但在我的.emacs文件中找不到我需要做的事情,以使php-mode 和所有其他模式插入4个空格而不是一个TAB。求助?
更新:
使用给定答案后,当我按下Tab键时,在纯文本文件中仍会得到8个空格。在php-mode中,我仍然得到2个空格。在php模式中按Tab键没有任何作用,在常规EMACS中按Tab键会添加8个空格。
更新2:
这是我在.emacs中的内容:
(require 'color-theme)
(color-theme-calm-forest)

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq c-basic-offset 4)

在常规文件中仍然是8个空格,在PHP文件中制表符不起作用,或者随机跳动。我的php-mode来自Ubuntu 9.10 apt-get install php-mode


更新3:

好的,这是我想要的...

  1. 当我按TAB键时,并且每次都按TAB键时,我希望插入4个空格。
  2. 我希望TAB键跳转到上一行的相对位置(自动向上制表符,再次输入空格)

这些规则需要适用于所有文件,但必要时需要首先适用于(文本)和PHP文件。

5个回答

9

将变量indent-tabs-mode更改为nil。您可以通过M-x set-variable交互地执行此操作(仅针对一个缓冲区)。要使其永久生效(并适用于所有缓冲区),请将以下代码添加到您的.emacs文件中:

 (setq-default indent-tabs-mode nil)

在您的init文件中。
为了使大多数模式下制表符只有4个空格,请添加以下内容。
 (setq-default tab-width 4)

对于基于 C 语言的模式(如 PHP),您需要执行以下操作:

(setq c-basic-offset 4)

好的,在 PHP 模式下没有帮助(仍然是 2),对于一般编辑它使用了 8 个空格。 - Urda
添加了一行关于如何在常规编辑中更改为4个空格的设置。Php模式可能有自己的设置。 - Andrew Stein
你有一个语法错误。我会认为它是(setq-default tab-width 4),但这并没有帮助解决问题。而且每次尝试时,我都确保 EMACS 正在使用新的配置。 - Urda
2
对于基于 C 模式的模式,您可以使用 c-basic-offset 变量来确定要缩进多少列。尝试使用 (setq-default c-basic-offset 4) - jamessan
哦,我不知道PHP是基于C模式的 - 应该猜到了。我会把它加入我的答案中。谢谢jamessan。 - Andrew Stein
1
我强烈建议你不要更改tab-width。这个变量只影响缓冲区中的TAB字符显示方式。而Urda的问题是关于按下TAB键时该怎么做(他似乎不想插入TAB字符)。 - Stefan

3
您缺少了一个(setq c-basic-indent 4)。因此,您应该有:
;; 4 spaces rather than tabs
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq c-basic-offset 4)
(setq c-basic-indent 4)

1
我再次强调:除非你真的知道自己在做什么,否则不要更改 tab-width - Stefan

2
在 Emacs 中(在编程模式下),TAB 的默认行为是自动缩进到正确的位置,该位置是根据主模式描述的缩进规则决定的(实际上,这是主模式最重要的工作之一,通常比着色高亮要求更苛刻)。当然,如果该行已经缩进到正确的位置,按 TAB 键不会产生任何效果。
因此,您可以强制使 TAB 以愚蠢的方式运行,就像您所要求的那样,但这样您将错失大部分乐趣。例如,您可以执行类似以下内容的操作:
(global-set-key "\t"
  (lambda ()
    (interactive)
    (let ((prevline-indent (save-excursion (forward-line -1) (current-indentation))))
      (if (< (current-column) prevline-indent))
          (indent-to prevline-indent)
        (insert "    ")))))

但是相反地,我建议您按照Emacs的意图使用TAB,并告诉Emacs您希望代码如何缩进。可能通过设置类似以下内容来实现:

(setq-default indent-tabs-mode nil) ;; Prefer SPC over TAB when indenting.
(setq c-basic-offset 4)             ;; I like indenting by 4 spaces.

根据您的说法,您的php-mode中的TAB缩进无法正常工作,可能是php-mode存在错误。请告诉我们具体哪种情况下不起作用,展示被误缩进的文本,并解释缩进方式与您期望的方式不匹配的原因。

0

这是我所做的。

;;;; Tab settings ;;;;
;Tab width is 3
(setq tab-width 3)
(setq-default tab-width 3) ;;going to force it. yessir.
;Use spaces always.
(setq-default indent-tabs-mode nil)
;Jump by 3.
(setq c-basic-offset 3)
;this defaulted to 4 and had to be reset to 3. the prior settings did not override it. Lame.
(setq perl-indent-level 3)
;Tab stop list out to col 60
;Manually set by x3
(setq tab-stop-list '(3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60))

为什么你连续使用了两个(setq-default tab-width 3) - Gabe

0

好的,知道了。但我希望这是一个永久的设置,用于编辑PHP和其他模式下的文件。 - Urda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接