我喜欢 Emacs,但我的定制能力较弱,因此我将非常感激任何帮助。
我的默认设置是从不使用文字制表位 ( indent-tabs-mode nil
)。但是,对于一个特定项目,我确实需要使用制表位,并且我需要显示间距为 4(而不是默认的 8)的制表位,我希望 为tab-stop-list
4、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-mode
、tab-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