3

追求

转动它(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);

等等


情况

现在,通过遵循这个答案,我能够生成第二行:

<snippet>
  <content>
    <![CDATA[console.log('$SELECTION=' + $SELECTION);]]> </content>
  <description>Print selection to console.log</description>
</snippet>

注意:我的片段代码省略<scope>了,因为片段文件的位置隐含了范围(在特定于语言的目录 - JavaScript 下)。

NB2:<tabTrigger>片段中的设置是故意省略的,因为我将使用键盘快捷键:

{ "keys": ["ctrl+shift+o"], "command": "insert_snippet", "args": { "name": "Packages/User/JavaScript/console-log-selection.sublime-snippet" } },

好吧,这让我走到了一半……


问题

当前的“解决方案”要求我在调用代码段之前手动复制选择。如果可以的话,这是一个不方便的步骤,我想跳过。那么,有没有办法让片段将选择复制到新行中

4

4 回答 4

1

我对片段不是很好,所以可能还有另一种方法。无论如何,您可以使用插件来完成。

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*)(var\s+)?(\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 语句if match:并将其替换为var_text = view.substr(cursor)

于 2013-10-19T20:50:13.293 回答
0

在这两种情况下,宏都会做你想做的事:

保存在

~/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" } }

无论您突出显示什么,都将是宏中的变量。

于 2013-10-20T16:19:29.860 回答
0

您好,我使用所选答案中的代码来创建

它支持多项选择并放置正确的标识。它也不必是“var foo =”行

于 2014-01-07T23:57:09.957 回答
0

通过将类似的代码段与宏结合起来,您基本上可以完成您想要的事情。

片段:

<snippet>
  <content><![CDATA[
${TM_CURRENT_LINE/var *(.+?) *=.+/\nconsole.log\('$1=' + $1\);/}
]]> 
    </content>
  <description>Print selection to console.log</description>
</snippet>

该片段根据当前行计算出变量名称,并使用该变量格式化 console.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" } 
},

如果变量赋值行已经存在,这似乎是插入日志行的最佳方法。

于 2013-10-20T01:46:16.083 回答