首页 > 解决方案 > 奇怪的 CMD - VSCode 行为

问题描述

昨天我让 SumatraPDF 和 VisualStudioCode 与 latex-workshop 一起使用正向和反向搜索。今天反向搜索不再起作用了。通过一个简单的 bat 文件,我尝试显示命令行参数。

echo %* 
pause

它们似乎是正确的,当我复制命令并将其粘贴到新的 cmd 中时,它可以工作。为了做进一步的测试,我尝试直接命令并运行它。

"C:\....\Code.exe" -g "%1:%2"
pause

Visual Studio Code 响应:错误选项 -g

在 SumatraPDF 中,我将 cmd 设置为命令。现在的行为是我有两个 cmd 窗口。用cmd直接打开VSC打开的文件。随着 cmd 间接启动,我收到了错误消息。

我尝试过重置环境变量、更改当前工作目录以及检查当前正在使用的代码页。

cmd 在看似相同的环境下怎么会有不同的行为呢?我该怎么做才能使从应用程序启动的 cmd 像 Windows 启动的 cmd 一样工作?

标签: visual-studio-codecmd

解决方案


更新:似乎最近在允许 VSCODE.exe 与命令行交互的方式上发生了一些安全更改(特别是影响 LaTeX-workshop 用户),因此对于今年两次最近的更改,请参阅 https://forum 上的讨论.sumatrapdfreader.org/t/inverse-search-not-performed-for-vs-code-exe/4486/27

在 SumatraPDF 中,%1 的反向语法命令被替换为文件的 %f 和 (l)L 的行

它是通过在感兴趣的行附近双击触发的,如果 synctex 索引文件由 PdfLaTeX(或类似的)正确编译,它将包括 tex %f(ilename) 和最近的 %l(ine) 参考点双击。

因此,SumatraPDF 的 tex syctex 增强的“反向搜索”调用在历史上应该是

"C:\...path to...\Code.exe" -g "%f:%l"

那是下 L 不是 1 在此处输入图像描述

避免使用来自 LaTeX 编辑器的任何折旧的 -inverse-search 参数,只需将其添加一次到 SumatraPDF-settings.txt 中,然后在运行-forward-search. 如果 file.synctex 或 file.synctex.gz 因错误的 PDF 编译而损坏,它将无法工作。

然而,微软似乎已经添加了添加 CLI.js 处理程序的要求,并且之后需要另一个开关设置!(请参阅上面更新中的讨论链接)

对于一个小的测试文件下载https://github.com/GitHubRulesOK/MyNotes/raw/master/AppNotes/SumatraPDF/LATeX%20and%20Reverse-Search.zip解压并在 SumatraPDF 中打开 sync.pdf 以测试双击页面在编辑器中打开 sync.tex

如果消息是无法启动...则命令行配置不正确。对错误同步文本的粗略测试是查看如果通过添加cmd /k echo到开始来更改调用会发生什么,因为这将确认反向命令。这里我写了“错误”作为 code.exe 的路径,一旦更正我可以删除 cmd /k echo。

在此处输入图像描述

对于反向可能会更改的其他一些系统,请参阅https://github.com/sumatrapdfreader/sumatrapdf/issues/1197#

但是,有效的 VsCode 调用不应受到干扰。


推荐阅读