【发布时间】:2011-02-15 07:41:17
【问题描述】:
我想在fish中定义一些别名。显然应该可以在
中定义它们~/.config/fish/functions
但是当我重新启动 shell 时它们不会自动加载。有什么想法吗?
【问题讨论】:
-
下面的答案只有几票,在我看来是正确的。 ./config/fish/functions 中的自动加载似乎只有在每个文件有一个函数时才有效。
我想在fish中定义一些别名。显然应该可以在
中定义它们~/.config/fish/functions
但是当我重新启动 shell 时它们不会自动加载。有什么想法吗?
【问题讨论】:
@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
【讨论】:
我发现之前的答案和 cmets 不必要地不完整和/或令人困惑。我需要做的最低限度是:
~/.config/fish/config.fish。此文件可以选择为软链接。alias myalias echo foo bar。fish。要确认定义,请尝试type myalias。试试别名。【讨论】:
function name; command; end
【讨论】:
fish 首先执行 ~/.config/fish/config.fish 中的命令。 如果它不存在,您可以创建它:
vim ~/.config/fish/config.fish
并用:wq保存
第 1 步。制作配置文件(如.bashrc)
config.fish
第二步。就这样写你的别名;
别名 rm="rm -i"
【讨论】:
如果您添加 abbr 而不是 alias,您将获得更好的自动完成功能。在 fish 中,abbr 更接近于 bash 别名的行为。
abbr -a gco git checkout
将-add 扩展为git checkout 的新abbreviation gco。
【讨论】:
只需使用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。
有兴趣的人可以在the official manual了解更多关于鱼别名的信息。
【讨论】:
alias local "set -l" ;-(
~/.config/fish/config.fish 中,所以每次运行终端时它都会加载。
"$argv" 来处理带有空格的参数,就像我们使用bash "$@" 一样吗?
在 ~/.config/fish/functions 中创建一个名为 mkalias.fish 的函数并将其放入
function mkalias --argument key value
echo alias $key=$value
alias $key=$value
funcsave $key
end
这将自动创建别名。
【讨论】:
从 ~/.config/fish/functions
正确加载函数您只能在文件中设置 ONE 函数,并将文件名称与函数名称相同 + 添加 .fish 扩展名。
这种方式在打开的终端中更改文件内容重新加载功能(注意可能会出现一些延迟~1-5s)
如果你通过命令行编辑,那就这样
function name; function_content; end
然后
funcsave name
您在控制台中有用户定义的功能,并以相同的顺序自定义。
【讨论】:
对于后代来说,鱼的别名只是函数:
$ 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”
【讨论】:
funcsave foo。这会将函数保存到~/.config/fish/functions/foo.fish,第一次从新会话中调用它时,鱼会自动加载它。
alias foo="echo bar" 是迄今为止最简单的解决方案
将您的文件保存为 ~/.config/fish/functions/{some_function_name}.fish,它们应该会在您开始钓鱼时自动加载。
【讨论】:
这就是我定义一个新函数foo、运行它并永久保存它的方式。
sthorne@pearl~> function foo
echo 'foo was here'
end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo
【讨论】:
funced 编辑函数。例如。 funced foo.
funcsave {some_function_name}会将其保存在~/.config/fish/functions/{some_function_name}.fish
rg 代替。但是当我使用grep --version 命令时,它并没有给出类似于rg --version 的输出。为什么?! @Hjulle
alias grep=rg、funcsave grep 和 grep --version?