如何从 VSCode 中的集成终端打开文件到新选项卡

How to open a file from the integrated terminal in VSCode to a new tab

如果我的脚本在 vscode 中 运行,它希望它在 vscode 中的新选项卡中打开一个 .txt 文件。否则,打开包含该文件的文件夹。但是,当前的“代码”命令在终端 window 而不是新的编辑选项卡中打开它。

if ($env:TERM_PROGRAM -eq 'vscode') {
  code 'C:\temp\_Release_Evidence\test.txt'
}
else {
  explorer 'C:\temp\_Release_Evidence'
}

通常,code 指的是 Visual Studio Code 的 CLI,假定它位于 $env:PATH 中列出的目录之一:

  • 在 Windows 上,它引用作为 CLI 入口点的 code.cmd 批处理文件。
  • 在 Unix-like 平台上它指的是 code Bash 脚本。

它的默认行为在最近激活的Visual Studio代码window(其中,当运行来自里面Visual Studio代码时,根据定义就是当前 window).

如果您没有遇到这种情况,可能 code 指的是您机器上的另一个可执行文件:

  • 为避免歧义,请改用完整的 CLI 路径,但是,这需要您知道 Visual Studio 代码的安装位置;典型的 CLI 位置是:

    • Windows: $env:LOCALAPPDATA\Programs\Microsoft VS Code\bin\code.cmd
    • macOS:/usr/local/bin/code
    • Linux: /usr/bin/code
  • 在 Windows 上,在调用中包含文件扩展名这样简单的事情 - 即 code.cmd - 可能会有所帮助。


但是,假设您使用的是 PIC(PowerShell 集成控制台)[=22] 附带的专用 PowerShell shell =] 对于 Visual Studio 代码,一种 解决方法也表现得更好 [=7​​0=],因为它不需要启动子进程:

  • PIC自带psedit命令Open-EditorFile功能的别名),可以快速打开一个或多个当前 Visual Studio 代码 window.

    选项卡中的文件
    • 注意:从 PIC 的 v2022.5.1 版本开始,指定 多个 文件只有在 单独枚举 时才有意义,因为文字路径。如果您尝试使用 wildcard 模式或 directory 路径,目录中所有匹配的文件/文件都将无用地打开 in 单个选项卡中的序列

因此,您可以使用以下内容:

if ($env:TERM_PROGRAM -eq 'vscode') {
  # Use `psedit`, if available; `code` otherwise.
  $exe = if ((Get-Command -ErrorAction Ignore psedit)) { 'psedit' } else { 'code' }
  & $exe 'C:\temp\_Release_Evidence\test.txt'
}
else {
  explorer 'C:\temp\_Release_Evidence'
}

我无法重现或解释为什么这可能会在您的系统上发生。 运行 以下无论是在 PowerShell 集成终端 简洁)还是 VS Code 终端窗格中的标准 PowerShell 终端都应该在新选项卡中打开文件通常显示文件内容的位置:

code /path/to/file.txt

一个合适的解决方法可能是获取文本文件的内容并通过 STDIN 将它们通过管道输入。我们可以通过在向 code 传输数据时添加一个连字符 - 作为空参数来做到这一点:

# Tip: Use the gc alias for Get-Content
Get-Content /path/to/file.txt | code -

您可以在进行更改后使用 Save As... 将文件保存到其预期目标。如果在关闭文件或保存到文件之前需要 运行 其他命令,则需要在终端中使用 Ctrl+C 来关闭输入流。


即使这不是适合您的解决方法,它在其他情况下也是一个方便的提示。例如,以下命令将在 VSCode 中打开 Get-Process 的文档:

Reminder: Don't forget to hit Ctrl+C in the terminal once the content finishes populating to be able to run additional commands, or close the temporary file buffer.

Get-Help Get-Process -Detailed | code -