【问题标题】:How to make Tab insert a set number of Spaces in Emacs如何让 Tab 在 Emacs 中插入一定数量的空格
【发布时间】:2017-01-12 22:43:21
【问题描述】:

我不想在 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:”然后在下一行点击制表符,它会添加 4 个空格。但是,如果我再次按下制表符,它将带我回到行首。我想我只是想让它添加一定数量的空格,简单明了(除非有人可以给我一个很好的理由,说明为什么让制表符在行中循环很有用)。

我想要这个的主要原因是因为我正在从事一个项目,其中评论遵循特定格式,涉及使用基于 4 个空格的缩进。 例如:

    r"""
    Return the value of the q-gamma function. 

    .. MATH::

        qgamma(z,q) = \Gamma_q (z).
    """

因此,对于带有“qgamma”的行,我必须以 8 个空格开头,并且我希望能够通过按两次 tab 来完成它。但是,emacs 认为这不是一个能够两次制表符的合适位置,所以每当我按两次制表符时,它都会让我回到行首。

谢谢!

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

【问题讨论】:

  • 您可能需要添加您用于编辑 Python 文件的主要模式。

标签: python emacs tabs


【解决方案1】:

如果您使用的是内置的python.el,则可以将indent-line-function 设置为indent-relative,而不是python-indent-line-function 中的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 答案中指的是哪些。

【讨论】:

    【解决方案2】:

    M-x customize,搜索py-tab-indent,将其关闭并Apply。我相信这就是您正在寻找的行为。测试一下,如果是,Apply and Save 自定义。

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

    【讨论】:

    • 这是给python-mode.el的,和内置的python.el不一样。
    • 对不起,他提到了python-mode。我以为他指的是 python-mode 包。
    • 还是模棱两可。两者的主要模式是python-mode。我并没有指出你的答案有点糟糕,只是你应该注意你指的是哪种 python 模式。
    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多