【问题标题】:Wrap Selection Snippet on Visual Studio Code (vscode)在 Visual Studio Code (vscode) 上包装选择片段
【发布时间】:2016-12-20 23:48:32
【问题描述】:

我想在触发时创建一个 sn-p,它将围绕给定的文本。目前我的 sn-p 是:

{ 
  "Function Creator Helper": {
    "prefix": "_w",
    "body": [
      "public function $TM_SELECTED_TEXT () {",
      "  $1",
      "}",
    ],
    "description": "Creates a function given the text selection"
  }
}

这个结果在:

我做的是:

  1. 选择文本。
  2. 写前缀(_w)
  3. 按 Tab 键

这个结果在:

public function  () {

}

但我期待

public function person () {

}

关于如何制作这个 sn-p 或如何正确触发它的任何想法?

【问题讨论】:

  • 如果我按照您的说明和正确答案,选择(突出显示)要换行的文本,然后输入我的前缀 (rf),它将替换文本,而不是换行。

标签: visual-studio-code


【解决方案1】:

当前选择的文本显示为${TM_SELECTED_TEXT},而不是$TM_SELECTED_TEXT。

编辑:如下所述,此特定用例并非如此

【讨论】:

  • 这不是真的,两个版本都可以,见code.visualstudio.com/docs/editor/…。如果您正在对这些变量进行转换,那么您显然需要使用 ${} 形式,否则都可以。
  • ${TM_SELECTED_TEXT} 在 1.32.3 版本中为我工作,但 ${selectedText} 没有
【解决方案2】:

请参阅https://stackoverflow.com/a/48676522/836330 您的示例将有效,从 vscode v1.49 开始,如您所愿。 Vscode sn-ps 已更新为“记住”您选择的文本,即使您似乎用您的 sn-p 前缀覆盖了它。


旧答案:

如果你用热键触发,你可以使用$TM_SELECTED_TEXT:

{
  "key": "cmd+k 1",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    //  "langId": "csharp",
    "name": "Function Creator Helper"
  }
}

【讨论】:

  • 附带说明:使用此方法时${TM_SELECTED_TEXT} 也有效。
【解决方案3】:

我自己也在为此苦苦挣扎。为了让它工作,你唯一需要做的就是按下F1,运行Insert Snippet命令,然后从列表中选择你的sn-p。

【讨论】:

  • 没用,我打开命令对话框,但没有找到命令(“_w”或名称为“Function Creator Helper”)
  • 你在哪里添加了 sn-p?可能是它使用的语言与您尝试使用的源文件不同吗?
  • 这对我有用。为什么按CTRL +空格时不起作用?
  • 这是正确的答案,但不幸的是,虽然这个 sn-p 并不是那么有用。 Textmate 说,它最有用!!!
  • 代码 1.41.1 在这里,不起作用。另外,对于想要快速输入的 sn-p,此解决方案不是很有趣。
【解决方案4】:

来自米奇的例子:

"JS Block Quote": {
    "prefix": "c2",
    "body": [
        "/* $TM_SELECTED_TEXT */",
    ],
    "description": "JS Block Quote" }

来自文章:https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables 文档必须早于发布。

这在 vscode v1.30.2 中运行良好

【讨论】:

    【解决方案5】:

    如果有人想知道,对我来说就是这样:

    我创建了两个相同的 sn-p,仅当我在 html 或 php 文件中时才匹配(只需在您的 sn-ps 文件夹“php.json”和“html.json”中创建两个适用于它的 sn-ps 文件任何语言)并在里面添加了这段代码:

       "unicommentary": {
            "prefix": "unicommentary",
            "body": "<?php /* ${TM_SELECTED_TEXT} */ ?> ${0}",
            "description": "Creates a universal comment to disable both html and php."
        }
    

    ${TM_SELECTED_TEXT} 标签在你选择一些文本并通过Insert Snippet 命令触发你的 sn-p 时起作用,你不能只写在选定的文本上。

    当你想使用它时,在你的 sn-p 中选择你想要的文本,按 Ctrl + Shift + P 并选择Insert snippet 然后,输入您的 sn-p 的名称,按 Enter 即可!

    【讨论】:

      【解决方案6】:

      ${TM_SELECTED_TEXT} 也不适合我。

      ${selectedText} 已添加为片段编辑器变量: https://github.com/Microsoft/vscode/pull/39483#issuecomment-383552677

      例子:

      "JS Block Quote": {
          "prefix": "c2",
          "body": [
              "/* ${selectedText} */",
          ],
          "description": "JS Block Quote"
      }
      

      目前没有正确记录: https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables

      注意:在多行选择中,${selectedText} 被截断为第一行。另一种方法是使用剪贴板和${CLIPBOARD} 变量。 一个额外的步骤:(

      【讨论】:

      猜你喜欢
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多