在 VSCode 设置中使用 $dir 并转义反斜杠

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

我正在使用 [VSCode][2] (Visual Studio Code)Code Runner,并且我正在尝试更改

C++
的运行命令。

我的settings.json 文件中有以下设置:

// Set the executor of each language.
"code-runner.executorMap": {
    // ...

    "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"

    // ...
}

然后,当我按

CTRL SHIFT P
并按
Run Code
上的 Enter 运行当前的 C++ 文件时,它会生成以下要运行的命令:

cd "c:\C++\" && g++ main.cpp -o main && "c:\C++\"main

但是命令的输出是:

bash: cd: c:\C++" && g++ main.cpp -o main && c:C++"main: No such file or directory

这是因为正如您在正在运行的命令中看到的那样,它试图 CD 到

"c:\C++\"
\
字符没有被转义,导致命令失败。 如果该命令将所有
\
字符转义为看起来像
"c:\\C++\\"
,则它将正确运行。

我正在使用 git bash 控制台作为我的集成终端。

如何解决此问题并转义从我的

$dir
文件中的
settings.json
变量中检索的路径?

bash visual-studio-code escaping vscode-code-runner
2个回答
2
投票

尝试使用 $dirWithoutTrailingSlash 变量而不是 $dir。

如果这不起作用,您可以尝试在位于

codeManager.js
%VSCODE_INSTALL%\Data\code\extensions\formulahendry.coderunner-%VERSION%\out\src\
中创建自己的变量。

向位于第 246 行附近的

placeholders
数组添加条目。例如:

{ regex: /\$dirWithoutQuotesNorTrailingSlash/g, replaceValue: this.getCodeFileDirWithoutTrailingSlash() }

我用来替换的

{ regex: /\$dirWithoutTrailingSlash/g, replaceValue: this.quoteFileName(this.getCodeFileDirWithoutTrailingSlash()) }

因为我无法在类路径中使用带有显式引号的变量。 您还可以使用正则表达式定义自己的函数返回值(例如 getCodeFileDirWithoutTrailingSlash)(大约第 222 行)。


0
投票

我建议使用make,这样更灵活,只需在根目录中创建一个包含该内容的makefile即可:

all:
    g++ main.cpp -o main.exe
    main.exe

现在您可以通过编写

make all
或仅
make
来通过终端运行此目标(这将运行第一个目标)。


要通过代码运行器快速运行目标,您需要将此代码添加到settings.json:

"code-runner.executorMap": {
    "cpp": "make -s #", 
}

-s 标志代表静默,即不向控制台输出命令,# 是一个注释符号,用于注释代码运行程序将添加到命令中的文件的路径。

© www.soinside.com 2019 - 2024. All rights reserved.