请参阅以下我的尝试和结果。首先是Sublime片段:
<snippet>
<content>
<![CDATA[<${1:p}>${2:$SELECTION}</${1/([^ ]+).*/$1/}>]]>
</content>
<tabTrigger><</tabTrigger>
<scope>text.xml</scope>
<description>Long Tag</description>
</snippet>
和键盘绑定:
{ "keys": ["super+shift+o"], "command": "insert_snippet", "args": { "name": "Packages/XML/long-tag.sublime-snippet" } },
它的作用如下:
按 Cmd + Shift + O 将创建一个带有{{1} }链接,因此您可以开始输入内容,并且会同时更新双方。按Tab键会将光标置于标签的中心。
突出显示一个部分,然后按 cmd + shift + O 将标记包围该部分。
我自己设法尝试的是VS Code中的以下内容:
<p></p>
这几乎达到了我想要的,但还不够。我对正则表达式不是很好,但是此打印结果p
可以删除正则表达式的最后一点,它将使#1满意。上面的#2很有帮助,我想弄清楚我做错了什么。我敢打赌,正则表达式的最后一点是使您可以突出显示一个部分并用标签将其包围。
您能帮我解决这个问题,让它满足#1和#2吗?
答案 0 :(得分:0)
您可以使用以下代码修复代码
"blank_tag": {
"prefix": "<cmdso>",
"body": [
"<${1:p}>${2:$SELECTION}</${1/(\\S+).*/$1/}>"
],
"description": "Adds a blank tag to use"
}
[^ ]
可以在代码中写为\\S+
,\S+
匹配1个或多个非空白字符。语法为${ID/pattern/replacement/flags}
,因此您的代码不完整。
答案 1 :(得分:0)
如果您使用的是Sublime Text,则可以使用Atomizr包在编辑器中转换摘要。
示例:
要转换许多文件,安装CLI equivalent(需要NodeJS)可能更方便
示例:
# Single conversion
atomizr example.sublime-snippet --target vscode
# Batch conversion
atomizr *.sublime-snippet --target vscode
答案 2 :(得分:0)
好吧,这是两个不同的片段,第一个是您已经做过的,所以我将谈论第二个:
您要基于快捷方式将标签中的文字括起来,首先需要两件事来创建代码段,然后添加快捷方式
此代码段在插入时将在文本周围带有p标记,在您书写时会立即更改。
"surround_tag": {
"prefix": "<stag>",
"body": [
"<${1:p}>${TM_SELECTED_TEXT}</$1>"
],
"description": "surround text by tag"
}
请注意,我们正在使用名为TM_SELECTED_TEXT的特定变量,您可以在https://code.visualstudio.com/docs/editor/userdefinedsnippets
中找到有关这些变量的更多信息。然后添加键盘快捷键以插入该片段
{
"key": "cmd+w cmd+t",
"command": "editor.action.insertSnippet",
"when": "editorTextFocus",
"args": {
"name": "surround_tag",
}
}
// in args here you can add a key langId to specify specific languages like
"args": {
"langId": "javascript",
"name": "surround_tag",
}
您可以在https://code.visualstudio.com/docs/languages/identifiers
中找到语言标识符当然,您也可以通过使用insertSnippet命令(CMD + Shift + P然后再插入insertSnippet,然后选择一个)来插入不带键盘快捷键的代码段
您还可以使用以下网站为vscode和Sublime https://snippet-generator.app/生成代码段
答案 3 :(得分:0)
如果您想像看起来一样使用相同的键绑定进行两个不同的操作,那么您将必须找到一种方法来区分当时存在的条件以便正确触发相应的版本。
在您的情况下,这涉及在一种情况下利用所选文本。因此,我们可以使用when
子句editorHasSelection
来区分twp所需的操作。
在您的keybindings.json中:
{
"key": "cmd+shift+O",
"command": "editor.action.insertSnippet",
"args": {
"snippet": "<${1:p}>$0</$1>"
},
"when": "editorTextFocus && !editorHasSelection"
},
{
"key": "cmd+shift+O",
"command": "editor.action.insertSnippet",
"args": {
"snippet": "<${1:p}>${TM_SELECTED_TEXT}</$1>"
},
"when": "editorTextFocus && editorHasSelection"
}
我们看到,如果编辑器中有一个选择,则只会触发第二个命令!
!editorHasSelection
表示如果没有选择,则触发该选择。否则,我们将触发另一个命令。
请注意,已经有一个命令也绑定到 Cmd + Shift + O :workbench.action.gotoSymbol
您应该禁用该命令如果您想坚持使用 Cmd + Shift + O 作为触发器。这将禁用它:
{
"key": "cmd+shift+O",
"command": "-workbench.action.gotoSymbol"
},
以下是其工作示例: