【问题标题】:Single line command to open a list of files from another program such as Git, PowerShell, or Command Line用于从其他程序(例如 Git、PowerShell 或命令行)打开文件列表的单行命令
【发布时间】:2018-11-09 16:53:21
【问题描述】:

我想从 VS Code 的一个分支中打开所有更改的文件。

现在我分两步进行。

// copy the file list
PS> git diff master... --name-only | clip

// paste the file list
PS> code file1 file2 file3 ... fileN 

如果可以的话,我们如何在一行中做到这一点?我尝试过的是这两种方法:

PS> git diff master... --name-only | code 
PS> git diff master... --name-only | code -

参考VS Code CLI docs

【问题讨论】:

    标签: git powershell command-line visual-studio-code


    【解决方案1】:

    您可以git 命令的输出作为参数传递给code

    code (git diff master... --name-only)
    

    PowerShell 将外部程序的标准输出输出行收集到一个数组中。

    假设git 命令仅输出文件路径,每个路径都在自己的行中,将该数组传递给另一个外部程序,例如code,自动将数组的元素传递为个人,适当引用论点。

    例如,在 Windows 上,如果您运行以下命令:

    code (cmd /c echo file1`& echo "file 2")
    

    code 会看到如下命令行:

    ...\code.cmd "file1" "file 2"
    

    请注意,(直接)管道code不是一个选项,因为code不接受来自的文件路径标准输入;您可以使用标准输入来传递(新)文件的内容,但是 ('Text for new doc' | code -)。

    在此处通过 PowerShell 的 ForEach-Object cmdlet 使用管道没有好处

    【讨论】:

      【解决方案2】:

      ,(git diff master... --name-only) | % { code $_ }

      creates 开头的逗号是一个数组,其中包含一个沿管道传递的元素。所以在 foreach 中,只有一次迭代将文件名数组传递给代码。

      我没有在文件路径中使用空格对此进行测试。

      或者,无需将事情推到管道中,您就可以这样做

      code (git diff signage-theme... --name-only)

      【讨论】:

      • 这很有用,可能就是答案。我会玩弄它。唯一的缺点是必须将 git 命令括在括号中。将原始 git 输出通过管道传输到单个数组中而不是必须使用 ,(<some-command>) 方法会很棒。类似于the git command | reduce to single array | % { code $_ } 的东西会更好,尽管可能有点不切实际。
      • @ShaunLuttin 外部命令已经将它们的输出作为字符串数组发送,这就是为什么需要一元数组运算符以便它不会展开的原因。
      【解决方案3】:

      作为文件名包含空格的其他答案的替代方案:

      #requires -Version 4
      $files = @(& git.exe diff master... --name-only).
          ForEach{"""$PSItem"""} -join ' '
      & code.cmd $files
      

      此解决方案使用嵌入的引号,cmd 解析器将在不需要它们时将其删除。

      【讨论】:

      • 这是有用的信息,尽管对我的用例来说不切实际,它要求代码是单行的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2012-12-27
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多