Sublime Text在自动完成后输入空格

时间:2016-02-20 07:00:18

标签: sublimetext2 sublime-text-plugin

如何为HTML语言编写自定义键绑定或插件,以便在标记之后添加enter

示例

目前Sublime Text在自动完成时执行此操作

<table></table>

我想要这个

<table>

</table>

我希望你们能提供帮助。在此先感谢:)

1 个答案:

答案 0 :(得分:1)

这些代码段完成在HTML包中进行了硬编码。

我认为存档的最简单方法是自己编写一个简单的插件。要执行此操作,请打开User文件夹(或包的其他子文件夹)并创建python文件(例如html_complete_tag.py)。

然后打开python文件,只需粘贴以下代码:

import sublime, sublime_plugin
class HtmlCompleteTagCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        view = self.view
        view.run_command("commit_completion")
        for sel in view.sel():
            if not sel.empty(): continue
            pos = sel.begin()
            # check we are inside a tag
            if view.substr(sublime.Region(pos-1, pos+1)) == "><":
                # we have: <tag>|<tag/>
                # insert \n< one position after the cursor
                # => <tag>|<\n<tag/>
                view.insert(edit, pos+1, "\n<")
                # remove the char after the cursor
                # => <tag>|\n<tag/>
                view.replace(edit, sublime.Region(pos, pos+1), "")
                # insert a newline and a tab at the cursor
                # => <tag>\n\t|\n<tag/>
                view.insert(edit, pos, "\n\t")

这将提交完成,如果在标记内插入换行符。这些动作有点奇怪,因为我们希望在插入\n\t\n之后光标位于所需的位置。

要在html中使用键绑定,只需将以下行添加到键盘映射中:

{ "keys": ["tab"], "command": "html_complete_tag", "context":
    [
        { "key": "auto_complete_visible" },
        { "key": "selector", "operator": "equal", "operand": "text.html" }
    ]
},

如果您使用enter确认自动完成,请将tab替换为enter或保留两个键绑定。