在 VSCode 中,是否有一种方法(或扩展)可以在编辑器中选择的每一行文本上运行命令(即“editor.action.insertSnippet”)?

问题描述 投票:0回答:1

我有一个名为

Quick Log Write-Host
的代码片段,定义如下:

"Quick Log Write-Host": {
    "prefix": ["quicklog"],
    "body": [
            "Write-Host -f Green \"`$TM_SELECTED_TEXT:\" $TM_SELECTED_TEXT"
    ],
    "description": "Quick Log"
},

然后我将一个键绑定定义为

ctrl+q
,如下所示:

{
    "key"     :  "ctrl+q",
    "command" :  "editor.action.insertSnippet",
    "args"    :  { "name": "Quick Log Write-Host" },
    "when"    :  "editorTextFocus && editorLangId == powershell"
},

现在,当我选择一个变量并按

ctrl+q
时,它会将其转换为日志字符串,以便我在运行脚本时可以轻松检查该变量的值。它只是一个有用的调试工具。

一个简单的例子:

$MyObjectCollection | % {
    $_
}

# Now I select "$_" and press "Ctrl+q", and the code becomes:

$MyObjectCollection | % {
    Write-Host -f Green "`$_:" $_
}

当我想快速检查变量时,这很有用。

但它不适用于多项选择。

我希望能够选择多行并一次在每一行上执行相同的命令。

我想做的是从这个开始:

$HArrMemberType.GetType()
$HArrMemberType.GetType().BaseType
$HArrMemberType.GetType().FullName
$HArrMemberType.GetType().Name
$HArrMemberType.GetType().IsEnum
$HArrMemberType.GetType().IsValueType
$HArrMemberType.GetType().MemberType

然后选择以上所有内容,按快捷键,然后让该快捷键将我的选择转换为:

Write-Host -f Green "`$HArrMemberType.GetType():" $HArrMemberType.GetType()
Write-Host -f Green "`$HArrMemberType.GetType().BaseType:" $HArrMemberType.GetType().BaseType
Write-Host -f Green "`$HArrMemberType.GetType().FullName:" $HArrMemberType.GetType().FullName
Write-Host -f Green "`$HArrMemberType.GetType().Name:" $HArrMemberType.GetType().Name
Write-Host -f Green "`$HArrMemberType.GetType().IsEnum:" $HArrMemberType.GetType().IsEnum
Write-Host -f Green "`$HArrMemberType.GetType().IsValueType:" $HArrMemberType.GetType().IsValueType
Write-Host -f Green "`$HArrMemberType.GetType().MemberType:" $HArrMemberType.GetType().MemberType

有谁知道这种转换是否可以在不编写我自己的 VSCode 扩展的情况下实现?是通过扩展,还是一些原生 VSCode 快捷方式设置?

任何帮助将不胜感激!

visual-studio-code vscode-snippets
1个回答
0
投票

如果您的文本像您所显示的那样是连续的,那么此键绑定将起作用:

  "key": "ctrl+q",
  "command": "runCommands",
  "args": {
    "commands": [
      "editor.action.insertCursorAtEndOfEachLineSelected",
      "cursorHomeSelect",
      {
        "command": "editor.action.insertSnippet",
        "args": {
          "name": "Quick Log Write-Host"
          // "snippet": "Write-Host -f Green \"`$TM_SELECTED_TEXT:\" $TM_SELECTED_TEXT"  // or this
        }
      }
    ]
  },
  "when": "editorTextFocus && editorLangId == powershell"
},

关键是首先使用

editor.action.insertCursorAtEndOfEachLineSelected
cpmmand“分割”行,然后片段将逐行应用。

© www.soinside.com 2019 - 2024. All rights reserved.