Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 如何在ST3宏中使用条件/上下文?_Macros_Sublimetext3_Sublimetext - Fatal编程技术网

Macros 如何在ST3宏中使用条件/上下文?

Macros 如何在ST3宏中使用条件/上下文?,macros,sublimetext3,sublimetext,Macros,Sublimetext3,Sublimetext,我试图修改Ctrl+Enter宏,以便在写换行之前在行尾追加分号,类似于。 基本解决方案非常简单 [ {"command": "move_to", "args": {"to": "hardeol"}}, {"command": "insert", "args": {"characters": ";\n"}} ] 然而,它有两个问题: 1)如果eol处已经有分号,则将复制该分号。有没有一种方法可以包含(前面的_text==“;”)类似于键绑定的条件 { "key": "prec

我试图修改Ctrl+Enter宏,以便在写换行之前在行尾追加分号,类似于。 基本解决方案非常简单

[
    {"command": "move_to", "args": {"to": "hardeol"}},
    {"command": "insert", "args": {"characters": ";\n"}}
]
然而,它有两个问题:


1)如果eol处已经有分号,则将复制该分号。有没有一种方法可以包含(前面的_text==“;”)类似于键绑定的条件

{ "key": "preceding_text", "operator": "regex_match", "operand": ";$" } 
让宏运行两个不同的insert命令中的一个,具体取决于此



2)实际上,该插件独立于语言运行,例如在html中插入分号。同样,是否有一种方法可以根据作用域的不同选择插入分号?

我发现了一个很好的解决方法。我仍然不知道是否可以在宏本身中添加此类条件,但可以通过在键绑定中添加条件来替代

首先,使用创建第二个宏“Packages/User/addline分号.sublime macro”

在用户键绑定中添加

{ "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/User/Add Line Semicolon.sublime-macro"}, "context":
    [
        { "key": "following_text", "operator": "not_regex_contains", "operand": ";$", "match_all": false },
        { "key": "selector", "operator": "equal", "operand": "(source.css, source.scss) - comment", "match_all": false },
    ]
},
这将侦听与正常ctrl+enter相同的键,但会调用新宏,并且仅在满足某些条件时才会触发

首先,光标后的文本不能以分号结尾。如果行的末尾已经有分号,则不会触发此绑定,快捷方式将传递到默认绑定。请注意,由于它只检查插入符号后的文本,因此如果光标已经位于行的末尾,则此操作将不起作用


其次,插入符号的位置必须有适当的范围。在这个例子中,我只包含了css和scss文件,它只在您当前不在评论中时匹配。同样,如果条件失败,快捷方式将传递到默认宏。

用户创建的插件、宏以及其他内容应始终放在
包/User
中,而不是任何其他目录中。它放在“%appdata%/Sublime Text 3…”中。我从那里开始编写脚本,因为它本来应该在不改变任何其他内容的情况下替换普通的新行宏。(具有相同相对路径但在%appdata%中的文件优先于在%installdir%中的文件,但不会被更新覆盖)。从技术上讲,当我把它变成一个独特的脚本时,它就应该被移动到用户身上,但是我认为它们足够相似,值得一起保存。
{ "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/User/Add Line Semicolon.sublime-macro"}, "context":
    [
        { "key": "following_text", "operator": "not_regex_contains", "operand": ";$", "match_all": false },
        { "key": "selector", "operator": "equal", "operand": "(source.css, source.scss) - comment", "match_all": false },
    ]
},