File 一个文件中的结果到不同文件之间的VSCode超链接:行

File 一个文件中的结果到不同文件之间的VSCode超链接:行,file,visual-studio-code,hyperlink,File,Visual Studio Code,Hyperlink,我有一些搜索结果存储在一个文件中,比如results.foo。这些结果提供每个匹配结果的文件名和行号。它们看起来像这样: bar1.c@123, bar2.c@678, bar2.c@2345, bar3.c@444 我想做的是,在VSCode中打开results.foo,让它扫描文件(基于扩展名),然后“知道”单击results.foo中的“123”应该会打开文件bar1.c到第123行 problemMatcher非常接近,但这似乎是面向操作的(必须调用外部工具?),并且可能依赖于VS代码

我有一些搜索结果存储在一个文件中,比如results.foo。这些结果提供每个匹配结果的文件名和行号。它们看起来像这样:

bar1.c@123, bar2.c@678,
bar2.c@2345, bar3.c@444
我想做的是,在VSCode中打开results.foo,让它扫描文件(基于扩展名),然后“知道”单击results.foo中的“123”应该会打开文件bar1.c到第123行

problemMatcher非常接近,但这似乎是面向操作的(必须调用外部工具?),并且可能依赖于VS代码中的输出窗口。我已经在VisualStudioIDE中创建/使用了这种类型的操作,但希望更简单的文件到文件链接。。。谢谢

您可以使用扩展v0.7.0。它不仅仅做HTML文件

要使用链接创建视图,可以添加以下设置(全局或工作空间)

我还添加了一个案例,如果还有一个角色位置可用

您必须将
html相关链接.alwaysShow
设置为true

在下一版本中,您可以将内容锁定到文件。

您可以使用扩展名v0.7.0。它不仅仅做HTML文件

要使用链接创建视图,可以添加以下设置(全局或工作空间)

我还添加了一个案例,如果还有一个角色位置可用

您必须将
html相关链接.alwaysShow
设置为true


在下一个版本中,您可以将内容锁定到文件。

这里是另一个使用两个扩展名的解决方案。一个是宏运行程序:将各种命令链接在一起。另一种是在文件名中解析和移动的方法:-感谢@rioV8

工作原理:它不会从文件名中创建链接,而是将光标放在其中一个名称的任意位置,并使用键绑定触发宏

其次,它使用shell命令
code-g:
转到该文件和行号。您的文件的格式为
bar1。c@123
而不是
bar1.c:@123
。如果它们是后一种形式,则宏只需两个步骤,而且要短得多。实际上,需要解析
bar1。c@123
输入文件名,并分别输入行号

宏(在settings.json中):


使用Select By扩展名(在settings.json中):


和一个keybinding(keybindings.json)来启动:

{
  "key": "alt+y",                  // whatever keybinding you wish
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.openFile" },
  // "when": "editorTextFocus && resourceFilename =~ /^results\.foo/"
},




显然,它们使用的是相对文件路径。但是
sendSequence
命令也将采用通常的启动变量。看见就像您在评论中建议的
${relativeFileDirname}

这里是另一个使用两个扩展的解决方案。一个是宏运行程序:将各种命令链接在一起。另一种是在文件名中解析和移动的方法:-感谢@rioV8

工作原理:它不会从文件名中创建链接,而是将光标放在其中一个名称的任意位置,并使用键绑定触发宏

其次,它使用shell命令
code-g:
转到该文件和行号。您的文件的格式为
bar1。c@123
而不是
bar1.c:@123
。如果它们是后一种形式,则宏只需两个步骤,而且要短得多。实际上,需要解析
bar1。c@123
输入文件名,并分别输入行号

宏(在settings.json中):


使用Select By扩展名(在settings.json中):


和一个keybinding(keybindings.json)来启动:

{
  "key": "alt+y",                  // whatever keybinding you wish
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.openFile" },
  // "when": "editorTextFocus && resourceFilename =~ /^results\.foo/"
},




显然,它们使用的是相对文件路径。但是
sendSequence
命令也将采用通常的启动变量。看见就像您在评论中建议的
${relativeFileDirname}

编写一个任务,将文件
cat
s添加到终端,并添加一个问题匹配器,每行只允许一个问题,因此可以编写一个小脚本将文件拆分为单个文件感谢@rioV8。我对VS代码还是个新手,我似乎陷入了工作区的困境。似乎您必须有一个工作区来创建tasks.json文件,但我想让这个超链接“工具”可用于任何目录,而不仅仅是在源代码控制下。如果我尝试仅从使用code results.foo打开的结果文件运行任务,我会得到“任务仅在工作区文件夹中可用”。我很感激关于如何处理这个…Workspace==项目的建议,您需要告诉编辑器哪些文件属于同一个项目。在语言X中,有些项目希望以不同的方式启动。您无法通过全局设置/任务/启动文件控制所有这些。您如何与团队成员共享设置/任务/启动,他们不需要知道您的所有其他信息。再次感谢。我已经让它工作了,但它令人难以置信地笨拙:我正在将tasks.json复制到一个新的.vscode子目录中,并将源文件添加到工作区中。这是我想要使用这个超链接功能的最低要求吗?这就是我解释你的“你不能从全局设置控制所有这些…”的方式,但可能有更好的解释:-)我正在修改一个插件,它会更容易一些,但是
结果。foo
文件也需要在工作区中,因为该文件不包含文件的完整路径。如果你有20多个项目,而且所有这些特定任务和启动设置都在全局文件中,那就太糟糕了。同样,每个项目都有自己的SCM。编写一个任务,将文件
cat
s添加到终端,并添加一个问题匹配器,每行只允许一个问题,因此可以编写一个小脚本将文件拆分为单个文件感谢@rioV8。我对VS代码还是个新手,我似乎陷入了工作区的困境。似乎您必须有一个工作区才能创建tasks.json文件,但我想让这个超链接“工具”可用于任何目录,而不仅仅是
  "selectby.regexes": {

    "moveToFileNameStart": {
      "flags": "m",

      //  "moveby": ",|^"    // works but I think below is better

      "moveby": ",(?!$)|^"   // works, move to start of line
                             //  or to "," that is not at the end of a line
    },

    "fileNameSelect": {
      "forward": " *",             // skip leading spaces, if any
      "forwardInclude": false,     
      "forwardNext": "@",          // get filename up to @ character
      "forwardNextInclude": false,
      "showSelection": true
    },

   "gotoLineNumberSelect": {
      "flags": "m",               // select the linenumber
      "forward": "(?=,)|$",       // select to "," or end of line
      "forwardInclude": true,
      "showSelection": true
    },
}
{
  "key": "alt+y",                  // whatever keybinding you wish
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.openFile" },
  // "when": "editorTextFocus && resourceFilename =~ /^results\.foo/"
},