標籤:

我所知道的ZSH

0. 前言

當年入行的時候,就是看池建強老師的文章入的坑,從此就開始了用 zsh。轉眼入行已經三年了,我的shell姿勢依舊很菜。今天被領導安排做一個內部分享,本來我是拒絕的,畢竟知識太少,領導說湊夠三十分鐘就行,於是東拼西湊就有了以下的文章。

1. 什麼是 ZSH

介紹在這裡:macshuo.com/?

cat /etc/shells

如果你想試試別的Shell,推薦你試一下 Fish,這裡有阮一峰老師的一篇教程, 不過需要注意的是,由於 Fish 的語法與 Bash 有很大差異,Bash 腳本一般不兼容。因此,建議不要將 Fish 設為默認 Shell。

2. 什麼是 Oh-My-Zsh

Github: github.com/robbyrussell

Windows 下,如果你是用的是 Cygwin,那麼你是無法通過 chsh -s /bin/zsh 這種方式修改默認終端的,你需要在 .bashrc 下添加一行代碼:

bash -c zsh

當然,如果你懶得折騰,可以試試 Babun 或者 Hyper ……

如果你用的 WSL,那麼你把 Windows 升級到最新版本就沒有問題了。

如果你一直只用 Windows Git 自帶的 Git Bash,就可以不用往下看了……

3. 配置

  • .zshenv 這個文件是每次都會被在啟動時載入的,這裡一般存放需要導出的一些全局變數,比如 JAVA_HOMEGOPATH 這種。PATH , EDITOR 以及PAGER一般也可以放在這裡,如果你想變更zsh配置文件的其他存放位置,可以通過設置 ZDOTDIR 變數來指定;
  • .zshrc 這裡是互動式Shell配置,我們就是在這裡載入模塊、變更歷史配置、更改提示符等等。在這裡可以設置一些本地使用的變數;
  • .zlogin 這個是在登陸 Shell 使用,一般是配合像是 X11 、Xquartz 這樣的圖形服務使用,這個文件並不總是很有用;
  • .zprofile 這個文件功用同 .zlogin 類似,載入時機是在載入 .zshenv 之前,根據官方文檔的說法,這個文件是為了ksh用戶的使用習慣而保留的,最好不要同 .zlogin 文件同時使用;
  • .zlogout 這個文件是在退出或者重置終端時使用;

FYI: unix.stackexchange.com/

注意:導出變數的時候,不要用波浪線(~),一定要用全路徑!!!

echo $BANDWAGONIP # 列印我的搬瓦工VPS埠號

當然,更複雜的一些項目需求,比如不同項目之間,或者生產和開發環境之間切換配置,光靠寫進 .zshenv 或者 .zlogin 或者 .zprofile 就不夠了,可以藉助 .env 文件, 或者IDE自帶功能;

Jetbrains 系列:

Xcode:

P.S. 是否將 .idea 文件夾放到倉庫裡面是一件頗有爭議的事情,有的公司看到面試者的開源項目倉庫裡面沒有將 .idea 文件夾添加到 .gitignore 裡面(此時需要git rm -rf .idea),心裏面就會默默地將他Pass掉了…… 即使你能按照官方建議來提交,也無法保證團隊的其他成員按照指導建議來做。所以一般來說,請不要將 .idea 文件夾提交到倉庫里,因為這有可能泄露個人或者團隊信息(比如 Android Studiokeystore 信息)。這要是要倉庫裡面提交一些敏感信息,請確保這些信息要麼無關緊要,要麼是項目裡面做了加密處理。

4. 別名(alias)

oh-my-zsh 已經提供了一些常用的別名,自帶的一些插件本身就是一堆別名,比如 brew 或者 yum 的插件……

常用的一些別名:mp.weixin.qq.com/s/DxfX

如果你想使用指定編輯器打開特定文件,可以這樣設置別名:

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?

gist.github.com

希望能幫到你!


推薦閱讀:

TAG:zsh | Mac | iOS |