如何通过管道输入 `code` 以在 Visual Studio Code (VS Code) 中打开文件?

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

我希望能够将文件以及文件和行号通过管道传输到

code
,以便 Visual Studio Code (VS Code) 在当前窗口中打开文件。我知道
code
这样做的命令行选项,但我无法弄清楚如何以有效的方式将一些脚本的输出传递给
code

例如,也许我想传输

grep
的输出并在 VS Code 中打开文件。以下命令将打印出文件名和行号。

grep --with-filename --line-number --recursive --max-count 1 --include \*.txt 'Test' . \
| cut --delimiter : --fields 1-2

会输出类似

./filename.txt:47
的东西。现在,
code
--goto
选项可以按预期处理这个问题,如果这样做的话:

code --reuse-window --goto ./filename.txt:47

但是,如果我尝试输入

code
,VS Code 只会关闭当前窗口,然后打开一个新的空白窗口。

grep --with-filename --line-number --recursive --max-count 1 --include \*.txt 'Test' . \
| cut --delimiter : --fields 1-2 \
| code --reuse-window --goto

如何让 VS Code 在当前窗口的行号处打开文件?我是否错误地期望它能正常工作,从而对

bash
和管道做错了什么?或者这是
code
特定问题?

bash visual-studio-code unix grep
3个回答
0
投票

一种方法是使用

xargs
.

grep --with-filename --line-number --recursive --max-count 1 --include \*.txt 'Test' . \
| cut --delimiter : --fields 1-2 \
| xargs --replace code --reuse-window --goto {}

--replace
将假定
{}
这样
xargs
将获取管道的输出并将其放置在以下命令中出现
{}
的位置。

我也对其他方法感兴趣。


0
投票

你不是把标准输入流和命令行搞混了吗?你想要

code --reuse-window --goto <output of command that produces thing>
(即命令输出用作commandline的一部分),但是你尝试做
<command that produces thing> | code --reuse-window --goto
(即将命令输出管道输出到消费者的标准输入流)。

您可以使用

`<command>`
(用反引号括起来)或
$(<command>)
(如果您希望输出被视为单个命令行参数而不是被字段分隔符分割,也用双引号括起来)替换 Bash 命令行中的命令输出).前任。
code --reuse-window --goto "$(grep --with-filename --line-number --recursive --max-count 1 --include \*.txt 'Test' . | cut --delimiter : --fields 1-2)"
.


0
投票

需要说明的是,这并不是将任何东西输送到

code
。您只想使用命令的输出作为它的参数。

您可以使用普通的旧命令替换:

code --reuse-window --goto "$(grep -hnrm 1 --include '*.txt' 'Test' . | cut -d: -f1-2)"

xargs

grep -hnrm 1 --include '*.txt' Test . |
  cut -d: -f1-2 |
  xargs code --reuse-window --goto
© www.soinside.com 2019 - 2024. All rights reserved.