vscode 在多根工作区中打开终端时,会为新终端添加cwd选项,

7rtdyuoh  于 8个月前  发布在  Vscode
关注(0)|答案(5)|浏览(92)

这个问题在使用所有扩展被禁用时是否发生?:是的

  • VS Code 版本:1.63.2
  • 操作系统版本:

重现步骤:

  1. 创建一个多文件夹工作区(其中一个名为“Build”)
  2. 设置:"terminal.integrated.cwd": "${workspaceFolder:Build}"
{
    "folders": [
        {
            "name": "Build",
            "path": "build"
        },
        {
            "name": "Core",
            "path": "core/src"
        },
    ],
    "settings": {
        "terminal.integrated.cwd": "${workspaceFolder:Build}"
    }
}

当使用切换终端快捷键(workbench.action.terminal.toggleTerminal, Ctrl+')创建新终端时,它按预期工作,并按照设置中指定的在“Build”文件夹中打开。
然而,当使用其他选项来指定文件夹(workspace.action.terminal.new, Ctrl+Shift+')并选择要打开的文件夹时,它会将当前打开的文件的工作区文件夹与设置中指定的文件夹连接起来,两者都是完整、绝对路径。
因此,当查看位于“core\src\path\to\file”内的文件时,它会尝试以类似以下方式打开它:
C:\Users\luke.meppem\Documents\FooBar\core\src\C:\Users\luke.meppem\Documents\FooBar\build .
有一个解决方法,通过在每个子文件夹中覆盖 terminal.integrated.cwd 并将其设置回 ./
然而,这需要在每个子文件夹中都进行操作。
我认为在使用 workspace.action.terminal.new 为新终端指定 cwd 时,应该有一个设置,不让新终端附加指定的 cwd ,因为这已经通过选择它来指定了。
但是,当打开一个没有指定 cwd 的终端(如使用没有终端时的切换或分割终端)时,它应该使用 cwd 。

e7arh2l6

e7arh2l61#

行为似乎在新版本的vscode中发生了变化。我相信这个问题在这个提交中部分得到了修复,尽管没有完全解决:
14732d4
在开发版本(1.66.0)中进行测试时,观察到以下行为:
设置:"terminal.integrated.cwd": "${workspaceFolder:Build}" 现在可以在toggleTerminal上正常工作,并在“构建”文件夹中打开。
然而,使用指定的工作区创建一个新的终端(workspace.action.terminal.new,Ctrl+Shift+'),然后选择“核心”,总是会在 C:\Users\luke.meppem\Documents\FooBar\build 中创建终端,而不管从提供的workspace文件夹中选择哪个选项。
通过查看vscode的代码,很明显可以看到为什么会出现这种情况(terminalActions.ts):
它从你选择的内容中获取工作区:

const workspace = await commandService.executeCommand<IWorkspaceFolder>(PICK_WORKSPACE_FOLDER_COMMAND_ID, [options]);

将当前工作目录设置为那个:

eventOrOptions.cwd = workspace.uri;

然后获取当前工作目录配置选项:

const cwdConfig = configurationService.getValue(TerminalSettingId.Cwd, { resource: workspace.uri });
if (typeof cwdConfig === 'string' && cwdConfig.length > 0) {
    const resolvedCwdConfig = await configurationResolverService.resolveAsync(workspace, cwdConfig);

因为 cwdConfig${workspaceFolder:Build} ,所以它完全覆盖了所选的工作区文件夹:

if (isAbsolute(resolvedCwdConfig) || resolvedCwdConfig.startsWith(AbstractVariableResolverService.VARIABLE_LHS)) {
        	eventOrOptions.cwd = URI.from({
	        	scheme: workspace.uri.scheme,
	        	path: resolvedCwdConfig
        	});

而不是使用所选的工作区。
总之,问题目前的状况是:
在选定的工作区文件夹中打开新终端时,不能设置默认的终端cwd,而不会影响cwd路径。

hpcdzsge

hpcdzsge2#

这可能通过最近对快速选择的PR来修复。

rur96b6h

rur96b6h3#

将文件夹路径本身包含绝对路径是否有助于解决问题?

  • 我有一个类似的问题,我正在考虑记录日志;如果通过与创建时不同的dir打开工作区文件,终端会中断。
  • 结果我们可以通过使路径绝对来避免很多问题。
rggaifut

rggaifut4#

这些都是密切相关的:

$ * $ 在多根工作区中打开终端会为新终端添加cwd选项。[142520]

$ * x_{1e0f1}x$

$ * x_{1e1f1}x$

bmvo0sr5

bmvo0sr55#

确认问题仍然存在。在Ubuntu上,无法将默认终端当前工作目录设置为空白或相对路径之外的任何内容。

相关问题