如何从 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 代码,一种 解决方法也表现得更好 [=70=],因为它不需要启动子进程:
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 -
如果我的脚本在 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:
在 Windows 上,在调用中包含文件扩展名这样简单的事情 - 即
code.cmd
- 可能会有所帮助。
但是,假设您使用的是 PIC(PowerShell 集成控制台),[=22] 附带的专用 PowerShell shell =] 对于 Visual Studio 代码,一种 解决方法也表现得更好 [=70=],因为它不需要启动子进程:
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 集成终端(
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 -