Fish Shell 的使用特性和優勢
引言
當提到命令列介面(CLI)時, 我們通常會想到一種強大而高效的方式來與計算機進行互動。在眾多的 Shell 中最常用的就數 Bash 和 zsh 了,除此之外還有一顆閃耀的明星 Fish Shell,它以其現代化的設計和強大的特性而備受讚譽,成為許多開發人員和系統管理員鍾愛的選擇,正如官網宣傳的 Finally, a command line shell for the 90s, 翻譯過來就是 Fish Shell 是一個為 90 後準備的 Shell,它主要特性如下:
-
安裝時就預設整合了很多需要的功能,無法進行大量配置
-
命令列語法高亮,錯誤會顯示紅色
-
智慧提示
-
視覺化配置: 可以使用 Web 網頁的進行終端配置
一、安裝
brew install fish
上圖中框出的部分是 fish 的安裝路徑, 這裡最好簡單記下, 後面需要用到
二、切換
2.1 手動切換
fish
這裡如果需要退出 Fish Shell 可執行 exit 命令進行退出
exit
2.2 設定為預設 Shell
sudo vim /etc/shells
下面我們透過 chsh -s 來切換預設 Shell
chsh -s /opt/homebrew/Cellar/fish/3.6.1/bin/fish
切換完後, 我們重新開一個終端將預設使用 Fish Shell
如果需要切換回去, 只需需要執行 chsh -s /bin/zsh 或 chsh -s /bin/bash 即可
chsh -s /bin/zsh
三、好用特性介紹
3.1 命令列語法高亮
1、有效命令預設高亮為藍色
2、無效命令預設高亮為紅色
3、對於有效路徑會有下劃線提示
4、不匹配的括號或者逗號
3.2 自動補全建議
如果要採納建議, 可以按下
->
如果只採納一部分, 可以按下
Alt + ->
3.3 Tab 選項
如果我們需要想檢視給定命令是否還有其他可能性, 那麼在輸入幾個字母后, 只需按一下 Tab 鍵即可
1、如下是輸入完 git 直接按 Tab 的結果,它直接列出了所有可能命令以及描述
2、這裡是輸入 git 以及空格後按下 Tab 的結果, 它將給出 git 的所有可能命令以及描述
-
後按下 Tab 的結果,它將給出 git commit 的所有可能引數以及描述
3.4 基於 Web 的配置器
Fish Shell 相對於其他 Shell 有一個比較有意思的功能, 就是可以透過瀏覽器來配置或檢視 Shell 的主題、提示、功能函式、常量、歷史記錄、快捷鍵
1、首先我們需要透過 fish 進入 Fish Shell, 然後再執行 fish_config 命令,這時將自動開啟一個配置頁面:
fishfish_config
3、第二部分則是設定命令列前面的提示符,同樣的官方預設給了很多種選擇, 特別的是配置頁面沒有提供自定義 提示符 的一個入口,如果需要自定義則需要自己修改配置檔案,編寫函式:
4、第三部分則是列出了所有的功能函式, 可以理解是所有可用命令的實現原始碼, 這裡則不允許進行修改:
5、第四部分則是列出了所有的常量,這裡也不允許進行修改:
6、第五部分則是記錄了所有用過的命令,這裡可對歷史記錄進行一個刪除:
7、第六部分則是快捷鍵的一個繫結,這裡也是不允許進行修改:
3.5 獨自的自定義配置檔案
Fish Shell 為使用者提供了一個獨立的配置檔案(~/.config/fish/config.fish), 我們可以在這個檔案裡面寫入各種自定義函式、別名、常量…,在每次啟動 Fish Shell 後,該檔案將被自動載入進來,這裡我們可以透過 cat 來檢視該配置檔案
$ cat ~/.config/fish/config.fish
if status is-interactive
# Commands to run in interactive sessions can go here
end
vim ~/.config/fish/config.fish
+ alias g "git"
+ alias gst "git status"
+ alias grs "git reset --soft"
+ alias grh "git reset --hard"
+ alias gb "git branch"
+ alias gba "git branch -a"
+ alias gl "git pull"
if status is-interactive
# Commands to run in interactive sessions can go here
end
3.6 易懂的語法
Fish Shell 的語法更偏向於高語言, 語法相對來說學起來比較快, 閱讀起來也很清晰, 下面是幾種常見語法的寫法, 更多語法可查閱官網。
1、if 語句
if grep fish /etc/shells echo Found fishelse if grep bash /etc/shells echo Found bashelse echo Got nothingend
2、switch 語句
switch (uname) case Linux echo Hi Tux! case Darwin echo Hi Hexley! case FreeBSD NetBSD DragonFly echo Hi Beastie! case '*' echo Hi, stranger!end
3、while 迴圈
while true echo "Loop forever"end
4、for 迴圈
for file in *.txt cp $file $file.bakend
5、函式
# 定義 ll 函式(命令)
function ll
ls -lhG $argv
end
# 重新定義 ls 命令
# 函式體內的 ls 之前, 要加上 command, 否則會因為無限迴圈而報錯
function ls
command ls -hG $argv
end
四、自定「提示符」
方法: 在配置檔案 ~/.config/fish/config.fish 中,新增一個 fish_prompt 函式用於定義提示符
3、下面我們開始定製 提示符,這裡我直接給出完整程式碼,具體講解可以看註釋
關鍵語法說明:
2>/dev/null 作用是, 命令悄摸摸執行不輸出任何日誌
set 用於設定變數, -g 表示全域性變數, -f 表示函式內部變數, 更多內容可查閱 官方文件
# 是否是 git 倉庫, 來自 oh-my-fish:
function git_is_repo -d "檢測當前目錄是否是 git 倉庫"
test -d .git
or begin
set -l info (command git rev- parse --git-dir --is-bare-repository 2>/dev/null)
and test $info[ 2] = false
end
end
# 獲取分支名, 來自 oh-my-fish:
function git_branch_name -d "獲取當前分支名"
git_is_repo; and begin
command git symbolic- ref --short HEAD 2> /dev/null;
or command git show- ref --head -s --abbrev | head -n1 2> /dev/null
end
end
# 終端提示符顯示
function fish_prompt -d "終端提示符"
# 1. 時間
set -f __prompt_data (set_color -o 46C74B) "["( date "+%H時%M分%S秒")(set_color -o 46C74B) "]"
# 2. 路徑
set -f __prompt_pwd " "(set_color 00FF00)(prompt_pwd --full-length-dirs=10)
# 3. 獲取 git 資訊
if git_is_repo
# 分支狀態圖示配置, 更多參考:
set -g __fish_git_prompt_char_stagedstate "●" # 存在暫存檔案, 圖示
set -g __fish_git_prompt_char_dirtystate "✚" # 存在未追蹤檔案, 圖示
set -g __fish_git_prompt_char_cleanstate "✔" # 專案乾淨圖示
# 呼叫 __fish_git_prompt 讀取 git 相關資訊, 參考
__fish_git_prompt 2 >/dev/ null;
# 提交狀態
set -f __informative_status (set_color -o bryellow)(__fish_git_prompt_informative_status)
# 分支資訊
set -f __branch (set_color brred)(git_branch_name)
set -f __prompt_git_info (set_color FF4BFF) " ("(git_branch_name) ": "(set_color red)$__informative_status(set_color FF4BFF) ")"
else
set -f __prompt_git_info ""
end
echo (set_color 00BA00) "┬─"$__prompt_data$__prompt_pwd$__prompt_git_info(set_color normal)
echo (set_color 00BA00) "╰─>"(set_color FF635C) "\$ "
end
if status is-interactive
# Commands to run in interactive sessions can go here
end
4、最終效果如下
補充:如果想要加上使用者名稱可直接使用常量 $USER
五、修改歡迎語
如下圖,每次我們切換到 Fish Shell 都會有歡迎語輸出
function fish_greeting echo Hello friend! echo The time is (set_color yellow; date +%T; set_color normal) and this machine is called $hostnameend
作者:墨淵君
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2996070/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何在 Linux 中安裝、配置和使用 Fish Shell?Linux
- 智慧且使用者友好的命令列 shell–Fish命令列
- Linux系統的特性優勢Linux
- fish:Linux中比bash或zsh更好用的ShellLinux
- fish shell 自動補全子命令
- Fish Redux 使用指南Redux
- Shell中的${}、##和%%使用範例
- 區塊鏈Dapp的劣勢和優勢區塊鏈APP
- 使用代理進SEO的優勢
- JSON的特點和優勢JSON
- 索引原理和優勢索引
- Linux學習之Shell指令碼語言的優勢是什麼?Linux指令碼
- 使用 Laravel 服務容器的優勢Laravel
- shell中 << EOF 和 EOF 使用
- Shell中函式的定義和使用函式
- 初識Fish Redux在Flutter中使用ReduxFlutter
- 如何使用Python的類? 優勢有哪些?Python
- 旅行社使用代理IP的優勢
- 淺析每日使用代理IP的優勢
- MES和ERP的整合的優勢有哪些?
- redis持久化rdb和aof之間的優勢劣勢Redis持久化
- [譯] 使用 Nexmo 和微軟語音翻譯 API 構建 Babel Fish微軟APIBabel
- 使用線上教育SaaS系統的優勢
- 使用BGP的機房有什麼優勢:
- 使用代理進行抓取的四個優勢
- 面向企業的 DevSecOps 的優勢和挑戰dev
- 美元穩定幣有哪些優勢和劣勢?
- Go的優勢Go
- Fish Redux 全域性Store-AppRoute使用指南ReduxAPP
- fish_redux使用詳解---看完就會用!Redux
- 網站建設中CSS的優勢和不足網站CSS
- VMware vSAN的六大優勢和案例分享
- Python和R之間的優勢有何不同?Python
- 婚紗攝影小程式的功能和優勢
- 使用雲服務有哪些優勢?
- java三大版本和核心優勢Java
- Python有什麼優勢和劣勢?Python介紹!Python
- Shell 函式的使用函式