热键在新行中选择文本和console.log

时间:2016-04-27 18:49:29

标签: sublimetext3 sublime-text-plugin

我偶然发现了这个片段,效果很好:https://gist.github.com/harthur/2951063

问题是,当我运行快捷方式片段时,它会破坏语法。它输入console.log()内联,因此会破坏语法。

例如,我想控制日志变量hello

var hello = 'World';

好吧,上面链接的代码段会将其转换为:

var console.log(hello) = 'World';

这不是我想要的行为。我想要的是:

var hello = 'World';
console.log(hello);

现在,这看起来像一个多命令,开箱即用我不认为ST3支持键绑定中的多个命令。我已经查看了插件链的命令但是没有成功地让它输出我想要它的方式。任何人都知道解决方案吗?

1 个答案:

答案 0 :(得分:2)

如果你留在Chain of Command,你可以将键绑定定义为一系列命令。 如果您不知道执行了哪些命令,请打开控制台ctrl+`并编写sublime.log_commands(True)以显示所有已执行的命令。

所以你如何归档你的行为:

  1. 复制当前选定的变量
  2. 转到行尾
  3. 将控制台日志片段插入下一行
  4. 粘贴复制的变量
  5. {
        "keys": ["super+shift+l"],
        "command": "chain",
        "args": {
            "commands": [
                ["copy"],
                ["move_to", {"to": "eol"}],
                ["move_to", {"to": "eol"}],
                ["insert_snippet", {"contents": "\nconsole.log(\"$1 = \" + $1);$0"}],
                ["paste"]
            ]
        },
        "context":
        [
            { "key": "selector", "operator": "equal", "operand": "source.js" },
            { "key": "selection_empty", "operator": "equal", "operand": false }
        ]
    },
    

    另一种方法是编写一个插件来在当前行下面创建一个日志命令。插件具有支持多个游标而不更改剪贴板的优点。按Tools >>> New Plugin...并写下:

    import itertools
    import sublime_plugin
    
    class LogVariableCommand(sublime_plugin.TextCommand):
        def run(self, edit):
            view = self.view
            for sel in view.sel():
                if sel.empty():
                    continue
                content = view.substr(sel)
                line = view.line(sel)
    
                # retrieve the current indent
                indent = "".join(itertools.takewhile(lambda c: c.isspace(),
                                                     view.substr(line)))
    
                view.insert(edit, line.end(),
                            "\n{0}console.log(\"{1} = \" + {1})"
                            .format(indent, content))
    

    分配键绑定用途:

    {
        "keys": ["super+shift+l"],
        "command": "log_variable"
    }