245

我想在fish中定义一些别名。显然应该可以在

~/.config/fish/functions

但是当我重新启动外壳时它们不会自动加载。有任何想法吗?

4

11 回答 11

437

只需使用alias. 这是一个基本示例:

# Define alias in shell
alias rmi "rm -i"

# Define alias in config file
alias rmi="rm -i"

# This is equivalent to entering the following function:
function rmi
    rm -i $argv
end

# Then, to save it across terminal sessions:
funcsave rmi

最后一个命令创建文件~/.config/fish/functions/rmi.fish

有兴趣的人不妨在官方手册中了解更多关于鱼别名的信息。

于 2010-05-04T05:32:29.323 回答
126

这就是我定义一个新函数foo、运行它并永久保存它的方式。

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo
于 2010-05-04T05:36:43.397 回答
63

对于后代,鱼别名只是函数:

$ alias foo="echo bar"
$ type foo
foo is a function with definition
function foo
    echo bar $argv; 
end

删除它

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find “foo”
于 2014-03-20T15:54:43.847 回答
29

fish 首先执行 ~/.config/fish/config.fish 中的命令。如果它不存在,您可以创建它:

vim ~/.config/fish/config.fish

并保存它:wq

第1步。制作配置文件(如 .bashrc)

配置鱼

第2步。像这样写你的别名;

别名 rm="rm -i"

于 2017-05-16T06:50:54.297 回答
24

如果您添加一个abbr而不是一个,alias您将获得更好的自动完成功能。在 fishabbr中更接近地匹配 bash 别名的行为。

abbr -a gco git checkout

将添加-a一个新的abbreeviationgco扩展为git checkout

这是生成的自动完成功能的视频演示

于 2019-03-27T04:04:13.777 回答
16
  1. 如果~/.config/fish/中没有config.fish,请制作它。
  2. 在那里你可以写你的函数。function name; command; end
于 2011-10-01T13:46:16.537 回答
15

将您的文件另存为~/.config/fish/functions/{some_function_name}.fish,当您开始钓鱼时,它们应该会自动加载。

于 2013-02-19T16:38:30.333 回答
13

~/.config/fish/functions 正确加载函数

您只能在文件中设置一个函数,并将文件名称与函数名称相同 + 添加 .fish 扩展名

这种方式在打开的终端中更改文件内容重新加载功能(注意可能会出现一些延迟~1-5s)

这样,如果您通过命令行进行编辑

function name; function_content; end

然后

funcsave name

您在控制台中有用户定义的功能,并以相同的顺序定制。

于 2014-07-04T21:19:59.437 回答
4

在 ~/.config/fish/functions 中创建一个名为 mkalias.fish 的函数并将其放入

function mkalias --argument key value
  echo alias $key=$value
  alias $key=$value
  funcsave $key
end

这将自动创建别名。

于 2017-05-07T10:49:19.043 回答
4

@bozhidar-batsov 给出了一个绝对完整的答案,可以帮助人们理解 fish 中别名/函数的内部工作原理。为别名阅读fish文档,还有一个-sflag使用起来确实很方便,但是没看到有人提过。

-s 或 --save 使用 funcsave 自动将别名创建的函数保存到您的 fish 配置目录中。

定义和保存别名的一站式解决方案(例如) alias cl 'clear' -s:. 立即适用于所有会话并保持不变。

导航到~/.config/fish/functions/,您将看到cl.fish文件。

# Defined via `source`
function cl --wraps=clear --description 'alias cl clear'
  clear $argv;
end
于 2021-03-17T15:20:43.143 回答
2

我发现先前的答案和评论不必要地不完整和/或令人困惑。我需要做的最低限度是:

  1. 创建~/.config/fish/config.fish. 该文件可以选择是软链接。
  2. 添加到它的行alias myalias echo foo bar
  3. 重启fish。要确认定义,请尝试type myalias. 试试别名。
于 2020-11-29T03:16:23.803 回答