Sublimetext3 如何阻止升华文本被多个制表位缩进?

Sublimetext3 如何阻止升华文本被多个制表位缩进?,sublimetext3,sublimetext,Sublimetext3,Sublimetext,当我在Sublime text中有一个缩进的文本块,并且下面有空行时,按tab键将缩进到该块的级别 每次它发生的时候,我都会感到惊讶,所以我想把它关掉。我想手动缩进一个空行到所需的水平。目前,我经常需要点击tab一次,然后点击backspace几次,这取决于前面方法的嵌套深度 到目前为止,我已经尝试将自动缩进设置为false。这确实阻止了这种行为。。。以及与自动缩进相关的所有其他内容。我想要更有针对性的东西 我还尝试将smart\u indent设置为false。到目前为止,这在我尝试的案例中没

当我在Sublime text中有一个缩进的文本块,并且下面有空行时,按tab键将缩进到该块的级别

每次它发生的时候,我都会感到惊讶,所以我想把它关掉。我想手动缩进一个空行到所需的水平。目前,我经常需要点击tab一次,然后点击backspace几次,这取决于前面方法的嵌套深度

到目前为止,我已经尝试将
自动缩进设置为
false
。这确实阻止了这种行为。。。以及与自动缩进相关的所有其他内容。我想要更有针对性的东西

我还尝试将
smart\u indent
设置为
false
。到目前为止,这在我尝试的案例中没有效果;它仍然缩进多个制表位

试着整理一个案例。代码的质量不重要,只重要几何图形

class MyAwesomeClass:

    def my_okay_method(self):
        print(self)  # point A

# point B
假装这些评论不存在,它们只是供参考

如果我想增加我的_-ok_方法的行为,我会将光标放在点A的直线末端,然后按“enter”键。我希望我的光标会出现在下一个新添加的行上,该行应该缩进8个空格。为清晰起见进行编辑:请注意,此行为源于默认值为
true的
trim\u automatic\u white\u space
auto\u indent
。如果你按回车键,由于某种原因,你的光标没有缩进,那么奇怪的事情就发生了


如果我想向MyAwesomeClass添加一个新方法,我会将光标放在B点之前,添加一些空行,然后在空行上按“tab”,在a点下方的两行。我希望该空行按默认的tabstop缩进(通常是4个空格),而不是在我的方法的范围内。(当涉及循环或条件时,这会变得非常糟糕,因为它会进入方法中的最后一个。)

我创建了以下keymap,并将其保存到User/Default.sublime-keymap。到目前为止,它似乎在我想要的地方工作

编辑:我将其更改为专门禁用默认键映射中的相关映射

[
    { "keys": ["tab"], "command": "insert", "args": {"characters": "\t"}, "context":
        [
            { "key": "setting.auto_indent", "operator": "equal", "operand": true },
            { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
            { "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
            { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
        ]
    }
]

我创建了以下keymap,并将其保存到User/Default.sublime-keymap。到目前为止,它似乎在我想要的地方工作

编辑:我将其更改为专门禁用默认键映射中的相关映射

[
    { "keys": ["tab"], "command": "insert", "args": {"characters": "\t"}, "context":
        [
            { "key": "setting.auto_indent", "operator": "equal", "operand": true },
            { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
            { "key": "preceding_text", "operator": "regex_match", "operand": "^$", "match_all": true },
            { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }
        ]
    }
]

你能详细地定义你想要应用的规则吗?你能不能尽可能多地涵盖案例。我不清楚您希望如何区分您希望应用“匹配最后一行”缩进的新行(创建时为空)和希望应用所需行为的行。如果你能清楚地列出规则,也许我们能帮你做得更好。目前,我在描绘一组基本上不会破坏智能缩进的规则时遇到困难。@jwpfox我希望在非空白字符后的缩进行中单击换行符时应用规则(如果它只有空白字符,我不知道会发生什么)。当我点击空行上的制表符时,我只希望对前面没有缩进块的行应用默认逻辑(缩进到第一个制表位,然后缩进到第二个制表位,等等)。我将试着列举一些例子。因此,我们可以简化您正在寻找的规则,即“如果中间的前一行仅包含空格字符,则不在当前行上应用智能缩进(实际上是一个“空”行)”。这是你想要应用的规则的公平总结吗?一、 就个人而言,我认为这是一个糟糕的想法,原因有很多,但既然你要把它强加给你自己,而不是我,我的意见就无关紧要了。我是否正确理解了您想要的规则?@jwpfox发生了两件事:一是,我不确定禁用智能缩进是否会改变任何事情。全球禁用没有帮助我。此外,我的工作流程中有一些偶然的属性,我不知道我有多在乎,所以我需要更多地考虑我到底想要什么。这就是说,现在我很好奇:为什么让tab在一个多缩进块后面的空行上的行为不同于所有其他情况,这是一件明智的事情?我可以想出适合这个的心智模型,但我不喜欢它们。也许有更好的吗?@jwpfox我刚和SO以外的人讨论过这个问题,他指出目前的行为非常合理。。。在每种不使用Python风格缩进的语言中。所以,无论有什么解决方案,我想它都需要在每种语言的基础上进行设置。你能详细定义你想要应用的规则吗,涵盖尽可能多的情况。我不清楚您希望如何区分您希望应用“匹配最后一行”缩进的新行(创建时为空)和希望应用所需行为的行。如果你能清楚地列出规则,也许我们能帮你做得更好。目前,我在描绘一组基本上不会破坏智能缩进的规则时遇到困难。@jwpfox我希望在非空白字符后的缩进行中单击换行符时应用规则(如果它只有空白字符,我不知道会发生什么)。当我点击空行上的制表符时,我只希望对前面没有缩进块的行应用默认逻辑(缩进到第一个制表位,然后缩进到第二个制表位,等等)。我将试着列举一些例子。因此,我们可以简化您正在寻找的规则,即“如果中间的前一行仅包含空格字符,则不在当前行上应用智能缩进(实际上是一个“空”行)”。这是你想要应用的规则的公平总结吗?一、 我个人认为这是一个糟糕的想法,原因有很多,但既然你打算