当前位置: 代码迷 >> python >> 带有yasnippet,Emacs的python模式下的错误缩进
  详细解决方案

带有yasnippet,Emacs的python模式下的错误缩进

热度:50   发布时间:2023-06-16 14:15:39.0

即使当我打开纯emacs -Q和其中的python文件时:

| -游标

if smth:
|   print("asd")       # press TAB and cursor moves to "p" symbol, it's ok

if smth:
   |print("asd")       # press TAB and I get this:

if smth:
print("asd")           # press TAB and I get prev step

因此, TAB会使缩进级别循环变化。 我绝对不想这么做。
如果使用smart-tab问题就可以解决。 但是yasnippet (yas-global-mode 1) yasnippet (yas-global-mode 1)再次带来了它。
那就是我找不到原因的地方。

如果您遇到此问题(python + yasnippet +正确的缩进),请给我一个提示。 或者只是指向有效配置的链接。

最新的Emacs(24.3.50.1)

使用TAB控制循环的一种方法是自定义python-indent-trigger-commands 变量状态的文档字符串

可能触发“ python-indent-line”调用的命令。

但是,从文档字符串中尚不清楚该变量可用于控制循环(实际上,我什至不确定是否设置了控制缩进循环的正确方法来设置此变量)。 python-indent-line的文档字符串更好地解释了此变量的用途

当变量last-command'等于python-indent-trigger-commands中的符号之一或FORCE-TOGGLE为非零时,它将通过在变量中设置当前级别来循环变量python-indent-levels中指示的级别`蟒蛇缩进电流级别”。

因此, (setq python-indent-trigger-commands nil) (或者您可以从列表中删除indent-for-tab-command )可用于禁用缩进循环。 这种方法有一个轻微的缺点,即您不能使用TAB缩进代码(如下所示),否则forif关闭。

for ..:
    if ..:
        ...
        break
else:
    ...

您将在else之前先按退格键以使其缩进,以使其关闭for (默认情况下,将缩进其以使其闭合if