Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>一键打开文件New to Visual Studio Code? Get it now.
一键打开文件

一键打开文件

dawnjun

| (1) | Free
通过自定义规则,一键打开多个关联文件
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

一键打开文件 (VS Code Extension)

一键打开文件 是一个强大的效率工具,允许您通过自定义 JavaScript 脚本规则,依据当前上下文(如当前编辑的文件)一次性批量打开多个关联文件。

特别适用于框架开发,例如 FastAdmin、ThinkPHP、Laravel 等,当你打开一个控制器时,可以自动打开其对应的模型、验证器、视图和静态资源文件。

✨ 主要特性

  • 完全自定义规则:使用标准 JavaScript 编写规则,灵活性无限。
  • 多规则支持:可以在一个规则文件中定义多组规则,运行时通过下拉菜单选择(如“打开关联文件”、“打开配置项”等)。
  • 上下文感知:规则脚本可以获取当前触发文件的路径、文件名和工作区根目录。
  • 右键菜单集成:支持在编辑器内容或资源管理器中右键直接触发。
  • 自动初始化:如果未配置规则文件,首次运行时会自动创建包含常用示例的模板。

🚀 快速开始

  1. 安装插件后,在任意项目中打开一个文件。
  2. 右键点击该文件,选择 一键打开文件: 打开关联文件。
  3. 如果这是您第一次运行,插件会提示您在 .vscode/open-multi.rules.js 创建一个默认规则文件。
  4. 编辑 .vscode/open-multi.rules.js,根据您的项目结构编写逻辑。

📝 规则文件配置

插件默认从工作区的 .vscode/open-multi.rules.js 读取规则。您也可以在 VS Code 设置中修改 openMulti.ruleFile 配置项。

规则文件示例

规则文件是一个标准的 CommonJS 模块,可以导出一组函数。

示例 1:单规则模式(简单)

如果只导出一个函数,插件将直接执行它。

const path = require('path');

module.exports = function(rootPath, context) {
    // context包含: { rootPath, filePath, fileName }
    
    // 示例:打开 package.json
    return [
        path.join(rootPath, 'package.json')
    ];
};

示例 2:多规则模式(推荐)

导出对象,Key 为菜单名称,Value 为执行逻辑。运行时会弹出选择框。

const path = require('path');

module.exports = {
    // 规则 1: FastAdmin 开发助手
    "FastAdmin: 打开关联文件": function(rootPath, context) {
        const files = [];
        const currentFile = context.filePath; // d:\project\application\admin\controller\Test.php
        
        // ... 编写逻辑解析路径 ...
        // 比如自动添加对应的 Model, View, JS 等
        
        return files;
    },

    // 规则 2: 打开项目配置
    "Project: 打开配置文件": function(rootPath, context) {
        return [
            path.join(rootPath, 'package.json'),
            path.join(rootPath, 'tsconfig.json'),
            path.join(rootPath, '.gitignore')
        ];
    }
};

🧩 API 参数说明

规则函数接收两个参数:

  1. rootPath (String): 当前工作区的根目录绝对路径。
  2. context (Object):
    • filePath (String): 触发命令时所在文件的完整绝对路径。
    • fileName (String): 触发命令时所在文件的文件名(如 index.ts)。
    • ruleName (String): 当前执行的规则名称。

返回值:必须返回一个包含绝对文件路径的字符串数组 (string[])。

💡 典型应用场景 (FastAdmin/ThinkPHP)

以下是一个完整的 FastAdmin 规则配置,保存到 .vscode/open-multi.rules.js:

const path = require('path');
const fs = require('fs');

module.exports = {
    "FastAdmin: Open Related": function(rootPath, context) {
        const filesToOpen = [];
        const filePath = context.filePath; // 当前文件路径
        if (!filePath) return [];

        // 统一斜杠
        const normalizedPath = filePath.replace(/\\/g, '/');
        
        // 匹配控制器路径: .../application/{module}/controller/{name}.php
        const controllerRegex = /^(.*\/)application\/([^\/]+)\/controller\/(.*)\.php$/i;
        const match = normalizedPath.match(controllerRegex);

        if (match) {
            const rootDir = match[1]; 
            const moduleName = match[2]; // e.g. 'admin'
            const relativeClassPath = match[3]; // e.g. 'general/Config'

            // 1. Model
            filesToOpen.push(path.join(rootDir, 'application', moduleName, 'model', relativeClassPath + '.php'));
            // 2. Validate
            filesToOpen.push(path.join(rootDir, 'application', moduleName, 'validate', relativeClassPath + '.php'));
            // 3. JS Asset
            if (moduleName === 'admin') {
                filesToOpen.push(path.join(rootDir, 'public/assets/js/backend', relativeClassPath.toLowerCase() + '.js'));
            }
            // 4. Lang
            filesToOpen.push(path.join(rootDir, 'application', moduleName, 'lang', 'zh-cn', relativeClassPath.toLowerCase() + '.php'));
            // 5. Views (扫描目录下所有html)
            const viewDir = path.join(rootDir, 'application', moduleName, 'view', relativeClassPath.toLowerCase());
            if (fs.existsSync(viewDir)) {
                 fs.readdirSync(viewDir).forEach(f => {
                     if(f.endsWith('.html')) filesToOpen.push(path.join(viewDir, f));
                 });
            }
        }
        return filesToOpen;
    }
};

⚙️ 设置

  • openMulti.ruleFile: 指定规则文件的路径。默认为 .vscode/open-multi.rules.js。

Happy Coding!

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft