Linux终端下使用Fish shell并美化
GNU/Linux 终端下使用 Fish shell 并美化
一、背景
相信大多数开发者在使用 GNU/Linux 的同时也免不了使用终端这个“黑框框”😃。对于绝大多数终端而言,默认的 shell 皆为bash
。原生的 bash 看起来并不“现代化”,哦~这不免比较糟糕!
于是,在此基础上。开发者们通过选择其他 shell 代替 bash 以获得更佳的体验。比如:zsh shell
,虽然原生的 zsh shell 有许多功能并不具备,但是在众多开发者的应用美化下,zsh shell 看起来很“现代化”。But 😃,虽然 zsh shell 深受开发者的喜爱,但是 zsh 整体加载性能并不是很快,同时需要依靠oh-my-zsh
的配置才能使得 zsh 更为优雅,配置相对麻烦。
这就引出我们今天的主角“Fish shell”,相较于 zsh shell,Fish shell
具有一下特点:
- 开箱即用,内置自动提示、语法高亮、自动补全、搜索历史等功能,无需添加额外插件。
- 可视化的 Web 配置功能。
- 可以使用人机界面数据完成制表页。
- 具有
Oh-My-Fish
shell 框架,若 Fish shell 并不能满足您的需要,可以使用该框架进行更深入配置。 - 相较于
zsh shell
个更加高效的prompt
(命令提示符)加载速度。
这里,列出 Slant 网站“What are the best Linux shells?”6 佳 shell 排名:
了解完背景,就让我开始 Fish shell 之旅吧!
二、Fish 简介及安装
Fish 是什么呢?
笔者先简单介绍一些什么是shell
,为读者提供清晰地认识。
(一)、shell 简介
Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序。Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的 Shell 程序与其他应用程序具有同样的效果。[1]
常见的 shell 包括:Bash 、Korn Shell 、C Shell、Z Shell 等。
简单来说,关系图谱如下:
介绍完 shell 是什么,我们便开始进入今天的正题:“Fish shell”。
(二)、Fish 简介
什么是 Fish 呢?鱼 @_@ ? 。其实 Fish 的全名叫做“"friendly interactive shell”, 即友好的交互式 Shell。如其名,对比 Bash 和 Z shell(zsh) 来说,Fish 具有更加优雅的定制化策略、开箱即用的便捷。相信您一定会对 Fish 爱不释手!
(三)、Fish 安装
1、下载及安装
在 Fish 官网上有详细的教程供各位读者安装在不同的 GNU/Linux 发行版上(当然,Fish 远不止此,还可以安装在 Windows、macOS、BSD 上),由于笔者的工作环境在deepin(在V20版本下为基于Debian的操作系统)上,笔者仅对笔者使用的 GNU/Linux 发行版环境做详细介绍,望海涵。
-
1、首先我们,需要下载 Fish 下载 官网 提供的 deb 包(截止2023/7/27)
我们得到的包名为“fish_3.6.1-1_amd64.deb”。
-
如果读者使用的操作系统具备图形化界面,当然可以直接使用包管理器进行安装。假如仅有命令行界面,这可以使用命令:“sudo dpkg -i fish_3.6.1-1_amd64.deb”进行安装。
2、应用 Fish
由于大部分的终端默认 shell 使用的是 Bash,所以我们还需要修改当前使用的 shell 为 Fish。
-
1、我们首先通过命令“echo $SHELL”查看当前 shell:
$ echo $SHELL /usr/bash
-
2、输入命令“
cat /etc/shells
”查看操作系统中存在的 shell 有那些:$ cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash /bin/zsh /usr/bin/zsh /usr/bin/fish <-- 我们发现Fish已经安装
-
3、切换 shell,在这里通过
chsh
命令实现$ chsh -s /usr/bin/fish
假如,同时希望
root
模式下也可以使用该 shell,则可以在该命令后面加上root
关键字$ chsh -s /usr/bin/fish root
-
4、重启电脑,这个时候,Fish 应该已经安装完毕!
三、Fish 的特别之处
Fish 有什么特别之处?
简单易用
相对于需要进行大量的配置才能获得良好体验的 ZSH,Fish 原生附带有最为广泛使用的特性,比如:自动提示、语法高亮等等。同时其配置设置的语法清晰明了,通过模块化和 Web 可视化配置,能为您节省大量时间。
-
自动提示。
-
Fish 会通过显示灰色提示,提醒您最近浏览历史,和您可能希望浏览的内容。如果命令有误,则会将命令设置为红色提醒您。
-
除了显示命令是否正确外,Fish 还可以显示你所搜索的目录是否存在、拼写是否正确、括号是否匹配等等。
-
哦~,除此之外,如果你觉得 Fish 的色彩显示并不美观,还可以自行配置美化。在 Fish 官网有详细的教程。
-
-
文件和命令高亮
- Fish 会将文件设置为绿色,目录设置为蓝色。(当然,颜色设置您也可以自行配置)、
- 当然,除了高亮当前目录下的文件与目录,还可以将命令高亮显示。比如输入“sudo apt”命令就会将“apt”进行高亮显示。
-
生成数据制表页
- Fish 可以解析各种格式的工具手册页,假如你不知道该命令下有什么作用,可以通过输入“Tab”键获得提示
-
自动补全
- 输入命令时,Fish 会自动显示上一次使用该命令历史记录(如果还希望查看之前的历史,还可以通过按"up”向上键查看)。
- 假如,并没有该命令历史记录,则会显示可能使用的命令。
- 使用
Tab
键进行补全,假如有多种结果,则会都列出来并显示给出理由。当然,除了补全命令外,还可以补全参数以及 Git 分支,是不是很优雅 b( ̄▽ ̄)d 。
-
可视化 Web 配置页面
- 笔者认为这绝对是 Fish 如此受欢迎的原因之一,可视化的操作为配置 Fish 提供很大的帮助。
解释:
进入可视化界面,仅需要在 Fish shell 下输入“
fish_config
”命令即可。在可视化 Web 页面下,您可以设置主题颜色(包括自定义)、提示符样式、函数、变量、查看历史命令、快捷键、设置缩写
-
简单的配置
- Fish 通过函数封装命令或者起别名。同时 Fish 使用的语法也很简单,比如常见的:“if”、“switch”、“for”、“while”等。
相信你一定会爱上 Fish 的!
四、Fish 的配置与美化
注意:
由于 Fish 对于笔者来说已经足够优秀了,所以笔者仅仅对 Fish 进行简单的微调和美化,如果还希望更加深入了解 Fish,可以直接在输入help
命令,查看 Fish 的帮助文档。请见谅。
终于来到本文的第二个关键点了!体验完 Fish 是不是觉得很 nice?
假如,您觉得 Fish 还差一点味道。那么欢迎来到 Fish 的配置与美化。 😉
本节共分为三节,分别介绍:对 Fish 进行配置、oh-my-fish 使用、oh-my-posh 使用。
那么,开始吧!
(一)、对 Fish 进行配置
Fish 的配置文件位于~/.config/fish/config.fish
。
由于,Fish 使用函数对命令进行封装。我们也可以直接在可视化 Web 页面通过编写函数实现我们想要的效果。
在这里,我仅做一个演示,望理解。
背景:每次启动 Fish 时都会出现简介,笔者觉得比较烦。希望能够隐藏或者自定义简介。
步骤:
-
1、输入命令:
help
查看官方 帮助文档。= =b -
2、在配置文件
~/.config/fish/config.fish
可以通过命令“set -U fish_greeting”关闭开始简介。 -
3、如果想要自定义简介,则可以输入“fish_config”命令打开可视化 Web 页面,在
functions
窗口找到“fish_greeting”函数,并输入代码:# Defined in /home/AaronLi/.config/fish/functions/fish_greeting.fish @ line 1 function fish_greeting echo '您想输入的文字' end
修改完函数,再在配置文件
~/.config/fish/config.fish
中输入命令“set -g fish_greeting”即可。
Fish 的函数封装方式看起来更具模块化,但是任何事务都具有两面性。或许在别人看来纯粹徒增烦恼。但是不管怎么样,希望大家都对 Fish 的配置有一个初步地了解。
(二)、使用 Oh-My-Fish
相信大家都听说过“Oh-My-Zsh”,对“Oh-My-Fish”可能有些陌生,其实“Oh-My-Fish”和“Oh-My-Zsh”一样都是基于对应 shell 所设计的框架,通过该框架您可以自行安装所需扩展、Shell 外观等。
1、安装 Oh-My-Fish
使用以下命令即可:
curl -L https://get.oh-my.fish | fish
2、使用 Oh-My-Fish 进行美化
通过使用“omf list”命令,可以查看 Fish 中已经安装的插件和主题。比如:我并未安装任何主题,则会显示:
$ omf list
Plugins
fish-spec omf
Themes
default
如果想要更改背景,则可以使用:
omf theme
查看 Oh-My-Fish 全部背景和已经安装背景。如果希望查看背景具体效果,则可以 点击这里
有关主题的一些命令,可以查看:
omf install 主题名 #安装主题
omf theme 主题名 #更换主题
omf search 主题名 #搜索主题
omf search -t 主题名 #限制搜索主题,比如 omf search -t cha 便仅会搜索含有 cha 名的主题
同样,插件的使用命令也类似:
omf install 插件名 #安装主题
omf theme 插件名 #更换主题
omf search 插件名 #搜索主题
omf search -p 插件名 #限制搜索插件
如果还想了解更多信息,可以查看 Oh-My-Fish 官方 README 文件,也可以阅读 Linux 中国推出的 Oh My Fish! 让你的 Shell 漂亮起来。
3、使用 oh-my-posh 美化
注意:
使用 oh-my-posh 需要 Fish 版本高于或等于 V3.4.0
可以使用命令“fish --version”查看当前 Fish 版本
oh-my-posh 是什么?用官方原话来说是:“A prompt theme engine for any shell.”,适用于任何 shell 的提示主题引擎。
如其名,oh-my-posh 对主流的 shell 都进行了配置。笔者喜欢使用 oh-my-posh 的原因便因其美丽的主题和对 Git 的良好支持。
比如,笔者现在所使用的一款主题clean-detailed
:
除了常规的显示当前目录外,还显示 CPU 使用率、内存所占容量、命令执行时间以及最为重要的 Git 信息显示。
是不是觉得挺不错的。づ ̄ 3 ̄) づ
就让我们开始 oh-my-posh 美化之路吧!
注意:
在本次配置过程中,会进行详略讲解。如果读者并未明白某个配置过程,可以查阅「官方文档」
(1)、下载 oh-my-posh
# 注意:此 CPU 架构为 amd64
sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh
# 注意:此 CPU 架构为 arm64
sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-arm64 -O /usr/local/bin/oh-my-posh
# 注意:此 CPU 架构为 arm
sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-arm -O /usr/local/bin/oh-my-posh
并设置其权限:
sudo chmod +x /usr/local/bin/oh-my-posh
解释:
如果读者不知晓自己电脑的处理器体系结构,可以在命令行输入命令“uname -m”查看。
比如:笔者输出结果为“X86_64”,那么我就应该选择“amd64”。
以上是笔者自己的做法,但其实官方提供了一个脚本,但是由于其脚本下载github源文件速度太慢所以被舍弃。
以下是官方的做法:
curl -s https://ohmyposh.dev/install.sh | bash -s
# 上述是官方原本的写法,如果你不是root用户,请使用下述方式:
# curl -s https://ohmyposh.dev/install.sh | sudo bash -s
默认的安装路径为:/usr/local/bin/oh-my-posh
,可以自己设置路径,比如我希望在~/bin
下,那么则应该写为:
curl -s https://ohmyposh.dev/install.sh | sudo bash -s -- -d ~/bin
注意,如果你安装的路径为自定义,则需要在~/.config/fish/config.fish
下,也就是在fish的配置文件下设置oh-my-posh的PATH。
(2)、下载主题
# 创建主题存放文件夹,读者可以根据需要自定义存放位置,
# 如果自定义修改位置,那么后续的命令也需要做出相应更改
mkdir ~/.poshthemes
# 获取主题zip文件并存放至对应主题文件夹(如果使用该命令下载zip较慢,
# 可以通过复制该URL使用“github文件加速下载下载”文件
wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/themes.zip -O ~/.poshthemes/themes.zip
# 解压主题压缩包文件
unzip ~/.poshthemes/themes.zip -d ~/.poshthemes
# 将所有主题文件设置可读权限
chmod u+rw ~/.poshthemes/*.omp.*
# 删除主题压缩包
rm ~/.poshthemes/themes.zip
(3)、安装字体
因为 oh-my-posh 的主题需要显示字体图标,所以需要使用 Nerd Fonts“家族”的字体。在 oh-my-posh 官方文档推荐使用 Meslo LGM NF 字体,但是根据笔者的经验,使用其他“Nerd Fonts”也是没有问题的。比如笔者使用的字体便是“JetBrainsMono Nerd Font”,随读者自己的爱好。
除了手动下载安装字体外,oh-my-posh 也提供在线安装:
sudo oh-my-posh font install
通过移动上下键选择自己想要安装的字体即可。
(5)、安装主题
oh-my-posh 安装 Fish 也比较简单,
# 注意“~/.poshthemes/jandedobbeleer.omp.json”,根据实际安装情况选择读者自己设置的 oh-my-posh 主题位置而定,在此仅作为参考。
oh-my-posh init fish --config ~/.poshthemes/jandedobbeleer.omp.json | source
注意
主题可以在官网查看,当读者看到适合自己的主题时,可以暂时通过命令“oh-my-posh init fish --config ~/.poshthemes/看到的主题名.omp.json | source”查看使用效果,如果合适则直接将该命令添加到fish的配置文件中即可。
重载 Fish 配置文件,那么 oh-my-posh 便成功完成美化。
. ~/.config/fish/config.fish
至此,便结束 Fish 的配置与美化。
如果,读者对配置教程有不明白地方,可以阅读下方的参考文档。
参考
Fish vs. Zsh vs. Bash 以及为什么要改用 Fish