我偶然发现了这个片段,效果很好:https://gist.github.com/harthur/2951063
问题是,当我运行快捷方式片段时,它会破坏语法。它输入console.log()
内联,因此会破坏语法。
例如,我想控制日志变量hello
var hello = 'World';
好吧,上面链接的代码段会将其转换为:
var console.log(hello) = 'World';
这不是我想要的行为。我想要的是:
var hello = 'World';
console.log(hello);
现在,这看起来像一个多命令,开箱即用我不认为ST3支持键绑定中的多个命令。我已经查看了插件链的命令但是没有成功地让它输出我想要它的方式。任何人都知道解决方案吗?
答案 0 :(得分:2)
如果你留在Chain of Command,你可以将键绑定定义为一系列命令。
如果您不知道执行了哪些命令,请打开控制台ctrl+`
并编写sublime.log_commands(True)
以显示所有已执行的命令。
所以你如何归档你的行为:
{
"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"
}