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 排名:

shell排名
图 1

了解完背景,就让我开始 Fish shell 之旅吧!


二、Fish 简介及安装

Fish 是什么呢?

笔者先简单介绍一些什么是shell,为读者提供清晰地认识。

(一)、shell 简介

Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序。Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的 Shell 程序与其他应用程序具有同样的效果。[1]

常见的 shell 包括:Bash 、Korn Shell 、C Shell、Z Shell 等。

简单来说,关系图谱如下:

%%{ init: { 'theme': 'forest', 'themeVariables': { 'primaryColor': '#BB2528', 'primaryTextColor': '#fff', 'primaryBorderColor': '#7C0000', 'lineColor': '#F8B229', 'secondaryColor': '#006100', 'tertiaryColor': '#fff' } } }%% graph TB A[ 用户 ]==>B{ 应用层 } B==>C( Shell 层 ) C==>D( Linux 内核 ) style A fill:#2ff,fill-opacity:0.1,stroke:#faa,stroke-width:4px style D stroke:#000,stroke-width:8px;

介绍完 shell 是什么,我们便开始进入今天的正题:“Fish shell”。

(二)、Fish 简介

什么是 Fish 呢?鱼 @_@ ? 。其实 Fish 的全名叫做“"friendly interactive shell”, 即友好的交互式 Shell。如其名,对比 Bash 和 Z shell(zsh) 来说,Fish 具有更加优雅的定制化策略、开箱即用的便捷。相信您一定会对 Fish 爱不释手!

(三)、Fish 安装

1、下载及安装

在 Fish 官网上有详细的教程供各位读者安装在不同的 GNU/Linux 发行版上(当然,Fish 远不止此,还可以安装在 WindowsmacOSBSD 上),由于笔者的工作环境在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
图 2
  • 文件和命令高亮

    • Fish 会将文件设置为绿色,目录设置为蓝色。(当然,颜色设置您也可以自行配置)、
    • 当然,除了高亮当前目录下的文件与目录,还可以将命令高亮显示。比如输入“sudo apt”命令就会将“apt”进行高亮显示。
图 3
  • 生成数据制表页

    • Fish 可以解析各种格式的工具手册页,假如你不知道该命令下有什么作用,可以通过输入“Tab”键获得提示
图 4
  • 自动补全

    • 输入命令时,Fish 会自动显示上一次使用该命令历史记录(如果还希望查看之前的历史,还可以通过按"up”向上键查看)。
    • 假如,并没有该命令历史记录,则会显示可能使用的命令。
    • 使用Tab键进行补全,假如有多种结果,则会都列出来并显示给出理由。当然,除了补全命令外,还可以补全参数以及 Git 分支,是不是很优雅 b( ̄▽ ̄)d 。
  • 可视化 Web 配置页面

    • 笔者认为这绝对是 Fish 如此受欢迎的原因之一,可视化的操作为配置 Fish 提供很大的帮助。
图 5

解释:

进入可视化界面,仅需要在 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 页面通过编写函数实现我们想要的效果。

图 6

在这里,我仅做一个演示,望理解。

背景:每次启动 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

图 7

除了常规的显示当前目录外,还显示 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

Zsh 和 Bash 究竟有何不同

Fish shell 入门教程

Oh My Fish! 让你的 Shell 漂亮起来

oh-my-posh Docs


  1. Linux Shell ↩︎

posted @ 2023-02-13 23:11  木木亚伦  阅读(7470)  评论(3编辑  收藏  举报