如何让Tab在Emacs中插入一定数量的空格



我不想在emacs中使用制表符,我想设置它,以便按下制表键可以根据文件类型插入一定数量的空格。例如,在处理python文件时,我希望按tab键插入4个空格。这是我当前的.emacs文件

(setq-default indent-tabs-mode nil)
(setq tab-width 4)
(setq tab-stop-list (number-sequence 4 200 4))

目前,每当我按下tab键时,它只会在emacs认为合适的位置添加任何空格。例如,如果我打开一个python文件并按下tab键,什么都不会发生。然而,如果我键入"if:",然后点击下一行的tab,它会添加4个空格。然而,如果我再次按下tab键,它会将我带回到行的开头。我想我只想让它添加一定数量的空格,简单明了(除非有人能给我一个很好的理由,说明为什么让制表符在行中循环很有用)。

我想要这样做的主要原因是,我正在进行一个项目,其中注释遵循特定的格式,涉及使用基于4个空格集的缩进。例如:

r"""
Return the value of the q-gamma function. 
.. MATH::
qgamma(z,q) = Gamma_q (z).
"""

所以,对于带有"qgamma"的行,我必须以8个空格开始,我希望能够通过按两次tab来操作它。然而,emacs认为这不是一个可以按两次tab的合适位置,所以每当我按两次tab时,它都会让我回到行的开头。

谢谢!

编辑:检查主模式变量表明它处于python模式。

如果使用内置的python.el,则可以将indent-line-function设置为indent-relative,而不是python-mode-hook中的python-indent-line-function

(defun jpk/python-mode-hook ()
(setq indent-line-function #'indent-relative))
(add-hook 'python-mode-hook #'jpk/python-mode-hook)

每个主模式都有自己的缩进函数,由indent-line-function变量指向。indent-relative是一个非常基本的通用缩进函数,用于fundamental-mode(最基本的主模式)。


Python在Emacs中有点奇怪,因为它有两种广泛使用的主要模式,即内置python.el和第三方python-mode.el。你想用什么就用什么,但要知道你在用什么,在文章和SO答案中指的是什么。

M-x customize,搜索py-tab-indent,将其关闭并切换为Apply。我相信这就是你想要的行为。测试它,如果是,Apply and Save自定义。

注意,正如@jpkotta所指出的,上面是针对python-mode.el的,而不是内置的python.el

最新更新