背景
首先看一下小項目完成之後的成果。
Pet
配合
glow
之後,可以在指令行輸出
markdown
Pet 是一個指令行
snippet management
小工具。特别的實用。一切都是從它開始。Github 連結。
使用
Pet
少說有 5 年了。它的作用就是将你常用的指令儲存起來,然後你可以添加關鍵詞,最後可以使用
fzf
或者
peco
搜尋關鍵詞來快速提取常用指令,提高效率。
配置和指令都會被儲存到
toml
檔案裡,路徑在
/home/usr/.config/pet/
下。
安裝很簡單,看它的 Github 首頁就行。使用
Pet
必須要安裝
fzf
。
這裡是一個原始
Pet
的使用截圖。
你可以使用
<>
将儲存動态的參數,
Pet
可以自動比對這樣的
tag
,然後讓你輸入所需的參數。
bash
或者是
zsh
,都可以設定一個
alias
将
Pet
的輸出
pipe
到
xclip
就能儲存指令,并且它還支援直接執行(
pet exec
)。
無盡的需求
首先我想儲存一些簡單的定義,比如什麼是 TCP/IP 模型;或者是一些步驟類型的記錄,比如如何在 ubuntu 上安裝 docker-compose。諸如此類,我就不需要每次浏覽網頁,再開始操作了。簡單高效很多。
問題是,原生 Pet 隻能儲存沒有換行符(
\n
)的指令。意味着所有的指令或者記錄必須在一行,稍長的記錄在之後閱讀起來就不是那麼清晰,特别是步驟類型的。
我想了一下,需求的是可以在
pet new
的時候鍵入多行指令,并且可以使用 markdown,最後還需要在指令行直接輸出 markdown,使整個流程做到最簡化,并且還有很好的格式,閱讀清晰。
修改源碼
Pet 的源碼也是很久沒有維護了。為了我的需求,改起來。修改之後的源碼在這裡。
整個過程搞得我對 GO 其實沒有什麼好感了,可能是系統原因(FreeBSD),按照 Pet 官方的步驟編譯的話,第一步就會出錯,最後花了一天時間整了自己的編譯流程,算是大功告成了。
這是完成之後的
pet new
指令,支援多行輸入。就像在指令行一樣,使用
\
來換行。
另外,也可以有簡單的 markdown。
比如标題,行間代碼,或者是表格。
注意,要使用 markdown,記住第一行輸入必須以标題()開頭,以及每行最後都是用
#
續行就行。
\
這裡的 markdown CLI 輸入,要用到第二個小工具,
glow
。
Github 連結。
這個工具可以在指令行渲染 markdown,很好滿足了我的需求。它的功能很多,具體見 Github。
另外,隻要是
chrome
或者是
firefox
開頭的指令,會直接執行。一些有用的工具類網站,直接儲存在 Pet,然後在指令行搜尋一下就能直接打開了。
編譯
由于
knqyf263
(Pet 作者)的源碼已經年久失修,
gitlab
子產品已經更新,我按照報錯修改了
gitlab.go
,但是未測試。
官方使用 Makefile 的編譯是會出錯的,至少我的系統上是這樣。是以我把我的編譯方式寫出來,如果大家無法使用官方的方式編譯,那麼就參考我這裡的方法。
注意,編譯前提是有梯子。
# 不同類型的 proxy 自行修改
export https_proxy=proto://ip:addr
# 下載下傳 go 1.14.1,測試通過的版本,版本不能更低(cobra command要求),但是高版本未測試
tar xvf go.tar -C /usr/local
export GOROOT=/usr/local/go/bin
export PATH=$PATH:$GOROOT
export GOPATH=/home/<username>/goprojs
mkdir -p $GOPATH/src/github.com/knqyf263
cd $GOPATH/src/github.com/knqyf263
git clone https://github.com/xillemi/pet.git
mkdir $GOPATH/bin
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
dep init
dep ensure -vendor-only
go mod vendor
# 二進制會安裝到 $GOPATH/bin 目錄
go install
有任何問題,歡迎私信。
最後,在
bashrc
或者
zshrc
中定義一個方法,來簡化指令。
pets () {
cmd=`pet search`
# 如果指令是 # 開頭,也就是 markdown 标題開頭
# 會被 pipe 給 glow 顯示在 terminal
# 其他的指令,會直接複制到剪切闆,複制使用即可
if [[ "$cmd" == "#"* ]]
then
# !!!不要省略雙引号噢,否則換行符都會被 strip 掉
# !!! markdown 表格就不能正常顯示了
echo "$cmd" | glow -
else
echo "$cmd" | xclip -sel clip
fi
}
source ~/.bashrc
source ~/.zshrc
使用
pets
指令來高效工作吧。