如何将输出传输到Visual Studio Code?

62
我想将命令输出导入Visual Studio Code的一个新文本窗口中。
通常,我会像这样操作:
echo foo | code

...但似乎不起作用;Visual Studio Code启动了,但它没有显示输入。有没有办法在命令行上进行管道操作?


注意:目前存在一个问题,当您使用远程扩展时,导致echo 123 | code -无法正常工作。 - imba-tjd
5个回答

98

从1.19.1版本开始,您可以通过调用以下命令将输出导向当前窗口:

<command> | code -
如果您使用的是1.19或更早版本,则不需要arg参数:
<command> | code

5
否则我会收到这个消息:使用 'code -' 运行以从 stdin 读取(例如 'ps aux | grep code | code -'),因此我不得不使用 <command> | code - - GuiSim
@GuiSim 对我来说,它可以在没有的情况下工作,不确定有什么区别。 - CodeMonkey
1
@CodeMonkey:区别在于v1.19.1版本的更改:https://code.visualstudio.com/updates/v1_19 - Craig Walker
1
@CraigWalker 现在我已经编辑了我的回复。 - CodeMonkey

3

我正在使用Ubuntu Gnome 17.10 (Artful Aardvark) 操作系统,并运行 Visual Studio Code v1.19.3。只有使用管道符号code是不足以将bin传输到stdin的。

$ ps aux | code
Run with 'code -' to read from stdin (e.g. 'ps aux | grep code | code -').

你需要添加-运算符:
$ ps aux | code -

这个命令有效,并打开了一个新的文本标签页,其中填充了命令输出。


3
从1.19.1版本开始,这个要求已更改为需要“代码 -”。详情请参见:https://code.visualstudio.com/updates/v1_19 - Craig Walker

2

这个答案已经过时了,而且并没有什么帮助。 - Melebius

2
当我使用被接受的答案时,控制台会一直阻塞直到我关闭在VS Code中对应的选项卡。由于我经常想要在保持VS Code选项卡打开的同时继续使用控制台,所以我想出了这个解决方法:
ls > t; code t; rm t

它将重定向到当前目录中的文件t,告诉VS Code打开该文件,然后删除它。您将在标签为t(已删除)的选项卡中在VS Code中看到文件的内容。
如果VS Code尚未打开,则需要稍微延迟(1秒对我有效)。
ls > t; code t; sleep 1; rm t

笔记

  • 我在Windows 10上使用Git Bash或PowerShell 7进行了测试。
  • 当然,要小心使用临时文件的名称,以免覆盖真实文件。

编辑:我为此编写了一个函数,以便将其添加到我的PowerShell配置文件中。

Function Out-Code {
    do {
        $filename = New-Guid
    } while (Test-Path $filename)
    $input > $filename
    code $filename
    Start-Sleep 1
    Remove-Item $filename
}
Set-Alias oc Out-Code

使用
ls | oc

很不幸,尽管已经有多次报告,但是 code - 命令在输入流关闭或到达末尾时没有退出的 bug 还未被修复。例如:https://github.com/microsoft/vscode/issues/66600 - pabouk - Ukraine stay strong

1

你还可以使用从终端复制/粘贴扩展程序并在终端中使用cp2code 或者 tee2codetee2code不终止管道链),像这样:

ls ~ | cp2code
ls ~ | tee2code | sort

它会打开一个新文档,并将数据传输到其中。如果您有多个VS Code窗口,它将在您运行命令的那个窗口上显示复制的数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接