Fish Shell 配置笔记
记录一下关于fish
的使用和配置。
概述
fish
和zsh
是最常见的两种用于替代默认bash
的现代shell,两者的定位有点区别:
fish
对用户友好,开箱即用,不需要复杂配置,缺点是语法与bash
不兼容;zsh
兼容bash
的语法,缺点是必须进行较复杂的配置,否则和bash
使用体验差不多。
对这些shell的主题配置,通常都会基于oh-my-zsh
、oh-my-fish
以及pwsh
的oh-my-pwsh
这些美化工具进行,
但是鉴于fish
的开箱即用特点,我决定不使用美化工具,默认的就可以了。
由于fish
不兼容bash
的语法,因此通常不建议将其作为默认shell使用,而是在登陆后手动开启fish
1
fish
这样我们可以继续使用bash
的.bashrc
进行环境变量等配置,fish
也会自动继承相应的配置。
日常操作中最好也是继续使用bash
脚本,通过shebang的方式指定使用bash
。
使用
fish
默认支持实时更新的彩色显示,对于无效命令使用红色进行警告,有效命令则显示为蓝色,对于有效路径会显示下划线提示。
(这些默认行为都可以通过配置修改)
fish
会自动给出命令提示,以灰色显示在光标之后,可以使用向右方向键自动补全,使用tab
则会列出更多的候选项,命令提示会自动学习历史记录。
fish
中对于含空格的参数,可以使用\
转义或者使用单引号、双引号包裹。
1
2
3mkdir My\ Files
cp ~/Some\ File 'My Files'
ls "My Files"
fish
直接支持通配符,管道和输出重定向等操作,基本和bash
相同。
还有很多使用细节,直接查看Fish 官方文档即可。
fish vs bash
下面是关于fish
和bash
的一些常用语句的比较。
变量赋值:在bash
中通过=
对变量赋值:
1
x=10
fish
中则通过set
命令对变量赋值:
1 | set x 10 |
设置全局环境变量:在bash
中用export
命令设置全局环境变量:
1
export PATH=$PATH:~/flutter/bin
在fish
中,可以通过用 set -x
命令设置全局环境变量: 1
set -x PATH $PATH ~/flutter/bin
fish
也提供了export
命令,但是用法可能和bash
不一样。
在fish
中,一个变量有多个值的时候,需要用空格隔开。(其实就是列表)
获取命令输出:在bash
中获得一个命令输出的用法有两种
1
2osType=$(uname -s)
osType=`uname -s`
在fish
中直接使用括号即可 1
set osType (uname -s)
别名:在bash
中使用alias
设置别名
1
alias rhino='java -jar ~/rhino-1.7.11.jar'
在fish
中使用 abbr -a
设置命令缩写
1
2
3abbr -a <new> <old>
abbr -a rhino java -jar ~/rhino-1.7.11.jar
在执行命令时,缩写部分会被直接替换掉,并且替换是在命令行中通过自动补全的方式进行的,在历史记录中看到的都是替换后的命令。
也可以使用 alias
设置别名 1
alias rmi="rm -i"
但是需要注意的是:在fish中的别名实质上是自动创建了一个函数,例如上面的别名相当于
1
2
3function rmi
command rm -i $argv
end
配置
在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
2function fish_greeting
end
除此之外,fish
还会把一部分配置变量保存到~/.config/fish/fish_variables
文件中,通常使用set -U
或者浏览器设置的主题颜色等会保存在这里,例如set -U fish_greeting
也可以达到关闭欢迎语的效果。
这里我们只关注了用户级的配置文件,实际上还有很多系统级配置文件。
补充
fisher也可以使用插件,这里首先下载插件管理器fisher,在fish中执行如下命令
1
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
然后下载跳转插件z
1
fisher install jethrokuan/z