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

Sublimetext3 通过首选项和GUI定义的缩进,sublimetext3,sublimetext2,sublimetext,sublime-text-plugin,Sublimetext3,Sublimetext2,Sublimetext,Sublime Text Plugin,我试图理解通过“transtate\u tabs\u to\u spaces”定义的ST缩进与通过GUI(窗口右下角)定义的缩进有何不同 第一步。添加此首选项: "draw_white_space": "all", "translate_tabs_to_spaces": true, 第二步。确保您具有以下功能: 而不是这个: 第三步。使用单行在ST中创建新文件,然后按Ctrl-](在Windows上)。它将缩进4个空格-完全符合用户的预期: 第四步。现在,关闭GUI中使用空格缩进的前面的

我试图理解通过
“transtate\u tabs\u to\u spaces”
定义的ST缩进与通过GUI(窗口右下角)定义的缩进有何不同

第一步。添加此首选项:

"draw_white_space": "all",
"translate_tabs_to_spaces": true,
第二步。确保您具有以下功能:

而不是这个:

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

第四步。现在,关闭GUI中使用空格缩进的
前面的复选标记:

然后,重复步骤3。您将看到,尽管您的首选项中仍然有
“translate\u tabs\u to\u spaces”:true
,但该文本是用制表符缩进的,而不是空格

因此,ST似乎有两种控制缩进的方法——通过
将选项卡转换为空格
设置和通过GUI,GUI具有优先权

  • 我描述的一切都对吗

  • 有没有一种方法可以可靠地强制执行不会被GUI覆盖的空间?(例如,可以在保存时使用
    expand_tabs
    命令,但可能存在其他方法来处理此问题?)


你的前提基本上是正确的,但幕后发生了一些你可能没有预料到的事情

设置
translate\u tabs\u to\u spaces
告诉Sublime,无论何时尝试插入文字制表符,它都应该将制表符扩展到一定数量的空格,空格的数量来自
tab\u size
设置

只有一种设置可以控制这一点,但您在缩进菜单中看到的菜单项(从状态行中的按钮或主菜单中的
View>indentation
中)使用
toggle\u设置
命令

例如,如果使用命令选项板中的
查看软件包文件
来查看
默认/缩进.升华菜单
(状态栏中弹出的菜单定义),菜单项中的第一个条目就是这个条目(此处重新格式化为非长行):

{
“命令”:“切换设置”,
“args”:{“setting”:“translate_tabs_to_spaces”},
“标题”:“使用空格缩进”,
“复选框”:true
},
toggle_setting
命令以
视图
特定方式更改设置;也就是说,它修改当前正在编辑的缓冲区中的设置,但不修改实际首选项文件中的设置

如果查阅,可以看到特定于缓冲区的设置是设置可能来自的位置列表中的最后一项,这使它们优先于其他所有设置。特定于缓冲区的设置仅在文件打开时持续存在;如果关闭文件并重新打开它,原始首选项将重新声明自己

在上述两种情况下,您都可以通过使用Ctrl+`或
View>Show console
打开Sublime控制台,并在两个文件都处于焦点状态时输入以下python命令来验证这一点:

view.settings().get(“将选项卡转换为空格”)
如果执行此操作,您将看到选中复选框时返回
True
,未选中复选框时返回
False

一般来说,当涉及到
将制表符转换为空格
设置时,最大的问题向量是
检测缩进
设置,除非将其关闭,否则该设置默认为
true

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

实际上,只要您不使用菜单项故意更改设置,设置适当的设置后,它就会按照您想要的方式工作


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

对于进一步的读者:如果您打开console并启动
view.settings().get(“translate_tabs\u to_spaces”)
,您将在其中看到
True
False
(当然),但是如果您在插入符号仍在console输入框中时尝试启用/禁用复选标记,您将获得与第一次相同的输出。例如,如果您的第一个输出为
True
,则可以启用/禁用复选标记,但您将始终具有
True
。这是因为您实际上更改了console视图的复选标记,而不是主视图的复选标记。要获得正确的测试,请执行以下操作:1。在控制台中启动命令。请参阅当前输出(
True
),2。然后将插入符号放入文件中。启用/禁用复选标记,3。将插入符号放回控制台并重复该命令。您将看到,现在您有了不同的输出(
False
)——与它应该的完全一样。