You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VSCode中点击不存在的Markdown链接触发Python的set_entry()函数?

实现VSCode中点击不存在的Markdown链接自动生成对应文件的方案

方案一:自定义协议触发(最直观跨平台)

这个方法通过给Markdown链接绑定自定义协议,点击时直接调用Python脚本生成文件并打开,逻辑简单,不需要复杂的监听。

步骤1:修改Markdown链接格式

把原来的[word](word.md)改成[word](word://word),示例:

- 查看[apple](word://apple)的词汇关系
- 查看[banana](word://banana)的词汇关系

步骤2:编写Python触发脚本

创建word_handler.py脚本,处理协议请求并调用你的set_entry()函数:

import sys
import os
# 导入你的set_entry函数,替换成实际的模块路径
from your_dictionary_module import set_entry

def main():
    if len(sys.argv) < 2:
        return
    
    # 解析协议链接,提取单词
    protocol_url = sys.argv[1]
    target_word = protocol_url.replace("word://", "").strip()
    target_file = f"{target_word}.md"
    
    # 检查文件是否存在,不存在则生成
    if not os.path.isfile(target_file):
        set_entry(target_word)
    
    # 用VSCode打开生成的文件
    os.system(f"code {target_file}")

if __name__ == "__main__":
    main()

步骤3:注册自定义协议

根据操作系统,把word://协议关联到上面的脚本:

  • Windows:创建.reg文件并导入(需管理员权限):

    Windows Registry Editor Version 5.00
    [HKEY_CLASSES_ROOT\word]
    @="URL:Word Protocol"
    "URL Protocol"=""
    [HKEY_CLASSES_ROOT\word\shell]
    [HKEY_CLASSES_ROOT\word\shell\open]
    [HKEY_CLASSES_ROOT\word\shell\open\command]
    @="\"C:\\path\\to\\your\\python.exe\" \"C:\\path\\to\\word_handler.py\" \"%1\""
    

    替换路径后双击导入注册表。

  • macOS:创建com.yourname.wordhandler.plist文件放到~/Library/LaunchAgents/:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>CFBundleURLTypes</key>
        <array>
            <dict>
                <key>CFBundleURLName</key>
                <string>Word Protocol Handler</string>
                <key>CFBundleURLSchemes</key>
                <array>
                    <string>word</string>
                </array>
            </dict>
        </array>
        <key>CFBundleExecutable</key>
        <string>/path/to/your/word_handler.py</string>
    </dict>
    </plist>
    

    替换路径后运行launchctl load ~/Library/LaunchAgents/com.yourname.wordhandler.plist生效。

  • Linux:在~/.local/share/applications/创建word-handler.desktop:

    [Desktop Entry]
    Name=Word Handler
    Exec=/path/to/your/python3 /path/to/word_handler.py %u
    Type=Application
    MimeType=x-scheme-handler/word;
    

    运行update-desktop-database ~/.local/share/applications/后,设置word://协议默认打开程序为该文件。

方案二:VSCode任务+文件监听

如果不想修改链接格式,可通过VSCode任务系统配合Python脚本实现:

步骤1:配置VSCode任务

在.vscode/tasks.json中添加任务,打开不存在的.md文件时触发:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Generate Missing Word Entry",
            "type": "shell",
            "command": "python3 /path/to/your/generate_script.py ${file}",
            "problemMatcher": [],
            "runOptions": {
                "runOn": "folderOpen"
            },
            "condition": "!exists(${file})"
        }
    ]
}

步骤2:编写Python生成脚本

generate_script.py逻辑:

import sys
import os
from your_dictionary_module import set_entry

def main():
    target_file = sys.argv[1]
    # 从文件名提取单词(假设文件名是word.md)
    target_word = os.path.splitext(os.path.basename(target_file))[0]
    
    # 生成文件
    set_entry(target_word)
    
    # 通知VSCode刷新文件
    os.system(f"code -r {target_file}")

if __name__ == "__main__":
    main()

步骤3:绑定任务到打开事件

在keybindings.json中添加快捷键触发任务:

{
    "key": "ctrl+o",
    "command": "workbench.action.tasks.runTask",
    "args": "Generate Missing Word Entry",
    "when": "editorTextFocus"
}

也可使用Trigger Task on Save插件让任务自动触发。

注意事项

  • 确保set_entry()生成的文件路径与VSCode当前工作目录一致,否则VSCode可能无法找到文件。
  • 测试时先手动运行脚本,确认set_entry()能正常生成Markdown文件,再测试链接/任务触发。
  • 自定义协议注册后需重启VSCode才能生效。

内容的提问来源于stack exchange,提问作者Gourmando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:52:34