我找不到这个:如何在EMACS中使用4个SPACES而不是TAB?

时间:2010-03-05 16:45:44

标签: php emacs elisp

我正在跳转到EMACS,我无法在我的.emacs文件中找到我需要做的事情来获取php-mode 和所有其他模式以插入4个空格而不是TAB。帮助

更新:

当我点击标签时,我仍然会在给定答案的普通文件中获得8个空格。在php模式中,我仍然获得2个空格。在php模式下点击标签什么都不做,常规EMACS中的标签添加了8个空格。

UPDATE2:

这就是我.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模式来自Ubuntu 9.10 apt-get install php-mode


UDATE3:

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

  1. 当我点击TAB键时,当我总是按TAB键时,我想要插入4个空格。
  2. 我希望TAB键跳转到上一行的相对位置(自动制表符到最后一行,再次输入SPACES)
  3. 这些规则需要适用于所有文件,但如果需要,首先需要应用于(文本)和PHP文件。

5 个答案:

答案 0 :(得分:9)

将变量indent-tabs-mode更改为nil。您可以通过M-x set-variable以交互方式(仅针对一个缓冲区)执行此操作。要使其永久化(并且对于所有缓冲区),请输入

 (setq-default indent-tabs-mode nil)

在您的初始文件中。

要使标签在大多数模式下只做4个空格,还要添加

 (setq-default tab-width 4)

对于基于C的模式(如PHP),您将不得不这样做:

(setq c-basic-offset 4)

答案 1 :(得分: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)

答案 2 :(得分: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模式中的TAB缩进不能正常工作,所以你的php模式可能只是一个bug。准确地告诉我们它在哪种情况下工作正常,显示错误缩进的文本,并解释缩进与您的期望不符的方式。

答案 3 :(得分:0)

您可以使用M-x untabify将所有标签转换为空格。

那么在这种情况下,您可以为您的php次要模式将indent-tabs-mode的值设置为nil

你也可以找到wiki:http://www.fnal.gov/docs/products/emacs/emacs/emacs_23.html#SEC185和Jamie Zawinski的帖子:http://www.jwz.org/doc/tabs-vs-spaces.html来提供信息。

答案 4 :(得分: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))