如何强制Sublime Text每个制表符缩进两个空格?

549

在使用Ruby文件时,有没有一种方法可以强制Sublime Text 2始终每个制表符缩进两个空格?

我知道可以在“视图->缩进”菜单选项下设置缩进,但它不会保留。每次我打开一个新文件并按Tab键时,它都会恢复到四个空格。


Sublime默认情况下略有不同/奇怪。尽管它可能会保存带有多个空格的文件,但如果它将其识别为缩进,则编辑器本身会删除这两个空格。 - Lime
6个回答

980
如果你想为所有文件设置,可以前往首选项->设置-默认/用户。但是如下面的评论所示,语法特定的设置可以将其限制为您选择的语言。
要将此配置限制为Ruby文件,请首先在编辑器中打开一个Ruby文件,然后转到首选项->设置-语法特定。这应该会打开一个名为Ruby.sublime-settings的设置窗口。
保存这些设置:
{
  "tab_size": 2,
  "translate_tabs_to_spaces": true,
  "detect_indentation": false
}

打开相应类型的文件,然后返回首选项打开该语法类型的正确首选项文件,以便针对任何其他语法类型进行重复操作。

我编辑了这个问题,加入了评论中请求的“detect_indentation”代码行; 我之前使用默认/用户来设置制表符大小,并且没有需要制表符检测,但是这是由于全局配置还是因为我很少打开带有制表符的文件,我不知道。

重新启动通常不必要,但在某些情况下可能需要重新启动。


12
自构建版本2181起,您可以从"首选项"->"设置"->"默认/用户"中配置设置。最好将其放在"用户设置"中,因为这是预期的方法。 - Kevin Jalbert
21
@KevinJalbert(以及 DGM),实际上他应该将其放置在特定于语法的设置中,这样它只会影响 Ruby 文件。 - Paul Hoffer
7
请注意,该值为 true 而不是 "true"。 - earthmeLon
1
这是特别有用的,因为Sublime Text官方网站的文档错误地建议在设置键中使用camelCase而不是下划线...仍然如此。(http://www.sublimetext.com/docs/indentation) - Eric G
@jbyrd 我可能是通过谷歌搜索找到的。他们应该更新旧文档页面并链接到版本2/3的文档,否则每次新发布后他们将会与自己的谷歌排名作斗争相当长一段时间。 - Eric G
显示剩余2条评论

173

如果您想强制使用所选选项卡设置,并忽略文件中可能已经存在的设置,则应该在配置中包含 detect_indentation (放置于用户设置或语法特定设置中,取决于您是希望全局还是每个文件类型):

{
    "tab_size": 2,
    "translate_tabs_to_spaces": true,
    "detect_indentation": false
}

谢谢你的提示!如果不关闭detect_indentation,我会得到非常奇怪的行为(它会错误地检测缩进并使用它而不是我在设置中指定的)。 - JacobEvelyn
在默认设置下进行此操作对我有效。确保您查看设置是否已存在。如果您添加它并且稍后声明为true,则它将保持为true。 - David
3
请注意,对默认设置的更改将被 Sublime Text 更新覆盖等。用户设置的更改则不会被覆盖。 - James Chevalier
6
"detect_indentation":false这个设置非常重要,否则其他设置都会被忽略。终于搞定了! - zzzeek
这是一个很好的观点,但你的示例缩进不当;-) - snow6oy

105
您还可以使用 Sublime Text 2 底部栏中的文本链接(默认在右侧)来完成此操作,该链接显示为“Tab Size 4”。单击该链接,会弹出一个窗口,其中包含设置制表符大小选项,从 1 个空格到 8 个空格不等,并包括将制表符转换为空格和将空格转换为制表符的选项。 如图所示: Sublime Text 2 中的制表符选项

5
好的提示,但你知道它是否会成为一个固定设置吗?例如,从顶部菜单栏更改缩进仅适用于当前打开的文件,而不是其他文件,这正是我最初的问题所在。 - Mohamad
7
这个无效。这是一个不错的提示,但它不稳定:关闭并重新打开文件(或打开另一个文件)会将缩进还原为四个空格。 - Mohamad
1
是的,它不是全局的,而是针对每个文件的。你需要进入Sublime Text的设置中来设置你的默认选项,包括tabs/spaces。 - Taskism
这解决了我在Sublime Text 3的问题。谢谢! - Adrian
是的,沿着状态栏,在右下角你会看到“Spaces: 2”或“Spaces: 4”,当你左键单击它时,会弹出一个选项窗口来设置缩进样式和制表符宽度。 - Sal
这对我来说实际上起作用了,但我认为原因是这个设置会覆盖首选项->设置。当我打开一个代码块(花括号)并按下回车键时,Sublime不会使用首选项来确定缩进的大小,而是使用此菜单中的设置。只有当我将首选项和此设置都更改为我想要的缩进大小时,我的新设置才会在所有会话和文件中被记住。 - undefined

37

我可以建议使用 EditorConfig 吗?有一个扩展可以自动加载并应用.editorconfig文件。然后只需要在项目的根目录创建一个.editorconfig文件即可。

.editorconfig

[*.rb]
indent_style = tab
indent_size = 2

如果你为每个项目或语言使用不同的样式,那么这种方式可以使你的设置与特定项目和文件相关联。


以下是我自己的.editorconfig的内容。

# editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

2
我不想让这成为一个全局性的更改,因此这是唯一有效的解决方案。我研究了一下 EditorConfig,它对于支持它的 IDE 看起来非常好。 - Neil Monroe
1
碰巧我在项目中已经有一个.editorconfig文件,而且我甚至不知道它的存在。(angular-cli会生成一个) - uglycoyote
1
这怎么不是最佳答案呢!? 正是我在寻找的。 谢谢! - Humberto Garza
我喜欢.editorconfig解决方案。它可以为每个文件和每个项目进行配置。您可以在整个团队中拥有一致的编码风格。 - Sal

10

我使用Stupid Indent插件。

安装插件 -> Stupid Indent

首选项 -> 插件设置 -> Stupid Indent -> 用户设置

复制Ruby部分的设置内容到此处。

{
    "configuration":
    [
        {
            "patterns": ["*.rb"],
            "tab_size": 2,
            "translate_tabs_to_spaces": true
        }
    ]
}

是的,这正是我需要的 :D - Dragutescu Alexandru
太棒了。非常感谢 :) - krithikaGopalakrishnan
警告。愚蠢的缩进默认和自定义设置会强制覆盖Sublime TextEditorConfig设置。谢谢。 - Саша Черных

1
我按照之前的答案进行操作,包括添加detect_indentation行,但我的制表符仍然是五个空格。后来我意识到,在从一个Ruby文件中选择“Preferences -> Settings -> More -> Syntax Specific -> User”时,为我打开了“Ruby on Rails.sublime-settings”,而不是“Ruby.sublime-settings”。
我将我的“Ruby on Rails.sublime-settings”文件重命名为“Ruby.sublime-settings”。最终,两个空格的制表符起作用了!我继续在“Ruby on Rails.sublime-settings”中放置相同的设置,以确保一致。

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