如何在fish shell中创建别名

3

我试图为ls创建一个别名(基本上只是映射到ls -lah)。 我尝试了以下代码,但它不起作用:

function ls

ls -lah

end

funcsave ls

但当我调用它时,我得到这个消息:

函数'ls'立即调用自己,这将导致无限循环。 在函数'ls'中 在标准输入上调用

3个回答

5
你要找的是 command 命令。
我还建议将任何参数(存储在$argv中)传递给别名命令。
因此,你的示例应为:
function ls
  command ls -lah $argv
end

使用一个简单的命令来完成所有这些,你可以直接使用alias命令。

alias ls "command ls -lah"

  • 您可以使用complete命令告诉fish,您的别名使用与被别名的命令相同的完成方式。
    balias插件可作为alias的替代品,实现了这一点。

  • fish还提供abbr命令。它的工作方式略有不同,它会将缩写的命令扩展为完整命令,并在命令行中显示,此时fish无法给出所有的自动补全建议。


非常感谢!别名/函数现在可以工作了!你有任何想法为什么通过函数调用ls -lah的输出的“着色”已经消失了吗? - ners10100100
我的猜测是,你的ls命令已经被另一个函数包装了。我个人使用grc,这样我就可以看到完全相同的效果。 首先,在没有别名的fish shell中运行functions ls,看看是否有该名称的某些函数。如果有,则可以像这样重命名它:functions -c ls ls_color,然后在您的别名函数中,不要使用command ls $argv,而是调用ls-color $argv - oranja
1
你的 ls 函数是否缺少 command 命令? - leymannx
谢谢你向我介绍abbr。那个东西真是太棒了! - Harm

3
你需要使用关键字command。同时,将函数的参数传递给ls
function ls
    command ls -lah $argv
end

0
如果您需要创建“ls”的别名,则上述答案是正确的。然而,fish已经有一个针对“ls -lah”的命令,即“la”。

好的!谢谢,我不知道那个! :) - ners10100100
如果您想查看所有与fish相关的命令,可以在终端中输入fish_config,这将启动Web配置,并在功能选项卡下找到大量信息。 - keramzyt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接