【问题标题】:I can't find this: How do I use 4 SPACES instead of a TAB in EMACS?我找不到这个:如何在 EMACS 中使用 4 SPACES 而不是 TAB?
【发布时间】:2010-03-05 16:45:44
【问题描述】:

我正在跳转到 EMACS,但在我的 .emacs 文件中找不到我需要做什么来获取 php-mode 和所有其他模式 以插入 4 个空格而不是一个标签。帮忙?

更新:

当我点击选项卡时,我仍然会在一个带有给定答案的普通文件中获得 8 个空格。在 php 模式下,我仍然得到 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 模式来自 Ubuntu 9.10 apt-get install php-mode


UDATE3:

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

  1. 当我按 TAB 键时,当我总是按 TAB 键时,我想插入 4 个空格。
  2. 我想让TAB键跳转到上一行的相对位置(自动跳到最后一行,再次输入空格)

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

【问题讨论】:

    标签: php emacs elisp


    【解决方案1】:

    将变量 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)
    

    【讨论】:

    • 好的,这在 php 模式下没有帮助(仍然是 2),对于一般编辑它使用了 8 个空格。
    • 添加了关于如何在一般编辑中更改为 4 个空格的行。 PHP 模式可能对此有自己的设置。
    • 您有语法错误。我会假设它是(setq-default tab-width 4) 这根本没有帮助。是的,我确保每次尝试 EMACS 时都采用新配置。
    • 对于基于 C 模式的模式,您可以使用 c-basic-offset 变量来确定要缩进多少列。试试(setq-default c-basic-offset 4)
    • 我强烈建议您反对更改tab-width。此变量仅影响缓冲区中 TAB 字符的显示方式。而 Urda 的问题是关于按 TAB 键时要做什么(而且他似乎不希望插入 TAB 字符)。
    【解决方案2】:

    您缺少 (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)
    

    【讨论】:

    • 我再说一遍:除非你真的知道你在做什么,否则不要改变tab-width
    【解决方案3】:

    TAB 在 Emacs 中(在编程模式下)的默认行为是自动缩进到正确的位置,这个位置是根据主模式描述的缩进规则决定的(它是主要模式中最重要的工作,实际上,通常比颜色突出显示要求更高)。当然,如果该行已经缩进到正确的位置,按 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 中可能存在错误。准确告诉我们在哪种情况下它不能正常工作,显示错误缩进的文本,并解释缩进与您的期望不符的原因。

    【讨论】:

      【解决方案4】:

      您可以使用M-x untabify 将所有制表符转换为空格。

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

      您还可以在 wiki:http://www.fnal.gov/docs/products/emacs/emacs/emacs_23.html#SEC185 和 Jamie Zawinski 的帖子:http://www.jwz.org/doc/tabs-vs-spaces.html 中找到信息。

      【讨论】:

      • 好的,很高兴知道。但我希望这是我在 PHP 和其他模式下编辑文件时的永久设置。
      【解决方案5】:

      这就是我所做的。

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

      【讨论】:

      • 为什么你连续有2个(setq-default tab-width 3)
      猜你喜欢
      • 2010-11-08
      • 2017-02-07
      • 2020-06-30
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多