Sublimetext2 如何使用升华文本片段复制所选内容 探索

Sublimetext2 如何使用升华文本片段复制所选内容 探索,sublimetext2,sublimetext,Sublimetext2,Sublimetext,在当前选择currHour时启用此选项: var currHour = now.getHours(); 为此: var currHour = now.getHours(); console.log('currHour=' + currHour); 也适用于以下情况: currHour = now.getHours(); -> 其中选择了b: a = b; -> 等等 形势 现在,通过以下步骤,我能够生产出第二行: <snippet> <content>

在当前选择currHour时启用此选项:

var currHour = now.getHours();
为此:

var currHour = now.getHours();
console.log('currHour=' + currHour);
也适用于以下情况:

currHour = now.getHours();
->

其中选择了b:

a = b;
->

等等

形势 现在,通过以下步骤,我能够生产出第二行:

<snippet>
  <content>
    <![CDATA[console.log('$SELECTION=' + $SELECTION);]]> </content>
  <description>Print selection to console.log</description>
</snippet>
好吧,我已经走了一半了

问题 当前的解决方案要求我手动复制选择,然后才能调用代码段。如果可以的话,我想跳过这一步。
那么,有没有办法让snippet将所选内容复制到新行中?

我对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*)(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))
您只需要将光标放在赋值操作的行上。将密钥绑定绑定到控制台日志。您可以根据需要更改名称。只需确保您也更改了text命令的名称

您还可以修改代码段,这样就不必先键入文本。键入变量名,选择它,然后按代码段键似乎不直观。像这样的事情可能会更好

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

我还修改了插件,因此如果没有选择任何内容,它应该自动使用变量赋值。如果选择了某个内容,它将使用控制台日志中选定的文本。如果不需要空的选择内容,只需删除If match:下的If语句,并将其替换为var_text=view.substructor或

通过将类似的代码段与宏组合,基本上可以实现所需的功能

片段:

宏使用现有命令move_to在插入代码段之前到达行的末尾。这允许您在线路上的任何位置运行命令

最后,捷径:


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

在这两种情况下,宏都可以执行您想要的操作:

保存在

~/Library/Application Support/Sublime Text 2/Packages/User/saran_macro.Sublime-macro

将此添加到您的密钥绑定:

{ "keys": ["ctrl+shift+i"], "command": "run_macro_file", "args": { "file": "Packages/User/saran_macro.sublime-macro" } }

突出显示的内容将是宏中的变量。

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


它支持多个选择并输入正确的标识。此外,它不必是一个var foo=line,这是一个很好的宏技巧,但它并没有按预期工作。您的解决方案是一个过度的解决方案,与所有超出需要的解决方案一样,它只在以下情况下起作用:行以var开头,然后解析名称并使用该名称创建console.log。。。。该解决方案限制太大,例如,如果没有var,它只复制行。该问题清楚地描述了解决方案的要求-复制选择。如果你纠正你的答案,使之按预期工作,我会接受的。尽管如此,还是要感谢您的努力。从插件的快速查看和实际测试来看,它似乎依赖于与@kbaskett248的答案相同的机制regex。当在前一行中声明变量时,该解决方案失败。@kbaskett248的答案以前不存在。除此之外,事实并非如此。变量在正则表达式中是可选的。尽管您可能会修改@kbaskett248答案中的代码片段以获得相同的效果。感谢@skuroda对其进行扩展。我编辑了你的答案,因为它缺少一个导入re。呜呜,我进去添加了导入升华,但仍然忘记了re。那太尴尬了。事实上,我对逻辑做了一点改变->现在它很完美;选择路径现在不会缩进新行,但如果没有匹配项,至少不会中断。我已经更新了你的答案,希望你不介意。看起来很有希望。我会试试看。是否可以制作不接触/覆盖当前剪贴板内容的变体?欢迎使用堆栈溢出!如果你能添加更多的链接到另一个页面,这个答案可能会得到改进。仅链接答案的问题在于,随着时间的推移,它们往往变得无效。如果您能想出改进答案的方法,请单击“编辑”。
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))
<snippet>
  <content>
    <![CDATA[console.log('$1 =' + $1);$2]]> </content>
  <description>Print selection to console.log</description>
</snippet>
var foo = bar
console.log('foo = ' + foo)

foo = bar
console.log('foo = ' + foo)
<snippet>
  <content><![CDATA[
${TM_CURRENT_LINE/var *(.+?) *=.+/\nconsole.log\('$1=' + $1\);/}
]]> 
    </content>
  <description>Print selection to console.log</description>
</snippet>
[
    {"command": "move_to",          "args": {"to": "hardeol", "extend": false}},
    {"command": "insert_snippet",   "args": {"name": "Packages/User/console-log-selection.sublime-snippet"}}
]
{ "keys": ["ctrl+shift+o"], 
  "command": "run_macro_file", 
  "args": { "file": "Packages/User/console-log-selection.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" } }