我希望能够通过管道将一个文件以及文件和行号导入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代码打开文件的行号在当前窗口?我是不是对bash
和管道做了错误的处理,错误地期望它能正常工作?或者这是code
特有的问题?
3条答案
按热度按时间gblwokeq1#
一种方法是使用
xargs
。--replace
将假定为{}
,这样xargs
将获取管道的输出,并将其放置在以下命令中出现{}
的位置。我对其他方法也很感兴趣。
h4cxqtbf2#
需要说明的是,这并不是将任何东西 * 导入 *
code
。您只需要使用命令的输出作为它的参数。要考虑的一件事是如何处理多个文件。如果你想全部打开,我会使用
xargs
和-n 1
选项;下面的命令会对每个已识别的文件运行一次code
命令,最终在同一窗口的选项卡中打开所有文件:如果你只想打开第一个文件,你可以插入一个
head
:但在这种情况下,您根本不需要
xargs
;你可以使用普通的旧命令替换:vnjpjtjt3#
您是否将标准输入流与命令行(/args)混淆了?你想要
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)"
。