首页 > 解决方案 > 从 Visual Studio Code 中的 grep(或 ack 或编译器或其他)打开结果作为搜索结果或问题?

问题描述

vscode新手:

假设我有运行的输出,或者grep我已经在文件中的命令行上运行,其中每一行都有标准的 grep/编译器输出格式:如:ackmy-weird-compiler-or-linterfile:linenumber:text

» ack -w root | egrep -v '(public|build)/' > file; cat file
yarn.lock:5322:is-root@2.1.0:
yarn.lock:5324:  resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
yarn.lock:8244:    is-root "2.1.0"
src/apiCalls.js:11:let root = 'https://my.server/api/';
src/apiCalls.js:20:        return `${root}${name}?${usp}`;
src/apiCalls.js:44:window.setRoot = (r) => { root = r };
src/index.js:37:    ), document.getElementById('root'));

我可以以某种方式在 vscode 中加载/导入该文件并使其显示为搜索结果(或问题),因此我可以看到格式正确的列表并允许我使用热键跳转到下一个匹配项,同时让我看到如何我在列表中的位置有多远?

我已经意识到我可以从 vscode 中打开一个终端,然后cat file. 然后我可以CTRL单击每个结果行以打开例如yarn.lockyarn.lock:5322. 但这并没有真正与 vscode 集成,如果我有 411 个结果行,我将不知道在喝杯咖啡之后我在列表中的位置有多远。

我意识到我可能可以找到一些允许我从 vscode 中运行外部 grep 并查看输出的东西,但我已经有了输出,只是想以某种方式加载它......

标签: visual-studio-code

解决方案


在我写这个问题时,我发现了答案:通过任务与外部工具集成。创建$workspace/.vscode/tasks.json包含:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "/tmp/ack",
            "type": "shell",
            "command": "cat /tmp/ack",
            "problemMatcher": {
                "owner": "ack",
                "fileLocation": [
                    "relative",
                    "${workspaceFolder}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "message": 3
                }
            }
        }
    ]
}

答对了!现在该/tmp/ack文件用于保存所有 grep/ack/whatever 输出。使用“任务:运行任务”运行它CTRL+SHIFT+P,然后选择“/tmp/ack”。现在的内容/tmp/ack显示为问题。再次清除问题,echo > /tmp/ack然后重复。

我得说:我喜欢 vscode!


推荐阅读