Sublimetext2 如何使用升华文本片段复制所选内容 探索
在当前选择currHour时启用此选项: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>
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" } }