Fish 3 中带有空格和参数的别名

Alias with spaces and arguments in Fish 3

我在 Linux 的 Windows 子系统上使用 fish 2,别名如下:

alias n++="/mnt/c/Program\ Files\ \(x86\)/Notepad++/notepad++.exe"
alias d "'/mnt/c/Program Files\ (x86)/Microsoft\ Visual\ Studio/2019/Enterprise/Common7/IDE/devenv.exe' /Edit"

现在我更新到 fish 3,但是别名停止工作了。当我输入“d FileName.cs”时,我收到以下消息:

fish: Unknown command: x86
in command substitution
    called on line 1 of file -
in function 'd' with arguments 'FileName.cs'
-: Unknown error while evaluating command substitution
in function 'd' with arguments 'FileName.cs'

似乎引号被忽略了。必须如何更改别名才能工作?

简短回答:这是别名函数中的错误,您的转义不一致。

"'/mnt/c/Program Files\ (x86)/Microsoft\ Visual\ Studio/2019/Enterprise/Common7/IDE/devenv.exe' /Edit"

简单的解决方法是完全转义它:

alias d "'/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2019/Enterprise/Common7/IDE/devenv.exe' /Edit"

或者,因为别名只是一个编写函数的(hacky)函数,所以跳过中间人而只编写一个函数:

function d
    "/mnt/c/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/devenv.exe" /Edit $argv
end

交互式定义并使用 funcsave d,或手动将其写入 config.fish 或名为 ~/.config/fish/functions/d.fish.

的文件