如何在 windows 上下文菜单中正确添加 Sublime Text?

How to correctly add Sublime Text in windows context menu?

我想在上下文菜单中添加使用 Sublime Text 打开文件夹的功能,因为它在 VS Code 中是默认设置,我尝试了以下脚本:

@echo off
SET st3Path=C:\Program Files\Sublime Text 3\sublime_text.exe

rem add it for folders
@reg add "HKEY_CLASSES_ROOT\Folder\shell\Open with Sublime Text 3"         /t REG_SZ /v "" /d "Open with Sublime Text 3"   /f
@reg add "HKEY_CLASSES_ROOT\Folder\shell\Open with Sublime Text 3"         /t REG_EXPAND_SZ /v "Icon" /d "%st3Path%,0" /f
@reg add "HKEY_CLASSES_ROOT\Folder\shell\Open with Sublime Text 3\command" /t REG_SZ /v "" /d "%st3Path% \"%%1\"" /f
pause

这有效,但每次我打开一个文件夹时,所有以前的文件夹也会单独打开 windows。我能以某种方式修复它吗?

您应该使用 subl.exe 而不是 sublime_text.exe 来执行此操作; subl 用于与 Sublime 的 运行 实例交互(如果它还没有 运行 就会启动它),而 sublime_text 是应用程序本身。

无论如何,您的问题也(在某种程度上)与此设置有关,如此处所见,该设置默认处于打开状态:

    // Exiting the application with hot_exit enabled will cause it to close
    // immediately without prompting. Unsaved modifications and open files will
    // be preserved and restored when next starting.
    //
    // Closing a window with an associated project will also close the window
    // without prompting, preserving unsaved changes in the workspace file
    // alongside the project.
    "hot_exit": true,

启用此功能后,您可以随时退出 Sublime 并保存它的会话(包括未保存的文件更改、选择状态等),然后将其恢复到原来的状态。

因此,如果您之前在 windows 打开时退出 Sublime,那么当您执行上面的操作时,Sublime 将恢复它的会话(以及所有其他 windows),然后创建新的一.

关闭设置会阻止这种情况的发生,因此 Sublime 的每次启动都是 "clean" 状态,没有恢复的 windows 或状态。然而,这也意味着当您退出 Sublime 时,您需要确保保存更改,否则您的工作将会丢失。

根据您提供的信息和命令帮助中提供的信息,reg add /?,我认为您的批处理文件应该如下所示:

@Set "st3Path=%%Program Files%%\Sublime Text 3\sublime_text.exe"
@Set "regPath=HKCU\Software\Classes\Folder\shell\Open with Sublime Text 3"
@%__AppDir__%reg.exe Add "%regPath%" /VE /D "Open with Sublime Text 3" /F >NUL
@%__AppDir__%reg.exe Add "%regPath%" /V Icon /T REG_EXPAND_SZ /D "\"%st3Path%\",0" /F >NUL
@%__AppDir__%reg.exe Add "%regPath%\command" /VE /D "\"%st3Path%\" \"%%~1\"" /F >NUL

至于您的软件打开之前打开的'folders',我敢肯定,您可以直接在软件中或通过编辑其配置文件将软件配置为在启动时不重新打开以前的文件。因此,这超出了您的代码问题的范围,需要单独处理。

您会注意到我使用的是 'Current User' 注册表,而不是 'Local Machine',因为它不需要 'Run as administrator' 并且您不应该是全局的进行个性化更改;不是每个人都想要它们。 但是,如果您希望为所有用户执行此操作,只需将 2 行上的 HKCU 替换为 HKLM.

另请注意,我不了解您的软件本身,因此考虑到 OdatNurd 的回答中提供的信息,请考虑是否将 1 行的 sublime_text.exe 替换为 subl.exe

对于 windows 上的 sublime 4(不确定 sublime 3),你只需要再次 运行 安装文件.

它会问你是否要将它添加到上下文菜单。