【问题标题】:Emacs indent level global overrideEmacs 缩进级别全局覆盖
【发布时间】:2011-10-14 14:06:38
【问题描述】:

我想将缩进模式设置为仅制表符,任何模式都具有 4 个字符的宽度。这似乎是一件微不足道的事情,但我没有成功。每种模式似乎都有自己的变量和选项。我试过为 Perl 和 R 做这个,但没有成功。 没用的东西:

(setq-default tab-width 4)
(setq standard-indent 4)
(setq-default r-indent-level 4)
(setq perl-indent-level 4)

(setq c-basic-offset 4) 适用于 c 模式,但仅此而已。我是不是忘记了什么?我是否设置了错误的变量?没有这个选项吗?

我每天都在使用多种语言(R、Perl、sh、C/C++ 等)。由于我喜欢跨语言使用相同的缩进,是否有这样的全局覆盖变量可以设置,以便缩进级别和样式在所有模式中保持一致?如果没有,有没有办法在启动时为每种模式设置它们?如果所有其他方法都失败了,则必须有一个 elisp 脚本来执行此操作。

使用 Emacs 23


已解决:我必须为每种模式单独设置变量,因为没有这样的全局覆盖。您可以在 ~/.emacs 文件中放入以下语句来配置启动时的 emacs。

R 模式来自ESS 包。通读文档,我发现:(setq ess-indent-level 4)

在 CPerl 模式下(setq cperl-indent-level 4)

看起来您只需要在每种模式下搜索正确的变量。

【问题讨论】:

    标签: emacs elisp indentation emacs23


    【解决方案1】:

    使用变量standard-indent。你可以在你的启动文件中设置它,或者自定义它;它在缩进组中。做M-x customize,然后选择编辑,然后缩进;或者,使用M-x customize-group indent

    至于使用制表符而不是空格缩进,您只需将indent-tabs-mode 设置为t。它可以以同样的方式进行定制。

    【讨论】:

      【解决方案2】:

      Emacs 中的缩进并不是真正的“小事”。您可以在 Emacs Wiki 上阅读所有相关信息:
      http://www.emacswiki.org/emacs/CategoryIndentation

      任何主要模式都可以随意实现缩进,正如您所注意到的,其中一些模式引入了与缩进相关的变量;所以不,没有保证影响所有可能的主要模式的全局缩进配置(尽管在实践中,某些变量 按照惯例完全是标准的)。

      如果没有,有没有办法在启动时为每种模式设置它们?

      当然。最简单的方法是使用 Mx customize RET 接口配置值和默认值,虽然那里只出现用defcustom 定义的变量,因此不一定全面(但它对于浏览一些可用设置仍然非常有用,即使您实际上并未使用它来设置值)。

      使用setqsetq-default 在初始化文件中设置值(或在自动缓冲区局部变量的情况下为默认值),正如您所做的那样,也可以。

      如果您想要更多控制,可以使用模式挂钩。几乎每种模式都会在缓冲区中初始化自身后运行分配给(mode-name)-hook 变量的函数列表,因此任何特定于模式的自定义项都可以写入 elisp 函数并添加到 init 文件中的适当挂钩列表中。

      例如:

      (defun my-c-mode-config ()
        (whitespace-mode 1)
        (setq indent-tabs-mode t
              tab-width        4
              c-basic-offset   4))
      
      (add-hook 'c-mode-hook 'my-c-mode-config)
      

      【讨论】:

        【解决方案3】:

        (setq default-tab-width 2) 在 emacs 24 中为我工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-05
          • 2011-07-16
          • 2016-04-05
          • 2018-03-27
          • 2010-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多