The Quest
转动这个(currHour
是当前选择):
var currHour = now.getHours();
进入这个:
var currHour = now.getHours();
console.log('currHour=' + currHour);
也应该适用于以下情况:
currHour = now.getHours();
-->
currHour = now.getHours();
console.log('currHour=' + currHour);
和(选择b
):
a = b;
-->
a = b;
console.log('b=' + b);
等。
A. 情况
现在,通过遵循这个答案,我能够产生第二行,如下所示:
<snippet>
<content>
<![CDATA[console.log('$SELECTION=' + $SELECTION);]]> </content>
<description>Print selection to console.log</description>
</snippet>
注意:我的代码片段代码省略了<scope>
因为代码片段文件的位置暗示了范围(在特定于语言的目录 - JavaScript 下)。
注意2:代码段中的<tabTrigger>
设置被故意省略,因为我将使用键盘快捷键:
{ "keys": ["ctrl+shift+o"], "command": "insert_snippet", "args": { "name": "Packages/User/JavaScript/console-log-selection.sublime-snippet" } },
好了,这就把我带到了一半...
问题所在
当前的"解决方案"要求我在调用代码段之前手动复制选择。如果可以的话,这是一个不方便的步骤,我想跳过。那么,有没有办法让代码段将选择复制到新行中?
我不擅长片段,所以可能有另一种方法。无论如何,您可以使用插件来完成。
import re
import sublime
import sublime_plugin
class ConsoleLog(sublime_plugin.TextCommand):
def run(self, edit):
view = self.view
cursor = view.sel()[0]
line_region = view.line(cursor)
string = view.substr(line_region)
match = re.search(r"(s*)(vars+)?(w+)s*=", string)
if match:
if cursor.empty():
var_text = match.group(3)
else:
var_text = view.substr(cursor)
view.insert(edit, line_region.end(), "n%sconsole.log('%s = ' + %s);" % (match.group(1), var_text, var_text))
end = view.line(line_region.end() + 1).end()
view.sel().clear()
view.sel().add(sublime.Region(end, end))
您只需要将光标放在分配操作的行上即可。将密钥绑定到console_log
。您可以根据需要更改名称。只需确保也更改文本命令的名称即可。
您还可以修改代码段,这样就不必先键入文本。输入变量名称,选择它,然后点击您的代码段键似乎不直观。这样的东西可能会更好用。
<snippet>
<content>
<![CDATA[console.log('$1 =' + $1);$2]]> </content>
<description>Print selection to console.log</description>
</snippet>
编辑:
我使用该插件生成 console.logs,光标位于包含 var foo = bar
和 foo = bar
的行上。也就是说,它是插件命令的两次调用。尽管您也可以修改它以处理多个游标。
var foo = bar
console.log('foo = ' + foo)
foo = bar
console.log('foo = ' + foo)
我还修改了插件,因此如果未选择任何内容,它应该自动使用变量赋值。如果选择了某些内容,它将使用控制台日志中的选定文本。如果您不想要空的选择内容,只需删除 if match:
下的 if 语句并将其替换为 var_text = view.substr(cursor)
类似的代码片段与宏组合来基本完成您想要的。
代码段:
<snippet>
<content><![CDATA[
${TM_CURRENT_LINE/var *(.+?) *=.+/nconsole.log('$1=' + $1);/}
]]>
</content>
<description>Print selection to console.log</description>
</snippet>
该代码段根据当前行计算出变量名称,并使用该变量设置控制台.log行的格式。
宏:
[
{"command": "move_to", "args": {"to": "hardeol", "extend": false}},
{"command": "insert_snippet", "args": {"name": "Packages/User/console-log-selection.sublime-snippet"}}
]
该宏使用现有命令(move_to)在插入代码段之前到达行尾。这允许您从行上的任何位置运行命令。
最后,快捷方式:
{ "keys": ["ctrl+shift+o"],
"command": "run_macro_file",
"args": { "file": "Packages/User/console-log-selection.sublime-macro" }
},
如果变量分配行已存在,这似乎是插入日志行的最佳方法。
这两种情况下,宏都会做你想做的事:
将其保存在
~/Library/Application Support/Sublime Text 2/Packages/User/saran_macro.sublime-macro
[
{"command": "copy"},
{"command": "move_to", "args": {"to": "hardeol", "extend": false}},
{"command": "insert", "args": {"characters": "nconsole.log('"}},
{"command": "paste"},
{"command": "insert", "args": {"characters": "=' + "}},
{"command": "paste"},
{"command": "insert", "args": {"characters":");"}}
]
将此添加到您的键绑定中:
{ "keys": ["ctrl+shift+i"], "command": "run_macro_file", "args": { "file": "Packages/User/saran_macro.sublime-macro" } }
突出显示的任何内容都将是宏中的变量。
你好,我使用了所选答案中的代码来创建这个。
它支持多项选择并放置正确的缩进。此外,它不必是"var foo ="行