如何将该Sublime代码段转换为VS Code代码段?

时间:2019-09-05 18:18:57

标签: regex visual-studio-code sublimetext3 code-snippets

请参阅以下我的尝试和结果。首先是Sublime片段:

<snippet>
    <content>
        <![CDATA[<${1:p}>${2:$SELECTION}</${1/([^ ]+).*/$1/}>]]>
    </content>
    <tabTrigger>&lt;</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" } },

它的作用如下:

  1. Cmd + Shift + O 将创建一个带有{{1} }链接,因此您可以开始输入内容,并且会同时更新双方。按Tab键会将光标置于标签的中心。

  2. 突出显示一个部分,然后按 cmd + shift + O 将标记包围该部分。

我自己设法尝试的是VS Code中的以下内容:

<p></p>

这几乎达到了我想要的,但还不够。我对正则表达式不是很好,但是此打印结果p可以删除正则表达式的最后一点,它将使#1满意。上面的#2很有帮助,我想弄清楚我做错了什么。我敢打赌,正则表达式的最后一点是使您可以突出显示一个部分并用标签将其包围。

您能帮我解决这个问题,让它满足#1和#2吗?

4 个答案:

答案 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包在编辑器中转换摘要。

示例:

  1. 使用“程序包控制”安装程序包
  2. 打开Sublime Text片段
  3. 运行 Atomizr:将文本升华到Visual Studio代码命令(或 Ctrl S Ctrl V (在macOS上)

要转换许多文件,安装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"
},

以下是其工作示例:

demo of hasSelection snippet