我正在尝试不同的编辑器来替代记事本,一些轻量但具有现代编辑功能(例如多个光标)的编辑器。我使用 Notepad3 的时间最长,我不喜欢 Notepad++,现在正在尝试 Atom。我喜欢 VSCode 的编辑体验,所以我期待类似的体验。
我像往常一样通过注册表进行了替换:
[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="\"C:\\Program Files\\Atom\\atom.exe\""
(不要介意路径,我想要系统级安装)
它在大多数情况下都能正常工作,但我注意到它对包含空格的文件存在问题。它将每个 blob 视为单独的文件名。例如,通过 Windows 资源管理器打开具有此路径的文件:
C:\Program Files\Atom\test file.txt
使用以下打开方式打开 atom:
C:\Program
C:\WINDOWS\system32\NOTEPAD.EXE
C:\Program Files\Atom\Files\Atom\test
C:\Program Files\Atom\file.txt
这显然是不对的。从命令行打开可以正常工作,正如您预期的那样。
我可以使用某些设置来让它工作吗?
答案1
经过研究,似乎打开记事本的文本文件的默认快捷方式没有引用文件路径,显然记事本允许这样做,并且能够按预期打开文件。因此,不是使用一个包含路径的参数,而是使用通常的参数解析规则拆分参数。我这里有几个选择。
我可以更新注册表值以引用文件名参数:
[HKEY_CLASSES_ROOT\txtfile\shell\open\命令]
缺点是我必须对所有使用记事本且不引用的扩展执行此操作。
否则,我可以创建一个程序或脚本来读取所有参数并将它们连接成一个参数,然后使用构造的路径启动原子。
@echo off
for /f "tokens=1,* delims= " %%a in ("%*") do start "Atom" atom "%%b"
注意:我学到了惨痛教训,你应该始终在第一个参数中为启动命令提供一个标题,以确保要运行的进程不会被误认为是标题。这在我的计算机上造成了一些严重的 fork 炸弹,我花了一些时间才弄清楚。
编辑:使用一段时间后,我发现它不够可靠。作为快速、通用的解决方案,它总体上不起作用。在摆弄注册表以更新调用记事本引用参数的所有值后,它仍然没有按照我想要的方式工作。
理想情况下,会有一个简单的实用程序应用程序来收集参数并以标准方式将其传递给首选应用程序。我可以自己编写代码,但选择使用特定于这种情况的代码。这只是插入自身以替换记事本调用并转发到配置的替换。这可能是我有一天会重新审视的东西。