讓 Fish Shell 比 Bash 更好的 11 大特性
Bash 是使用最廣泛的 Shell,Zsh 則是開發(fā)者圈里最受青睞的,但 Fish 往往被許多人忽視。
這絕非夸張之辭。Fish 的確是個備受忽視的 Shell,它對新手和資深的自由開源軟件用戶,都可能是極好的選擇。
Fish 提供了一系列吸引人的功能,使其具有鮮明優(yōu)勢。這其中包括了從語法高亮到縮寫(我個人最喜歡的部分),這里面充滿了種種新奇。
下面,我要和大家分享一些我最青睞的 Fish Shell 特性。
1、語法高亮
在錯誤的命令被執(zhí)行之前就識別出它們將大大節(jié)省你的時間,同時降低你的挫敗感。
現(xiàn)代的許多代碼編輯器都內(nèi)置了語法高亮功能,而 Fish 不僅將此功能內(nèi)置在了 Shell 中,而且對于 Linux 命令也同樣有效。
命令有誤?你會發(fā)現(xiàn)其被紅色高亮。同樣的,對于不符合上下文的參數(shù)和選項也是如此。
錯誤高亮為紅色
2、自動建議
當你輸入命令時,F(xiàn)ish Shell 會自動推薦命令,然后你可以按照提示,使用 Tab
鍵進行相應的補全操作。
Fish 自動補全
隨著你的輸入,建議會以灰色顯示,使其更易于識別。如果整條建議都對你的胃口,你可以按右箭頭鍵來完成整個命令的補全。
3、命令選項的交互式手冊頁
這是一個炫酷的功能,你可以交互性地參考手冊頁完成命令選項的填寫。
首先,你需要先解析手冊頁,這可以通過以下命令來完成:
fish_update_completions
這會對手冊頁進行解析。
手冊頁解析
現(xiàn)在,如果你輸入一個命令,添加連字符作為選項,然后按下 Tab
鍵,就能看到手冊頁給出的可能選項及其簡短描述:
Fish 手冊頁幫助
你可以通過滾動一覽這些選項,并在閱讀了作用說明后,從彈出的分頁器中進行選擇。
要比直接輸入 command -h
更便利一些對吧。
4、縮寫優(yōu)于別名
在 Fish 里,縮寫的作用就如同文本擴展工具。你可以為一些常用的代碼設置易于調(diào)用的縮寫。
比如說,我把 sch
設為 pacman -Ss
的縮寫,用以搜索軟件包。
abbr -a sch pacman -Ss
于是,每次我輸入 sch
并按空格鍵后,它就會被替換成 pacman -Ss
。
Fish Shell 縮寫
你甚至可以把它寫入配置文件,讓其成為永久設置。
?? 別名和縮寫的關鍵區(qū)別在于,別名的工作是內(nèi)部完成的,你看不到其背后真正運行的命令。而縮寫不僅會展示實際的命令,而且會讓它們在歷史記錄里也正確地出現(xiàn)。
5、豐富的基于 Web 的幫助
Linux 純粹主義者常常依賴手冊頁來尋求命令幫助,而新一代的 Linux 用戶則更多地依賴網(wǎng)絡資源。
Fish 則結合了這兩者優(yōu)點,提供了詳盡的“基于 Web 的幫助”功能,并且且易于使用,即便在無網(wǎng)絡連接的情況下也同樣可用,因為它是本地化存儲的。
在運行 Fish Shell 時,僅需輸入:
help
就可以在你的網(wǎng)絡瀏覽器上打開幫助頁面了。
Fish Shell 網(wǎng)頁幫助
如今,你可以隨時方便地查閱這份詳細的文檔。
6、基于 Web 的配置
沒錯,這是另一個“基于 Web”的功能。
要改變提示符顏色或其他配置,你不必在終端里編輯配置文件,相反地,你可以運行基于 Web 的配置。
在運行 Fish Shell 時,只需輸入以下命令:
fish_config
這會打開你的瀏覽器,并顯示出配置設置。
Fish Shell 基于 Web 的配置
在這里,你可以更改顏色,從現(xiàn)有列表中選擇一個不同的提示符等等。
提示符選擇
通過這種方式來改變配置更方便,對嗎?
7、自動切換目錄
如果你想切換到某個目錄,你不需要輸入 cd
命令。只需要鍵入該目錄名稱就行了。
例如,如果你位于主目錄,并希望切換到 Downloads
目錄,只需要輸入 Downloads
。輸入過程中,它會進一步給出補全建議。
自動 cd
如果你正在某個特定目錄中,想要跳轉(zhuǎn)到一個完全不同的路徑,則需要使用絕對路徑。
8、更簡潔的路徑導航
如果你需要在=瀏覽過的目錄之間來回切換,沒必要輸入路徑或使用 cd ..
等。只要按 ALT + ←
或 ALT + →
,分別向前和向后移動就行了。
目錄導航
或者,你可以鍵入 cdh
并按回車,這會呼出一個分頁器界面,你可以使用對應的數(shù)字來回到你想去的目錄。
使用分頁器導航
9、交互式歷史搜索
你可以在 Fish 中交互式地搜索某個特定的歷史命令。做這個的時候,就使用我們熟悉的 CTRL+R
就行了。
這會呼出一個類似于分頁器的界面,顯示一個搜索提示。輸入你想要查找的命令,就能看到搜索結果:
交互式歷史搜索
10、全局變量
在 Fish Shell 中,如果你將一個變量設置為全局的,那么它將在重啟 Shell 或者重啟系統(tǒng)后仍然可用。
要設置一個全局變量,可以使用:
set -U my_variable 10
這時,my_variable
的值將會被設置為 10,即使系統(tǒng)重啟后也不變。
是的,不需要將它們添加到你的 RC 或 profile 中。
11、隱私模式
Fish Shell 有一個隱私模式,該模式下輸入的命令將不會被保存到歷史記錄或存儲在硬盤上。
要進入隱私模式,使用命令:
fish -P
Fish 隱私模式
工作完成后,通過鍵入 exit
就可以退出隱私模式。
Fish 還有更多你可以探索的
Fish Shell 提供了許多其他的用戶友好特性,比如:
- 使用
ALT+Enter
實現(xiàn)簡單的多行命令編輯 - 切換 Emacs(默認)/Vim 鍵位綁定
- 提供簡潔明了的腳本編寫語法
當然,你可以在其他 Shell 中通過一些努力實現(xiàn)大部分 Fish Shell 的特性,但默認啟用這些特性可就完全是另一回事了。
Fish 可以幫助你在掌控開發(fā)環(huán)境的前提下,提高開發(fā)工作的效率。別把為 Fish Shell 編寫腳本運行在 Bash 中,在多用戶系統(tǒng)的共享環(huán)境中可能會引發(fā) Shell 兼容性問題。
如果你喜歡這些特性,試試 Fish Shell 看看效果如何。也許你會將 Fish 設為 你的默認 Shell。
即使你不想在終端里看到 “Fish”,也許你會喜歡 ASCII 水族館 ??
?? 請在評論中分享你對 Fish Shell 的看法 ??