记录一下关于fish的使用和配置。

概述

fishzsh是最常见的两种用于替代默认bash的现代shell,两者的定位有点区别:

  • fish对用户友好,开箱即用,不需要复杂配置,缺点是语法与bash不兼容;
  • zsh兼容bash的语法,缺点是必须进行较复杂的配置,否则和bash使用体验差不多。

对这些shell的主题配置,通常都会基于oh-my-zshoh-my-fish以及pwshoh-my-pwsh这些美化工具进行, 但是鉴于fish的开箱即用特点,我决定不使用美化工具,默认的就可以了。

由于fish不兼容bash的语法,因此通常不建议将其作为默认shell使用,而是在登陆后手动开启fish

1
fish

这样我们可以继续使用bash.bashrc进行环境变量等配置,fish也会自动继承相应的配置。

使用

fish默认支持实时更新的彩色显示,对于无效命令使用红色进行警告,有效命令则显示为蓝色,对于有效路径会显示下划线提示。 (这些默认行为都可以通过配置修改)

fish会自动给出命令提示,以灰色显示在光标之后,可以使用向右方向键自动补全,使用tab则会列出更多的候选项,命令提示会自动学习历史记录。

fish中对于含空格的参数,可以使用\转义或者使用单引号、双引号包裹。

1
2
3
mkdir My\ Files
cp ~/Some\ File 'My Files'
ls "My Files"

fish直接支持通配符,管道和输出重定向等操作,基本和bash相同。

还有很多使用细节,直接查看Fish 官方文档即可。

配置

fish中发挥类似.bashrc角色的文件是~/.config/fish/config.fish,其中的内容在fish启动时被执行。

如果觉得内容放在一个文件中比较复杂,可以将其拆分为若干个.fish文件,存放在~/.config/fish/conf.d/目录下, 这些文件的载入顺序在config.fish之前。

我们还可以定义专门的function,对函数文件要求以function名称作为文件名,加上后缀.fish,存放于~/.config/fish/functions/目录下,这些函数都会在fish启动时自动加载,载入顺序也在config.fish之前。 我们可以添加fish_greeting.fish文件,使用空函数代替默认的欢迎语

1
2
function fish_greeting
end

除此之外,fish还会把一部分配置变量保存到~/.config/fish/fish_variables 文件中,通常使用set -U或者浏览器设置的主题颜色等会保存在这里,例如set -U fish_greeting也可以达到关闭欢迎语的效果。

这里我们只关注了用户级的配置文件,实际上还有很多系统级配置文件。