如何在Sublime Text中修复/转换空格缩进?

243

例子:如果我有一个两个空格缩进的文档,并且我想要它有四个空格缩进,我应该如何使用Sublime Text编辑器自动转换?

11个回答

560

以下是在Sublime Text 2或3中将文档中的缩进空格转换的巧妙技巧。

TL;DR:

将2个空格转换为4个空格:

确保制表符宽度设置为2。将您的2个空格缩进转换为制表符,切换到制表符宽度4,然后将缩进转换回空格。

详细描述:

前往:

  • View -> Indentation

应该显示如下:

  • Indent using spaces [x]
  • Tab width: 2

选择:

  • Convert Indentation to Tabs

然后选择:

  • Tab width: 4
  • Convert Indentation to Spaces

完成。


5
谢谢! :D 节省了很多时间。注意:您还可以执行“查找:空格-空格=>全选=>制表符”。 - Automatico
11
我为Sublime创建了一个宏,可以为您完成所有这些操作:https://gist.github.com/joshmfrankel/5707020。享受吧 :-) - Josh Frankel
3
我想指出,“将缩进转换为空格”功能也适用于文本文件中制表符未占据整个制表位宽度的情况。比如,如果一个文件中作者使用制表符对列进行格式化,那么如果你在制表符上执行查找和替换,结果的列将不再对齐。使用“将缩进转换为空格”功能可以保持正确的对齐方式。 - Joe Pinsonault
在我看到Josh的宏之前,我还为一位同事创建了宏和示例键绑定。我的宏使用ctrl+2和ctrl+4来实现来回切换功能。你可以在这里找到详细信息:https://gist.github.com/beaugunderson/8588871 - Beau

75

我发现,让用户首选项像这样定义对我的心智健康更有好处:

"translate_tabs_to_spaces": true,
"tab_size": 2,
"indent_to_bracket": true,
"detect_indentation": false

detect_indentation: false的作用非常重要,因为它强制Sublime在每个文件中遵循这些设置,而不是遵循View -> Indentation的设置。

如果你想要更加高级的操作,你也可以通过在Sublime -> Preferences -> Key Binding - User中粘贴以下内容来定义一个快捷键以自动重新缩进你的代码(效果可能因人而异):

[
  { "keys": ["ctrl+i"], "command": "reindent" }
]

并可视化空格:

"indent_guide_options": ["draw_active"],
"trim_trailing_white_space_on_save": true,
"ensure_newline_at_eof_on_save": true,
"draw_white_space": "all",
"rulers": [120],

10
我发现,在我的脑海中,有一个比Magne更简单的解决方案:
在Mac上:
"cmd+f" => "  "(two spaces) => "alt+enter" => "arrow right" => "  "(two more spaces) => set tab width to 4(this can be done before or after.

在Windows或其他平台上,将cmd+falt+enter更改为您的查找全选快捷键。
注意:如果代码中有多个空格,则此方法容易出现“错误”。因此,它比Magne的方法不太安全,但对我来说更快。

我无法按照原来的方式使其工作,但是我使用了该原则,并执行了查找和替换操作(在Mac上是 cmd-option-F),将“ ”(4个空格)替换为“ ”(2个空格)。然后它就可以用了! - evanbikes
我现在找到了另一种方法,但它是语言特定的。如果你有像 RubyFormat 这样的格式化插件,那么你可以简单地设置所需的制表符大小,然后重新格式化代码。在 RubyFormat 的情况下,这将是 cmd+shift+R - Automatico

7

虽然很多建议适用于将2个空格转换为4个空格,但是当将4个空格转换为2个空格时,我遇到了一些问题。

这是我最终使用的内容:

Sublime Text 3/Packages/User/to-2.sublime-macro

[
  { "args": null, "command": "select_all" },
  { "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
  { "args": { "setting": "tab_size", "value": 1 }, "command": "set_setting" },
  { "args": { "set_translate_tabs": true }, "command": "expand_tabs" },
  { "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" }
]

7

我为此编写了一个插件。你可以在这里找到它,或者在包控制中搜索“ReIndent”。它主要与Kyle Finley编写的内容相同,但提供了方便的快捷键,在2和4之间进行转换。


1
这个插件是最棒的。 - Ben Southworth

5
如果您发现查找和替换更快捷,您可以使用类似于以下的正则表达式替换:
查找 (regex): (^|\G) {2} (这里为了清晰起见使用了" {2}" <space>{2} 的写法)
将其替换为4个空格或其他您想要的字符,如\t

2
你需要将以下代码添加到你的自定义按键绑定中:
{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }

通过按下ctrl+f12,它将重新对文件进行缩进,并将制表符大小设为4。如果您想要不同的制表符大小,只需更改“value”数字即可。格式是一个简单的JSON。

我喜欢它,谢谢!我像这样添加了2和4:{ "keys": ["ctrl+f10"], "command": "set_setting", "args": {"setting": "translate_tabs_to_spaces", "value": 2} }, { "keys": ["ctrl+f11"], "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }, - JREAM

1
我也按照Josh Frankel的建议创建了Sublime宏并添加了按键绑定。不同之处在于此脚本确保将间距首先设置为制表符,并将其设置为2个制表符大小。如果这不是起点,则宏将无法工作。
以下是宏的要点: https://gist.github.com/drivelous/aa8dc907de34efa3e462c65a96e05f09 在Mac上,使用宏+按键绑定的方法如下:
  1. 创建名为spaces2to4.sublime-macro的文件,并从要点中复制/粘贴代码。对我而言,该文件位于:

/Library/Application\ Support/Sublime\ Text\ 3/Packages/User/spaces2to4.sublime-macro

  1. 选择 Sublime Text > Preferences > Key Bindings
  2. 将此命令添加到用户指定的 sublime-keymap 中(它在一个数组中 - 可能为空):
{
    "keys": ["super+shift+o"],
    "command": "run_macro_file",
    "args": {
        "file":"Packages/User/spaces2to4.sublime-macro"
    }
}

现在,⌘ + shift + o 快捷键会自动将每个文件从2个空格缩进转换为4个空格缩进(但如果您继续运行它,它仍会保留缩进)。

0

使用IDLE -> 格式化,制表符或CTRL+F5

我无法在st中使它变得简单


0

我做的最简单的事情是,

将我的缩进改为制表符

这解决了我的问题。

你也可以按照自己的需要,

将其更改为空格

我在下面附上了相应的截图。

enter image description here


是的,但问题问的是在你的缩进既以空格开始又以空格结束的情况下。 - Magne

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