我试图了解通过"transtate_tabs_to_spaces"
定义的ST的缩进与通过GUI(窗口的右下角)定义的缩进有何不同。
第1步。添加此首选项:
"draw_white_space": "all",
"translate_tabs_to_spaces": true,
第2步。确保具有以下条件:
不是这个:
步骤3.用单行在ST内创建新文件,然后按Ctrl-]
(在Windows上)。它将缩进4个空格-完全符合用户预期:
第4步。现在,关闭GUI中Indent Using Spaces
前面的复选标记:
然后,重现步骤3。您将看到,尽管首选项中还有"translate_tabs_to_spaces": true
,但文本是用制表符而不是空格缩进的。
因此,看起来ST有2种方式控制缩进-通过translate_tabs_to_spaces
设置和GUI,并且GUI具有优先级。
描述中的内容是否正确?
有没有一种方法可以可靠地强制执行空格,而不会被GUI覆盖? (例如,可以在保存时使用expand_tabs
命令,但是可能存在另一种方法来解决此问题?)
答案 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
命令关联的命令。这可能会导致您选择的缩进设置与预期的有所不同。
实际上,只要您没有使用菜单项有目的地更改设置,就可以按照适当的设置进行设置。
从理论上讲,可以使用一个简单的插件来更改该菜单项的功能,以便它可以全局切换设置,而不是仅在当前缓冲区中切换设置,但是在这种情况下,您加载的所有其他文件都会突然更改其设置,这可能更糟。