使用yasnippet、Emacs在python模式下缩进错误

使用yasnippet、Emacs在python模式下缩进错误,python,emacs,indentation,yasnippet,Python,Emacs,Indentation,Yasnippet,即使我打开pureemacs-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 因此,T

即使我打开pure
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
对缩进级别进行循环更改。这是我绝对不想做的。
如果使用
智能选项卡
问题可以解决。但是yasnippet
(yas全局模式1)
再次带来了它。
这就是我找不到原因的地方

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


最新的Emacs(24.3.50.1)

通过选项卡控制循环的一种方法是自定义
python缩进触发器命令。
变量状态的docstring

可能触发“python缩进行”调用的命令

但是,从docstring中不清楚变量是否可以 用于控制循环(实际上我甚至不确定是否设置此 变量(如果控制压痕循环的正确方法)。这个
python缩进行的docstring
更好地解释了这个变量的用途

当变量last command'等于其中一个符号时 python内部的缩进触发器命令或强制切换是 变量中指示的非零it周期水平 python通过在 变量“python缩进当前级别”

因此,可以使用
(setq python indent trigger commands nil)
(或者您可以从列表中删除
indent for tab command
)来禁用缩进循环。有 这种方法的一个小缺点是,您不能像下面那样使用制表符缩进代码 可以为
关闭
,如果
则关闭

for ..:
    if ..:
        ...
        break
else:
    ...
您将在
else
之前单击backspace以重新启用它,从而
关闭
(默认情况下,它将缩进,以便在
时关闭

这就是您要查找的吗<代码>(setq yas indent line nil)
“控制应用于最近代码段扩展的缩进。可以使用以下值:-“固定”将代码段缩进到当前列;-“自动”使用“根据模式缩进”将代码段的每一行缩进。每一个其他值表示在扩展后不应用任何代码段端索引(每行\“$>\”缩进的手册仍然适用)。“不,行仍在“跳跃”,这是
智能选项卡
吗?请尝试将
python缩进触发器命令
设置为零。@IqbalAnsari,看起来有帮助。