使用 Emacs 的制表符自定义缩进模式

使用 Emacs 的制表符自定义缩进模式

我喜欢 Emacs,但我的定制能力较弱,因此我将非常感激任何帮助。

我的默认设置是从不使用文字制表位 ( indent-tabs-mode nil)。但是,对于一个特定项目,我确实需要使用制表位,并且我需要显示间距为 4(而不是默认的 8)的制表位,我希望 为tab-stop-list4、8、12……

现在的问题是:我如何定义(在我的~/.emacs.d)一个函数,我可以M-x从我可能已经处于的任何模式中调用该函数,以便这些特定设置被覆盖以满足这些要求?或者,如何将这些设置设为次要模式,我可以在给定的主要模式(比如某个虚构的 PHP 模式(我还没有找到))内选择性地激活该次要模式?

答案1

(setq-default 
          tab-width 4                                     ; Set tab stops
          tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44
                            48 52 56 60 64 68 72 76 80 84)
          )

将其放入你的.emacs.d/init.el并使用M-i转到下一个选项卡位置

更新:

(defun my-tab-width ()
  "set tab-width as local variable"
  (interactive)
  (progn
    (set (make-local-variable 'tab-width) 4)
     (set (make-local-variable 'tab-stop-list)
     '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84))))

反复调用此函数M-x或将钩子放到所需模式以自动加载

(add-hook 'php-mode-hook 'my-tab-width)

答案2

您可能不需要创建模式。您只想为一个或多个文件设置变量( indent-tabs-modetab-width和)。tab-stop-list

也有人问过这个问题这个 Stack Overflow 问题

我的建议:在该项目的目录中创建一个“ .dir-locals.el”文件,其中包含以下内容:

((nil . ((tab-width . 4)
         (indent-tabs-mode . t)
         (tab-stop-list . (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84)))))

这将为该文件夹中的所有文件设置这三个变量。

但您需要确保您的模式/文件挂钩不会同时设置这些变量。无论您配置什么,以这种方式直接设置它们始终会优先。

请记住,这些变量仅影响纯文本缩进。编程模式通常有自己的缩进变量(例如c-basic-offset)。

答案3

我不是 eLISP 专家,但你可以添加类似

(add-hook 'your-minor-mode '(set-variable 'tab-width 4))

你的.emacs

相关内容