我所知道的ZSH
0. 前言
當年入行的時候,就是看池建強老師的文章入的坑,從此就開始了用 zsh。轉眼入行已經三年了,我的shell姿勢依舊很菜。今天被領導安排做一個內部分享,本來我是拒絕的,畢竟知識太少,領導說湊夠三十分鐘就行,於是東拼西湊就有了以下的文章。
1. 什麼是 ZSH
介紹在這裡:http://macshuo.com/?p=676
cat /etc/shells
如果你想試試別的Shell,推薦你試一下 Fish,這裡有阮一峰老師的一篇教程, 不過需要注意的是,由於 Fish 的語法與 Bash 有很大差異,Bash 腳本一般不兼容。因此,建議不要將 Fish 設為默認 Shell。
2. 什麼是 Oh-My-Zsh
Github: https://github.com/robbyrussell/oh-my-zsh
Windows 下,如果你是用的是 Cygwin,那麼你是無法通過 chsh -s /bin/zsh
這種方式修改默認終端的,你需要在 .bashrc
下添加一行代碼:
bash -c zsh
當然,如果你懶得折騰,可以試試 Babun 或者 Hyper ……
如果你用的 WSL,那麼你把 Windows 升級到最新版本就沒有問題了。
如果你一直只用 Windows Git 自帶的 Git Bash,就可以不用往下看了……
3. 配置
- .zshenv 這個文件是每次都會被在啟動時載入的,這裡一般存放需要導出的一些全局變數,比如
JAVA_HOME
、GOPATH
這種。PATH
,EDITOR
以及PAGER
一般也可以放在這裡,如果你想變更zsh配置文件的其他存放位置,可以通過設置ZDOTDIR
變數來指定; - .zshrc 這裡是互動式Shell配置,我們就是在這裡載入模塊、變更歷史配置、更改提示符等等。在這裡可以設置一些本地使用的變數;
- .zlogin 這個是在登陸 Shell 使用,一般是配合像是 X11 、Xquartz 這樣的圖形服務使用,這個文件並不總是很有用;
- .zprofile 這個文件功用同
.zlogin
類似,載入時機是在載入.zshenv
之前,根據官方文檔的說法,這個文件是為了ksh用戶的使用習慣而保留的,最好不要同.zlogin
文件同時使用; - .zlogout 這個文件是在退出或者重置終端時使用;
FYI: https://unix.stackexchange.com/questions/71253/what-should-shouldnt-go-in-zshenv-zshrc-zlogin-zprofile-zlogout
注意:導出變數的時候,不要用波浪線(~),一定要用全路徑!!!
echo $BANDWAGONIP # 列印我的搬瓦工VPS埠號
當然,更複雜的一些項目需求,比如不同項目之間,或者生產和開發環境之間切換配置,光靠寫進 .zshenv
或者 .zlogin
或者 .zprofile
就不夠了,可以藉助 .env
文件, 或者IDE自帶功能;
Jetbrains 系列:
Xcode:
P.S. 是否將 .idea
文件夾放到倉庫裡面是一件頗有爭議的事情,有的公司看到面試者的開源項目倉庫裡面沒有將 .idea
文件夾添加到 .gitignore
裡面(此時需要git rm -rf .idea
),心裏面就會默默地將他Pass掉了…… 即使你能按照官方建議來提交,也無法保證團隊的其他成員按照指導建議來做。所以一般來說,請不要將 .idea
文件夾提交到倉庫里,因為這有可能泄露個人或者團隊信息(比如 Android Studio
的 keystore
信息)。這要是要倉庫裡面提交一些敏感信息,請確保這些信息要麼無關緊要,要麼是項目裡面做了加密處理。
4. 別名(alias)
oh-my-zsh 已經提供了一些常用的別名,自帶的一些插件本身就是一堆別名,比如 brew 或者 yum 的插件……
常用的一些別名:https://mp.weixin.qq.com/s/DxfXvEZ3CkZwGsO3t71qZg
如果你想使用指定編輯器打開特定文件,可以這樣設置別名:
alias -s html=code # 在命令行直接輸入後綴為 html 的文件名,會在 VS Code裡面打開
注意:文章裡面的測網速所用的 speedtest-cli
,需要安裝;此外,獲取本地 ip 地址的別名用到了 ipconfig
,僅適用於mac平台, 如果你在其他Linux平台,請使用 ifconfig
。在Linux其他發行版本下,獲取本地IP,你可以這樣寫:
alias myip="ifconfig | sed -En s/127.0.0.1//;s/.*inet (addr:)?(([0-9]*.){3}[0-9]*).*/2/p"
5. 方法
對於一些簡單的命令,可以封裝成別名,複雜一點的就可以寫成函數了。
# 重新生成.xcodeproj文件
# 我認為這是SPM的一個Bug,添加新的依賴以後,需要重現刪除原來的.xcodeproj文件並重新生成,添加的依賴才會出現
spmregen() {
# 刪除原來的.xcodeproj文件
local targetName=$1
# 如果沒有指定,則使用當前文件夾名稱作為TargetName
if [ !$1 ]; then
targetName=$(basename $PWD)
fi
# .xcodeproj文件實際是一個文件夾
rm -rf ${targetName}.xcodeproj
# 重新生成
swift build && swift package generate-xcodeproj
}
Mac下,對於PC的控制,我們可以藉助 Apple Script:
注意:需要先在系統偏好設置->安全性與隱私->隱私->輔助功能裡面選擇允許終端
# 新建一個終端Tab
function tab() {
osascript 2>/dev/null <<EOF
tell application "System Events"
tell process "Terminal" to keystroke "t" using command down
end
tell application "Terminal"
activate
do script with command "cd "$PWD"; $*" in window 1
end tell
EOF
}
6. 美化
oh-my-zsh 已經自帶了一些主題,默認的是 robbyrussell(作者名),個人推薦使用 ys ,純粹因為個人感覺這個更好看一些……
ZSH_THEME="ys"
ZSH_THEME="robbyrussell"
如果你喜歡折騰的話,推薦試一下 powerlevel9 這個主題,以下是我的主題:
當然,你如果懶得折騰,只是想嘗鮮一下的話,這裡有網友分享的配置,你拷貝一下就好……
7. 插件管理
如果你使用的插件比較多,可以使用以下管理工具進行:
- antigen
- zplug
- zgen
注意: 如果你是通過 brew
安裝的 zplug
,同時你又在使用 github
,那麼可能 brew
的formula不是最新版本的,那麼你需要做一點額外的工作: 打開 base.zsh
文件(code $ZPLUG_HOME/base/base/base.zsh
),參考這個PR修改一下。
8. 一些工具推薦
- VS Code + SSH FS
- lazygit
- mitmproxy
P.S. 這裡要表揚以下 SSH_FS 這個插件,解決了遠程伺服器編輯文件沒有圖形界面只能用 vim 的尷尬境地(我等 vim 菜鳥的福音),比如我想修改 ufw 的規則文件,用這個就方便很多。
最後附上我的配置:
https://gist.github.com/AmatsuZero/9399a994fe5684bc79c2f972bac02407希望能幫到你!
推薦閱讀: