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

~/.config/fish/functions

但当我重新启动shell时,它们不会自动加载。什么好主意吗?


当前回答

@bozhidar-batsov给出了一个绝对完整的答案,帮助人们理解fish中别名/函数的内部工作原理。阅读fish文档中的别名,还有一个-s标志,使用起来非常方便,但我没有看到任何人提到它。

使用funcsave自动将由别名创建的函数保存到fish配置目录中。

定义和保存别名的一行解决方案(例如): 别名cl 'clear' -s。立即跨所有会话工作,并被持久化。

导航到~/。Config /fish/functions/,你会看到cl。鱼文件。

# Defined via `source`
function cl --wraps=clear --description 'alias cl clear'
  clear $argv;
end

其他回答

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

您可以在文件中只设置一个函数,并且文件名与函数名+添加.fish扩展名相同。

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

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

function name; function_content; end

then

funcsave name

你有用户定义的功能在控制台和自定义在相同的顺序。

@bozhidar-batsov给出了一个绝对完整的答案,帮助人们理解fish中别名/函数的内部工作原理。阅读fish文档中的别名,还有一个-s标志,使用起来非常方便,但我没有看到任何人提到它。

使用funcsave自动将由别名创建的函数保存到fish配置目录中。

定义和保存别名的一行解决方案(例如): 别名cl 'clear' -s。立即跨所有会话工作,并被持久化。

导航到~/。Config /fish/functions/,你会看到cl。鱼文件。

# Defined via `source`
function cl --wraps=clear --description 'alias cl clear'
  clear $argv;
end

使用别名即可。这里有一个基本的例子:

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

# Define alias in config file ( `~/.config/fish/config.fish` )
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。

感兴趣的人可以在官方手册中找到更多关于鱼类别名的信息。

如果你添加一个缩写而不是一个别名,你会得到更好的自动完成。在fish中,abbr更接近bash别名的行为。

abbr -a gco "git checkout"

将-添加一个扩展到git checkout的新缩写gco。

下面是自动完成功能的视频演示

这就是我如何定义一个新函数foo,运行它,并持久地保存它。

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo