Spacemacs中带有硬标签的Python缩进功能已关闭

dbr*_*die 1 python emacs spacemacs

首先,让我说我是从vim转换而来的emacs / spacemacs相对较新,因此我的知识仍然很基础。

我在python层设置了spacemacs,并在dotspacemacs-additional-packages中列出了dtrt-indent的其他软件包。和设置

(dtrt-indent-mode t)
Run Code Online (Sandbox Code Playgroud)

在dotspacemacs / user-config中。我需要dtrt-indent,因为我正在处理一些项目(在python和lua中),但我不是设置缩进规则的人。

此配置适用于带有不同长度软标签的python文件。此配置也适用于具有硬标签的lua文件。

当我打开带有硬标签的缩进的python文件时,似乎有些混乱,似乎认为缩进是两个硬标签。意思是,如果我有这样的代码(假设4个空格是制表符):

def func():|  <--- Cursor
    print 'line'
Run Code Online (Sandbox Code Playgroud)

然后按Enter,我得到:

def func():
        |  <--- Cursor
    print 'line'
Run Code Online (Sandbox Code Playgroud)

状态行显示dtrt-indent的消息,内容为:

Note: indent-tabs-mode adjusted to t
Run Code Online (Sandbox Code Playgroud)

注意:如前所述,我在这方面还很陌生,而我的spacemacs配置非常稀疏。我的用户配置中没有其他内容,没有自定义层,除了dtrt-indent之外,我什至没有任何其他软件包。

编辑:

python-indent-offset设置为8

indent-tabs-mode设置为t

制表符宽度设置为4

Bri*_*orn 5

尝试M-x whitespace-mode重复此实验。你看到了什么?您缩进了空格还是制表符?

我猜您会看到类似以下内容:

def·func():
········
»   print·'line'
Run Code Online (Sandbox Code Playgroud)

这意味着您已将其python-indent-offset设置为8,indent-tabs-mode设置为nil(又称带有空格的缩进),并tab-width设置为4。

如果不是这种情况,那么这些变量(C-h v python-indent-offset,等等)的值是什么?

如果这样,您可以通过运行来解决问题

(setq-default python-indent-offset 4)
Run Code Online (Sandbox Code Playgroud)