Ubuntu下zsh的安裝與oh my zsh的配置
文中命令前面帶井號的需要在root模式下運行,未標註的話請在您的主賬戶中運行
zsh的安裝
# apt install zsh
編譯安裝請參考 編譯安裝zsh - Web Designer
修改zsh作為用戶的默認shell
在Ubuntu當中,用戶所對應的shell配置保存在`/etc/passwd`(系統用戶表)中,編輯這個文件,找到對應用戶並修改對應配置即可
首先用vim打開這個文件(注意許可權)
# vim /etc/passwd
其中的內容格式大概是這樣的
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/usr/sbin/nologinman:x:6:12:man:/var/cache/man:/usr/sbin/nologinlp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologinnews:x:9:9:news:/var/spool/news:/usr/sbin/nologinuucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologinubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
本例中我們要設置的用戶為ubuntu,找到ubuntu用戶對應的這一條,然後修改默認的shell由bash變為zsh
修改之後的條目
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/zsh
保存退出編輯器。下次登陸默認使用的shell就變成了zsh
passwd文件是Ubuntu下的一個對於用戶管理非常重要的文件。具體詳情可以自己Google。
安裝 Oh my zsh
zsh的強大令人敬畏,但是由於它配置複雜,很多人對它望而卻步,而oh my zsh的誕生正好從某種角度上解決了此問題
zsh在github上的repo地址為 robbyrussell/oh-my-zsh
其提供了一鍵安裝工具,按照其說明,僅需運行如下命令
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
稍等片刻便會自動安裝好
為Oh my zsh切換主題
Oh my zsh自帶了非常實用的主題特性,其自身也提供了諸多主題以供切換。
官方對主題的介紹以及已提交的主題列表在這裡 robbyrussell/oh-my-zsh
這裡以agnoster這個主題為例
因為zsh已自帶此主題,主題文件已存在於`~/.oh_my_zsh/themes`文件夾下,故可直接使用。如果你需要安裝其他並非自帶的主題的話,請將主題文件拷貝至此文件夾
首先切換到當前賬戶主目錄,編輯.zshrc文件
vim .zshrc
找到`ZSH_THEME`這一項,將它的值改成`agnoster`即可完成對此主題的切換,其他主題如法炮製
編輯好之後保存退出。使用`source .zshrc`命令在zsh內手動載入新配置文件,可免去重新登陸才能看到預覽的麻煩
解決zsh下Home/End鍵(行首/行尾)鍵失效的問題
不是很清楚怎麼造成的。。不過手動bind一下按鍵就可以了
以下代碼添加進`.zshrc`
bindkey e[1~ beginning-of-linebindkey e[4~ end-of-line
然後提示符下手動`source .zshrc`
參考 解決 xshell 上面 zsh 的 home end 無效問題
解決agnoster主題下提示符前面出現`username@host`字樣的問題
最開始使用zsh自帶的主題是沒問題的。不知道為什麼使用agnoster這個主題之後前面就出現了那個莫名其妙的東西。看起來很不爽。到主題的repo找了一下issue,發現有一篇issue(How do I hide the 「user@hostname」 info · Issue #39 · agnoster/agnoster-zsh-theme)提到了這個問題,也給出了臨時的解決辦法
添加以下代碼到`.zshrc`文件中
prompt_context() { if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then prompt_segment black default "%(!.%{%F{yellow}%}.)$USER" fi}
這樣僅會隱藏掉host部分,如果想把前面用戶名也隱藏掉的話,注釋掉`prompt_segment` 即可
如有錯誤、遺漏還望指正
推薦閱讀: