通过首选项和 GUI 定义的缩进
Indentation defined via preferences and via GUI
我想了解通过 "transtate_tabs_to_spaces"
定义的 ST 缩进与通过 GUI(window 右下角)定义的缩进有何不同。
第 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
命令,但可能存在其他方法来处理此问题?)
你的前提基本上是正确的,但幕后发生了一些你可能没有预料到的事情。
设置 translate_tabs_to_spaces
告诉 Sublime,每当任何东西试图插入文字制表符时,它都应该将制表符扩展到一定数量的空格,而空格的数量来自 tab_size
设置。
只有一个设置可以控制它,但是您在缩进菜单中看到的菜单项(来自状态行中的按钮或主菜单中的 View > Indentation
)使用 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
命令以 view
特定方式更改设置;也就是说,它会修改您当前正在编辑的缓冲区中的设置,但不会修改您实际的首选项文件中的设置。
如果您查阅 documentation on settings,您会发现特定于缓冲区的设置是潜在设置来源列表中的最后一项,这使得它们优先于其他所有设置。特定于缓冲区的设置仅在您打开文件时保留;如果您关闭文件并重新打开它,原始首选项将重新生效。
您可以通过使用 Ctrl+` 或 View > Show Console
打开 Sublime 控制台并输入以下 python 命令来验证上述两种情况你有两个文件中的每一个:
view.settings().get("translate_tabs_to_spaces")
如果你这样做,你会看到它 returns True
当复选框被选中时 False
当它没有被选中时。
一般来说,translate_tabs_to_spaces
设置的最大问题是 detect_indentation
设置,除非您将其关闭,否则默认为 true
。
启用该设置后,每次加载文件时,Sublime 都会自动运行与缩进菜单中的 Guess Settings From Buffer
命令关联的命令。这可能会导致您选择的缩进设置与您的预期有所不同。
实际上,设置了适当的设置后,只要您不使用菜单项故意更改设置,它就会按照您想要的方式工作。
理论上,可以使用一个简单的插件来改变该菜单项的功能,以便它可以全局切换设置,而不是仅在当前缓冲区中切换,但在那种情况下,您加载的所有其他文件都会突然拥有它设置改变了,这可以说更糟了。
我想了解通过 "transtate_tabs_to_spaces"
定义的 ST 缩进与通过 GUI(window 右下角)定义的缩进有何不同。
第 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
命令,但可能存在其他方法来处理此问题?)
你的前提基本上是正确的,但幕后发生了一些你可能没有预料到的事情。
设置 translate_tabs_to_spaces
告诉 Sublime,每当任何东西试图插入文字制表符时,它都应该将制表符扩展到一定数量的空格,而空格的数量来自 tab_size
设置。
只有一个设置可以控制它,但是您在缩进菜单中看到的菜单项(来自状态行中的按钮或主菜单中的 View > Indentation
)使用 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
命令以 view
特定方式更改设置;也就是说,它会修改您当前正在编辑的缓冲区中的设置,但不会修改您实际的首选项文件中的设置。
如果您查阅 documentation on settings,您会发现特定于缓冲区的设置是潜在设置来源列表中的最后一项,这使得它们优先于其他所有设置。特定于缓冲区的设置仅在您打开文件时保留;如果您关闭文件并重新打开它,原始首选项将重新生效。
您可以通过使用 Ctrl+` 或 View > Show Console
打开 Sublime 控制台并输入以下 python 命令来验证上述两种情况你有两个文件中的每一个:
view.settings().get("translate_tabs_to_spaces")
如果你这样做,你会看到它 returns True
当复选框被选中时 False
当它没有被选中时。
一般来说,translate_tabs_to_spaces
设置的最大问题是 detect_indentation
设置,除非您将其关闭,否则默认为 true
。
启用该设置后,每次加载文件时,Sublime 都会自动运行与缩进菜单中的 Guess Settings From Buffer
命令关联的命令。这可能会导致您选择的缩进设置与您的预期有所不同。
实际上,设置了适当的设置后,只要您不使用菜单项故意更改设置,它就会按照您想要的方式工作。
理论上,可以使用一个简单的插件来改变该菜单项的功能,以便它可以全局切换设置,而不是仅在当前缓冲区中切换,但在那种情况下,您加载的所有其他文件都会突然拥有它设置改变了,这可以说更糟了。