Sublime Text 3按Tab键时删除代码

51

当我在 Sublime Text 3 中选择一段代码块,按 Tab 键时,它不再像以前那样缩进整个块。相反,它会删除选中的代码。

有人知道如何解决这个问题吗?


你在它之前和现在之间更改了任何设置吗?可能的原因包括更改您的首选项、修改关键绑定或创建新的分配给“Tab”的宏。 - MattDMo
9个回答

194

这是一个简单的Alt+Tab(Cmd+Tab)问题

我发现当我错过了“购买此软件”对话框并没有取消它时,就会出现这个问题。

使用Alt-Tab(或Mac上的Cmd-Tab)检查是否有等待响应的对话框窗口,并将其关闭。这将解决这个问题。

正如其他人所提到的,重新启动Sublime也会解决这个问题,因为它实质上是取消了对话框。


1
哈哈,这对我来说有效。也许这是他们给我们购买的微妙激励方式 :) - Ben
12
这才是真正的问题,应该被认可作为答案。 - Noah Gary
4
当您在Sublime Text的另一个窗口中打开“打开文件”对话框时,也会出现这种情况。请注意。 - fedterzi
这对我也解决了问题。TAB键的行为非常奇怪,它会删除文本块,额外缩进一些缩进。 - ti66
2
哇...谢谢你。这个 bug 困扰我多年了,直到现在我才开始搜索它。 - Trey Tyler
显示剩余3条评论

34

对于从谷歌搜索而来的其他人,请先阅读以下内容:

SublimeText 2(也适用于3)今天突然开始这样做,而没有更改任何设置。我所需要做的就是重新启动程序,它就自行解决了。


同样适用于Sublime Text 3。 - Mr_Chimp
我也是...刚刚重启了。 - terrance.a.snyder
它在重新启动后确实会自修复,但问题会在一段时间后再次出现。当这种情况发生时,它还会添加无法显示的不可见字符,这通常会破坏我的 asp 页面,因为运行时它们会抛出无效字符错误。 - JohnCambell

14

这是Sublime Text的默认行为。如果您选择多行,它会缩进,但如果您选择单行(选择不包含\n),它将运行insert_best_completion命令并删除选择内容。

修复方法:

在您的用户.sublime-keymap中添加以下内容:

{ "keys": ["tab"], "command": "indent", "context":
    [
        { "key": "text", "operator": "regex_contains", "operand": "." }
    ]
},

这将使您的制表键始终缩进。如果您已设置在Tab键上进行自动完成,不确定是否会产生冲突。

对于使用shift+tab取消缩进也是同样的道理:

{ "keys": ["shift+tab"], "command": "unindent", "context":
    [
        { "key": "text", "operator": "regex_contains", "operand": "." }
    ]
},

太好了!我也在寻找这个功能,即使对我来说,在块上按Tab键什么都没发生。 - jmoreira
你能否演示如何使用Shift-Tab来取消缩进单行? - SHernandez
谢谢,对于初学者非常有帮助 :) - SHernandez
我知道被选中的答案解决了OP的问题,但如果这个问题有第二个答案,那么这就是它! - Code Doggo

3

与Dom的答案类似,当Sublime升级消息出现但未处于焦点时,也会发生这种情况。我还发现,如果你在另一个显示器上启用Sublime,那么升级消息也会出现在屏幕外。

唯一的解决方法似乎是重新启动Sublime。这也会重新居中对话框。


你的帖子没有提到解决问题。 - Raju
那就是我的问题,谢谢你的建议。我花了10分钟弄清楚了我的键盘出了什么问题 :D - Playdome.io
1
我曾经遇到过这个问题,就像@shoo所说的那样...购买对话框在应用程序后面打开了。一旦我关闭了升级对话框,Tab键就又可以使用了。非常奇怪。 - Scott
"...当sublime的升级消息出现并且没有焦点时,这也会发生。" - 是的!这让我抓狂。为什么这在2017年仍然是个问题... - Beepye

1
这也发生在我身上,是因为我的所选文本看起来像是一个块,但实际上是一行被换行的文本。默认情况下,ST3会用tab字符替换单个选定的行。
对我来说,更方便的是对选择进行缩进/取消缩进,无论它们是否多行,因此我将以下内容添加到我的用户特定的sublime-keymap文件中。
{ "keys": ["tab"], "command": "indent", "context":
  [
    { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true },
  ]
}

1
我在点击“tab”并检查底部状态栏时发现了问题,它应该告诉你为什么会发生这种情况。
在找到相关的软件包后,我只是:
  • 删除了导致问题的 Emmet Style Refloctor 软件包(而不是 Sublime Text 本身)
  • 重新启动了 Sublime Text
现在它运行良好。

1
对我来说,它只是“Emmet”,而不是“Style reflector” :) 但感谢您让我开始。 - trainoasis

0

您可以检查以下可能导致此问题的点:

  • 您可能有Sublime许可证弹出窗口在后台打开。只需关闭它。
  • 您的键盘上任何一个键都被按下,您可以通过从开始菜单中打开“屏幕键盘”来进行检查。(如果有任何键被按下,它将显示高亮的键。)

0
这是因为出现了“您想购买/更新”的弹出窗口。如果您没有看到它,请在操作系统任务栏中单击Sublime Text,然后关闭它。另一个常见问题是滚动被禁用。

0

我也遇到了同样的问题。只需转到首选项 -> 键绑定,然后在用户(右侧)键绑定中添加以下内容:

[
     { "keys": ["tab"], "command": "indent" },      
     { "keys": ["shift+tab"], "command": "unindent" },
]

然后重新启动Sublime,它应该可以正常工作了!

注意:这会破坏标签自动补全功能,但是复制标签的默认设置即可解决此问题。另外,如果您使用enter键,也可以正常工作。祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接