Fish 和 Atuin使用記
很多年前就看過 fish shell 相關文章,因爲常年使用 zsh + Oh My Zsh 覺得很順暢,沒什麼動力切換。直到某一天突然想試試 fish,陸續使用了幾個月,個人感覺很不錯。
僅代表個人觀點:
1. 優勢
- 補全、提示比 zsh 強大,我幾乎是使用原生 fish,沒什麼額外配置,有時候冒出的提示給人一種 AI 加持的感覺。
切換到某個目錄運行某個命令,它總能正確提示。
如下圖所示,我切換到 wine 的源碼目錄,準備重新編譯,才輸入一個點,就已經提示出完整名命令,此時按 Ctrl + f
或者 '右方向鍵'會自動補全
再比如,你輸入 ip + 空格
,再按 tab,會彈出 ip 命令的子選項,老實說現在 ip 命令很複雜,年老體弱各種記不住,這樣的提示可謂非常貼心了。
還沒完,接着看,輸入 ip link
空格加 tab,連子命令和核心提示一併顯示出來了,當然歷史補全也還在,任君選擇。
不得不說,這種提示夠方便,日常工作能提升不少效率。
- 速度快,一切拖慢運行速度的東西都會讓人生厭。
原生 fish 自帶的功能,足夠應付日常各種操作,根本不需要 Oh My Zsh
等加持,裸奔更健康。
- 配置簡單
輸入 fish_config
1➜ ~ fish_config
2Web config started at file:///tmp/web_config22yhky5b.html
3If that doesn't work, try opening http://localhost:8000/af9321754796589c755386f704c81785/
4Hit ENTER to stop.
在默認瀏覽器彈出的 web 頁面上即可配置 colors
、prompt
等
輸入 help
1➜ ~ help
2help: Help is being displayed in xdg-open.
瀏覽器彈出 file:///usr/share/doc/fish/index.html
離線文檔。
2. 劣勢
- 兼容性不好
比如激活 python 的虛擬環境,需要這樣:
1➜ google-api-python-client . .venv/bin/activate.fish
2(.venv) ➜ google-api-python-client
好像也不是很麻煩,畢竟帶有 activate.fish 腳本。
部分 shell 腳本無法直接運行,一般遇到這種狀況我會運行 bash 命令,臨時切換。
沒辦法,大部分系統自帶的 shell 都是 bash。
其它不方便的地方目前還沒有發現。
總之,我個人認爲,fish shell 很適合在私人電腦上使用,快捷方便,使用幾個月後,暫時是不會切會 zsh 了。
3. 使用 atuin 管理 shell 歷史
atuin 這個項目很早前我體驗過一次,一開始貌似步子邁大了。主要是它默認接管向上鍵
,這一點很難適應。
至於怎麼安裝使用 atuin,這裏不寫,網上教程很多,也很簡單。
我不用它的雲同步功能,這年頭不可能把 history 記錄交給第三方存儲,雖然說加密安全,誰也看不到,個人數據還是掌控在自己手上比較好。
不開啓雲同步,默認數據是存在 SQLite 裏面的,數據結構如下所示:
裏面記錄了什麼時候、執行了什麼命令、退出狀態碼、工作目錄、主機名等。
可以導入其它 shell 的歷史記錄,重複導入會不會去重,沒有測試。
1➜ ~ atuin import zsh
2 Atuin
3======================
4 🌍
5 🐘🐘🐘🐘
6 🐢
7======================
8Importing history...
9Importing history from zsh
10Import complete!
11➜ ~ atuin import bash
12 Atuin
13======================
14 🌍
15 🐘🐘🐘🐘
16 🐢
17======================
18Importing history...
19Importing history from bash
20Import complete!
導入其它各種 shell 的歷史記錄,相當於擁有了一個便攜 history 數據庫。
1➜ ~ file ~/.local/share/atuin/history.db
2/home/mephisto/.local/share/atuin/history.db: SQLite 3.x database, last written using SQLite version 3038002, writer version 2, read version 2, file counter 72, database pages 966, cookie 0x4, schema 4, UTF-8, version-valid-for 72
只要保存好這個數據庫文件,假設買了個新電腦,都可以找回 history 記錄,真是業界良心啊。
4. fish 下解除 atuin 的方向鍵綁定
不知道其它人感覺怎麼樣,反正我個人傾向於使用 shell 的方向鍵功能,atuin 搜索綁定 ctrl + r
就好。畢竟不管是 zsh 還是 fish,搜索還是沒有 atuin 強大的。
fish 下面解除方向的盤綁定(Disable up arrow)設置:
1➜ fish pwd
2/home/mephisto/.config/fish
3➜ fish cat config.fish
4if status is-interactive
5 # Commands to run in interactive sessions can go here
6 set -gx ATUIN_NOBIND "true"
7 atuin init fish | source
8 bind \cr _atuin_search
9end
10
11function fish_greeting
12end
這份設置需要看文檔摸索下的,官方文檔上只有 zsh 示例。
爲什麼它能工作呢?看這裏的最後一部分:
1➜ ~ atuin init fish
2set -gx ATUIN_SESSION (atuin uuid)
3
4function _atuin_preexec --on-event fish_preexec
5 set -gx ATUIN_HISTORY_ID (atuin history start "$argv[1]")
6end
7
8function _atuin_postexec --on-event fish_postexec
9 set s $status
10 if test -n "$ATUIN_HISTORY_ID"
11 RUST_LOG=error atuin history end $ATUIN_HISTORY_ID --exit $s &
12 disown
13 end
14end
15
16function _atuin_search
17 set h (RUST_LOG=error atuin search -i (commandline -b) 3>&1 1>&2 2>&3)
18 commandline -f repaint
19 if test -n "$h"
20 commandline -r $h
21 end
22end
23
24if test -z $ATUIN_NOBIND
25 bind \cr _atuin_search
26 bind -k up _atuin_search
27 bind \eOA _atuin_search
28 bind \e\[A _atuin_search
29
30 if bind -M insert > /dev/null 2>&1
31 bind -M insert \cr _atuin_search
32 bind -M insert -k up _atuin_search
33 bind -M insert \eOA _atuin_search
34 bind -M insert \e\[A _atuin_search
35 end
36end
檢測變量 ATUIN_NOBIND 爲字符串 “ture”,長度不爲 0
-z STRING Returns true if the length of STRING is zero.
if 裏面的各種操作不會綁定,自然就是執行你自己的設定了。
這樣一番配置後,既可以使用默認的方向鍵功能,不至於跨度過大,又能集中管理 history,使用更加高級的 autin 搜索功能(ctrl + r
觸發),不錯的。
atuin 圖示:
更多 atuin 的功能,可以查看它的文檔。
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。