使用yasnippet,Emacs在python模式下进行了错误的缩进

时间:2014-03-09 19:44:44

标签: python emacs indentation yasnippet

即使我在其中打开纯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)再次带来了它 那就是我无法找到原因的地方。

如果你有这个问题(python + yasnippet +正确的缩进) - 请给我一个提示。 或者只是指向工作配置的链接。

最新的Emacs(24.3.50.1)

1 个答案:

答案 0 :(得分:1)

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

  

可能触发`python-indent-line'调用的命令。

然而,从文档字符串中不清楚变量是否可以 用来控制骑车(实际上我甚至不确定是否设置了这个 如果控制压痕循环的正确方法,则变量)。该 python-indent-line的docstring更好地解释了这个变量的用途

  

当变量last-command'等于其中一个符号时   在python-indent-trigger-commands或FORCE-TOGGLE里面   非零,它循环变量中指示的水平   通过设置当前级别的python-indent-levels   变量`python-indent-current-level'。

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

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

您将在else之前点击退格键以重新启动它 关闭for(默认情况下,它会缩进以便关闭if