通过首选项和GUI定义的缩进

时间:2018-07-31 14:08:15

标签: sublimetext3 sublimetext2 sublimetext sublime-text-plugin

我试图了解通过"transtate_tabs_to_spaces"定义的ST的缩进与通过GUI(窗口的右下角)定义的缩进有何不同。

第1步。添加此首选项:

"draw_white_space": "all",
"translate_tabs_to_spaces": true,

第2步。确保具有以下条件:

enter image description here

不是这个:

enter image description here

步骤3.用单行在ST内创建新文件,然后按Ctrl-](在Windows上)。它将缩进4个空格-完全符合用户预期:

enter image description here

第4步。现在,关闭GUI中Indent Using Spaces前面的复选标记:

enter image description here

然后,重现步骤3。您将看到,尽管首选项中还有"translate_tabs_to_spaces": true,但文本是用制表符而不是空格缩进的。

enter image description here

因此,看起来ST有2种方式控制缩进-通过translate_tabs_to_spaces设置和GUI,并且GUI具有优先级。

  • 描述中的内容是否正确?

  • 有没有一种方法可以可靠地强制执行空格,而不会被GUI覆盖? (例如,可以在保存时使用expand_tabs命令,但是可能存在另一种方法来解决此问题?)

1 个答案:

答案 0 :(得分:1)

您的前提本质上是正确的,但是在幕后发生了您可能没想到的事情。

设置translate_tabs_to_spaces告诉Sublime,无论何时尝试插入文字制表符,它都应将制表符扩展到一定数量的空格,而空格数量应来自tab_size设置。

只有一个设置可以控制此设置,但是您在缩进菜单中看到的菜单项(通过状态行中的按钮或主要男人的View > Indentation中的菜单项)使用{{1} }命令。

例如,如果您在命令面板中使用toggle_setting来查看View Package File(状态栏中弹出的菜单定义),则菜单项中的第一个条目就是这个(重新格式化为此处不是长线):

Default/Indentation.sublime-menu

{ "command": "toggle_setting", "args": {"setting": "translate_tabs_to_spaces"}, "caption": "Indent Using Spaces", "checkbox": true }, 命令以toggle_setting特定的方式更改设置;也就是说,它会修改当前正在编辑的缓冲区中的设置,而不是实际的首选项文件中的设置。

如果咨询documentation on settings,则可以看到特定于缓冲区的设置是设置可能来自的地方的最后一项,这使它们优先于其他所有设置。特定于缓冲区的设置仅在打开文件后才会保留;如果您关闭文件然后重新打开,原始首选项将重新声明自己。

在上述两种情况下,您都可以通过使用 Ctrl +`view打开Sublime控制台并在集中两个文件的同时输入以下python命令来验证这一点:

View > Show Console

如果执行此操作,则会看到选中该复选框时,它返回view.settings().get("translate_tabs_to_spaces") ,未选中时返回True

通常来说,涉及False设置的最大问题是translate_tabs_to_spaces设置,除非您将其关闭,否则默认为detect_indentation

打开该设置后,每次加载文件时,Sublime都会自动运行与缩进菜单中的true命令关联的命令。这可能会导致您选择的缩进设置与预期的有所不同。

实际上,只要您没有使用菜单项有目的地更改设置,就可以按照适当的设置进行设置。

从理论上讲,可以使用一个简单的插件来更改该菜单项的功能,以便它可以全局切换设置,而不是仅在当前缓冲区中切换设置,但是在这种情况下,您加载的所有其他文件都会突然更改其设置,这可能更糟。