在VS Code中,如何只复制某个文件夹的路径(不包含文件名)?

后端开发 2026-07-08

我正在使用这段代码来复制一个文件的路径:

{"key": "ctrl+shift+alt+f11","command": "copyFilePath","when": "!editorFocus"},
{"key": "ctrl+shift+alt+f11","command": "copyFilePath","when": "editorFocus"},

但如何只复制文件夹的路径,不包含文件名?

我尝试过 Copy 扩展,但只有复制文件名的选项。

完整版本:

版本:1.120.0
提交:0958016b2af9f09bb4257e0df4a95e2f90590f9f
日期:2026-05-12T20:17:22Z
Electron:39.8.8
ElectronBuildId:13870025
Chromium:142.0.7444.265
Node.js:22.22.1
V8:14.2.231.22-electron.0
操作系统:Windows_NT x64 10.0.26200

解决方案

这可以很容易地通过我写的一个扩展来实现,Find and Transform 因为它允许你在按键绑定中使用VS Code的内置变量,例如 ${fileDirname}

下面是一个按键绑定,它会把 ${fileDirname} 放入剪贴板:

  {
    "key": "alt+f",                    // whatever keybinding you want
    "command": "findInCurrentFile",
    "description": "modify the clipboard with file's dirname",
    "args": {
      "run": [
        "$${",
           "await vscode.env.clipboard.writeText(`${fileDirname}`);",
        "}$$"
      ],
      "restrictFind": "line"
    },
    "when": "!editorHasSelection"
  }

它会写入你的 keybindings.json 文件。

对该按键绑定使用的唯一限制是光标必须处于一个空白行上。


要在空白行上“放松光标”,请设置一个无意义的 find,并使用这个按键绑定,它会把 / 路径分隔符替换为 \

  {
    "key": "alt+f", // whatever keybinding you want
    "command": "findInCurrentFile",
    "description": "modify the clipboard",
    "args": {
      "find": "@#$%^^%",
      "run": [
        "$${",
        "const dirname = '${fileDirname}'.replace(/\\\//g, '\\\\');",
        "await vscode.env.clipboard.writeText(dirname);",
        "}$$"
      ],
      "runWhen": "onceOnNoMatches"
    }
  }
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章