標籤:

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` 即可

如有錯誤、遺漏還望指正


推薦閱讀:

TAG:Ubuntu | zsh | ohmyzsh |