Sublime Text 3手动插入制表符

时间:2017-08-09 10:14:26

标签: tabs sublimetext3 sublimetext2 sublimetext sublime-text-plugin

使用Sublime Text 3时,我的大多数文件都设置为使用空格缩进。但是我有时希望插入一个文字标签。当我使用vim时,我会使用< Ctrl> + v< Tab>但这不适用于Sublime Text 3。

我一直在搜索和搜索,找不到任何东西。请帮忙!

1 个答案:

答案 0 :(得分:7)

Shift + Tab 的默认键绑定将原始制表符插入到文档中,尽管在某些上下文情况下(例如展开片段时),它会采用其他函数。

但是,Indent Using Spaces由以下设置控制:

// Set to true to insert spaces when tab is pressed
"translate_tabs_to_spaces": false,

如此处所示默认为false,但是当您启用Indent using spaces时,它会设置为true。正如评论所暗示的,当此设置设置为true时,任何插入原始制表符的尝试都会转换为某些空格。

因此,在这种情况下,即使是官方密钥绑定也不会插入原始选项卡。

根据您插入文字标签的频率,您可以通过暂时打开和关闭该设置来解决此问题,但这远非理想,即使从状态栏中的菜单切换设置也是如此。 / p>

由于Sublime是如此可定制的,我们可以将其自动化为我们做这项工作。

首先,创建一个包含以下内容的文件,并将其作为User保存在literal_tab.sublime-macro包中(如果您要Preferences > Browse Packages...,请使用User包不知道它在哪里):

[
    { "command": "toggle_setting", "args": { "setting": "translate_tabs_to_spaces" } },
    { "command": "insert", "args": { "characters": "\t" } },
    { "command": "toggle_setting", "args": { "setting": "translate_tabs_to_spaces" } }
]

然后,将以下两个键绑定添加到用户绑定中(Preferences > Key Bindings在菜单中;如果有多个选项,请选择User而不是Default):

{ 
    "keys": ["ctrl+k","tab"], 
    "command": "insert", 
    "args": {
        "characters": "\t"
    },
    "context":
    [
        { "key": "setting.translate_tabs_to_spaces", "operator": "equal", "operand": false }
    ]
},

{ 
    "keys": ["ctrl+k","tab"], 
    "command": "run_macro_file", 
    "args": {
        "file": "Packages/User/literal_tab.sublime-macro"
    },
    "context":
    [
        { "key": "setting.translate_tabs_to_spaces", "operator": "equal", "operand": true }
    ]
}    

两个绑定都包含一个上下文,使其根据translate_tabs_to_spaces设置的值触发或不触发,因此在任何给定时间,其中只有一个实际生效,另一个自动禁用。 / p>

第一个绑定适用于关闭设置的情况,在这种情况下,只需插入制表符即可完成。第二种情况是从上面运行我们的自定义宏,它关闭设置,插入选项卡,然后再次打开设置。

理论上,如果你总是打开缩进设置,你真的只需要第二个,但由于最小惊喜原则,不管设置如何,将它设置为工作都是个好主意。

当然你可以使用你想要的任何键击(我也习惯了这个来自vim),并且宏文件的名称无关紧要,只要它具有正确的扩展名并且它与绑定尝试执行。

注意:虽然你在问题中提到了Sublime Text 3,但你也标记了Sublime Text 2,所以为了完整性,我还要注意这里提供的信息和解决方案同样适用于两个版本