Mhlink替换notepad为notepad3问题

vim 的替换

我也曾尝试过把 notepad.exe 替换为 vim ,用的也是硬链接的方式,https://www.howtogeek.com/howto/12617/how-to-replace-notepad-in-windows-7/

但是遇到以下问题:

notepad 的打开文件的方式,notepad.exe {文件路径}

这里的 {文件路径} 只能是一个文件的路径,如 c:/users/test.txt

替换为 vim 后,多数情况下都正常,只有当路径中含有空格时,vim 会将后面的参数看作以空格分开的多个文件。

# 创建 "a b.txt"
% notepad a b.txt

# 但是对于 vim ,则是创建 a, b.txt 两个文件
% vim a b.txt

由于 notepad 后面的 {文件路径} 只能有一个,我猜测,肯定是系统调用 notepad.exe 时,没有给后面的参数加上双引号。

我尝试过用 python 调用 vim 再打开 txt.

from sys import argv   # 读取命令行参数
from os import system  # 执行 cmd 命令

argvs = argv[1:]         # 得到除第 0 个参数外的所有参数
f_path = ' '.join(argvs) # ' '.join() 空格, 得到目标文件的路径


if f_path == '':  # 如果给出的路径为空,则创建新文件
    input('将直接打开 vim, 按回车键继续')
    system('vim')
else:             # 编辑指定文件
    cmd = 'vim ' + '"' + f_path + '"'
    system(cmd)

我将上面的代码编译并重命名为 notepad.exe 并替换真正的 notepad.exe,成功了。

所以我的猜测是对的,在传给 notepad.exe 文件路径时,后面的 {文件路径} 没有用引号括起来,而是 notepad.exe 自己括起来再打开。

以上可以实现右键菜单中的 Edit 打开文件也使用 vim

命令行使用命令修改文件类型与打开方式, assoc 与 ftype

这个思路很好。

我找到一个批量设置的方法:

举例:

替换 .txt 的默认程序

# 查看 .txt 绑定的文件类型
% assoc .txt
.txt=txtfile

# 查看 txtfile 的对应的打开程序
% ftype txtfile
txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1

# 修改 txtfile 对应的打开程序
% ftype txtfile="C:\2.vim_portable\gVimPortable.exe" "%1"
txtfile="C:\2.vim_portable\gVimPortable.exe" "%1"

以上能实现双击 .txt 使用 vim 打开,但是,不能实现右键菜单中的 Edit 也使用 vim。

reference

https://stackoverflow.com/a/60972216

1 个赞