Linux 終端美化 - Oh My Zsh


前言

在類 UNIX 系統(比如 Linux,Mac)環境中,我們常常在終端中輸入命令與系統進行交互,大多數系統默認使用的 shell 程序為 Bash。

但是 Bash 本身的色調非常單調,因此,如果我們需要長時間工作在命令行環境種,適當對終端進行美化是一個非常不錯的選擇。

幾個概念釋義

在我們美化 Linux 終端前,我們先了解一下以下幾個概念:

  • 終端(terminal):擁有鍵盤+顯示器的設備。

  • 終端模擬器(terminal emulator):采用圖形界面模擬 終端 操作的程序。

  • shell:操作系統和終端之間的一個“殼”應用,可以將終端發送的字符(命令)發送給系統,並將系統運行命令的結果傳遞給終端顯示。

  • Bash:大多數類 UNIX 系統的默認 shell 程序。

:在類 UNIX 系統中,通常將 終端模擬器 簡稱為 終端,因此下文涉及到 終端 的地方,如無特別強調,均指 終端模擬器

zsh

在前面對 終端終端模擬器shell 進行介紹后,我們應當能知道,大多數類 UNIX 系統自帶的終端(即命令行工具),其界面相對比較單調。

因此,如果我們想美化終端,可以更換另一個更加美觀的終端(比如 Mac 系統的 iterm2),或者更換另一個可以配置終端的 shell 程序。

我們這里主要對 Ubuntu 系統終端進行美化,所以選擇更換 shell。

目前類 UNIX 系統上最常用的第三方 shell 就是 zshzsh 又稱為 Z shell,是一個交互式 shell 程序,也可以作為腳本解釋器。zsh 基於 Bourne Shell(sh),提供了很多新特性,比如插件支持和主題更換。

zsh 的安裝方法如下:這里主要介紹在 Ubuntu 系統中進行安裝:

  1. 下載並安裝 zsh
sudo apt install zsh
  1. 查看是否安裝成功:
zsh --version # ==> Expected result: zsh 5.4.2 or more recent
  1. 設置為終端默認 shell:
chsh -s $(which zsh)
  1. 如果第 3 步設置失敗,則進行如下設置:
# ~/.bash_profile 添加如下內容
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
  1. 登出,然后再登入,輸入以下命令查看下是否已登錄 zsh
echo $SHELL # ==> 如果顯示: /bin/zsh,則為成功
  1. 輸入以下命令,查看當前是否使用 zsh
$SHELL --version # ==> Expected result: 'zsh 5.4.2' or similar

更多安裝方法,請查看:Installing ZSH

Oh-My-Zsh

zsh 本身的配置十分復雜,因此一般不直接對其進行配置,而是使用第三方框架進行設置。

當前最受歡迎的 zsh 配置管理框架為:Oh-My-Zsh

以下是 Oh-My-Zsh 的安裝方法:

# 使用 curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 或者使用 wget
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 或者手動進行安裝
curl -Lo install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
sh install.sh

Oh-My-Zsh 常用配置

當安裝完成 Oh-My-Zsh 后,會發現創建了~/.zshrc文件,這就是 zsh 的配置文件。

Oh-My-Zshzsh 提供了很多的插件(Plugin)主題(Theme)配置。

  • 插件(Plugin)zsh 插件,簡單來說,就是 zsh 可以解釋執行的一段 shell 腳本。因此,一個插件可以簡單地執行一些命令,也可以提供對特定命令和函數的補全功能。

要使用 插件,首先需要使能插件功能,方法如下:
~/.zshrc文件中,添加如下內容:

plugins=(
    git
    adb
    ruby
)

如上就是添加了 gitadbruby 插件,更多其他插件,請參考:zsh Plugins

  • 主題(Theme)zsh 主題是一個可以更改控制台的 zsh 腳本。一個主題可以做很多事情,比如,控制台自動更新當前 git 倉庫的狀態,或者顯示每秒更新的一個時鍾...

要使用 主題,首先需要使能該功能,方法如下:
~/.zshrc文件中,設置ZSH_THEME為要使用的具體主題名,比如:

ZSH_THEME=robbyrussell

如上就是讓 zsh 啟用robbyrussell主題。更多其他主題,請參考:zsh Themes

:如果不想使用主題,直接設置:ZSH_THEME=""

這里推薦一個主題:powerlevel10k,安裝方法如下:

# 首先下載到 on-my-zsh 的本地目錄
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k

# ~/.zshrc 設置如下內容
ZSH_THEME="powerlevel10k/powerlevel

進階配置

Oh-My-Zsh插件主題的配置雖然很簡單,但是對於非內置組件,我們還需要進行手動下載,再進行配置。而這些步驟,完全可以進行自動化。

因此,網絡上其實已存在很多的 zsh 的插件管理器,比如:antigenzgenzplug...

但是這里我推薦的是:zinit

多方測評表明,zinit 是當前加載速度最快的 zsh 插件管理器,並且隨着插件的數量增多,zinit 的優勢會更大。

zinit 的插件加載速度快的一個主要原因就是:其提供了一個 插件延遲加載(Turbo) 的功能,使得插件可以在 zsh 啟功后,再進行加載。

下面是 zinit 的安裝方法:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh)"

安裝完成 zinit 后,我們就可以在~/.zshrc中配置插件/主題,比如,對於上文建議使用的 powerlevel10k 主題,其安裝方法如下:

  1. ~/.zshrc文件中配置主題為 powerlevel10k
# ~/.zshrc
# 原生的主題配置可去除
# ZSH_THEME="powerlevel10k/powerlevel
zinit ice depth=1; zinit light romkatv/powerlevel10k
  1. 重新加載~/.zshrc
source ~/.zshrc

此時就可以看到 zinit 會去下載 powerlevel10k,並自動進行設置。

:可以通過執行p10k configure命令來配置 powerlevel10k,在執行該命令之前,建議先安裝以下字體

直接雙擊下載的文件,選擇安裝,然后在設置終端字體為MesloLGS NF即可。

更多 zinit 的用法,請查看:zsh 插件管理器 - Zinit

最后放上效果圖以及附上本人配置:.zshrc.p10k.zsh

 
oh-my-zsh

終端發展史

以下是在查閱資料的時候,從網上看到的一個問答:「What's the difference between terminal, shell, command line, and bash?」,里面有人對終端的發展演化進行了介紹,我覺得介紹很簡潔,就簡單記錄一下:

在 19 世紀末期,有一種叫做 teletype 或者 TTY 的技術。一個由幾個電子元器件組成的老式機械打印機,基本上可以被划分為兩部分:鍵盤 和 打印機。兩者之間由電線進行連接,你可以通過在鍵盤上打字,此時遠端的打印機就會一個一個的回顯鍵盤輸入的字符。

在 20 世紀時,計算機開始興起,電傳打字技術(teletype technology )就很快地被應用到計算機上。用戶可以使用鍵盤進行輸入,從而對計算機進行控制,打印機可以同時連接到相同的計算機上,實時回顯用戶的操作輸出。

電傳打字技術提供了一個 命令行交互接口(command line interface) 風格的用戶接口。命令行交互接口其實就只是用於與計算機進行交互的一種方式:即用戶輸入一個命令給到計算機,然后計算機回顯操作結果並且等待下一個命令。

CRT 視頻顯示技術(CRT video display technology )在計算機出現之前就已經存在了,因此人們很快就察覺到可以將視頻顯示與計算機結合起來。一個顯著的例子就是1950年時的 SAGE air defense system,詳情可查看該視頻(從 3:40 開始)。

由於計算機與視頻顯示技術聯合越來越常見,現存的 命令行接口 思想就很快地被應用於新的系統 -- 保留了鍵盤,但是將打印機替換為屏幕(顯示器)。這種 鍵盤+文字顯示 的設備就被稱為 終端(terminal),由於它在計算機連接的另一端,你可以認為它 “終止” 了連接。

所以 終端(terminal) 就是帶有鍵盤和屏幕的設備,要么通過電話線經由調制解調器,或者通過實體線纜連接到一台大型計算機(通常是大型機或者早期的 UNIX-based 系統)上。終端 的功能只能在屏幕上顯示遠程計算機發送來的文字信息,或者發送按鍵字符給到遠程計算機。創建文字顯示 UI 是由計算機負責的。之所以稱為 終端 是因為它位於計算機連線的末端,或者說 “終止端”。

因此為了讓系統能夠發揮效用,計算機中必須運行一種可以告訴 終端 顯示數據和處理用戶按鍵輸入的應用程序,在 UNIX(以及后來的 Linux)世界中,這種應用程序就被稱作 shell

shell 就是提供命令行接口的應用程序。任何提供用戶接口的應用在寬松定義上都可認為是 shell,比如 Windows,Mac 和 手機提供的圖形用戶界面就可以認為是一種圖形化 shell。

不同的 shell 可以有不同方式進行命令輸入,重定向輸入/輸出流,管理復雜任務,比如同時運行多個程序等等。在早期的 UNIX 中,創建了許多不同的 shell 程序,很多到現在仍然存在。Bash 就是最受歡迎的 shell 程序,並且是許多 Linux 和 UNIX 系統的默認 shell。

今天,許多需要使用 終端 來執行操作的用戶都使用了擁有圖形界面的 GUI 應用程序,這種有 GUI 界面的應用我們稱之為 終端模擬器(terminal emulator)。它模擬了具備字符輸入功能的終端設備。這看起來可能不重要,當在它們過時之前,終端就已具備額外的功能,比如鼠標和顏色文字。因此,終端模擬器是更加復雜的應用。

在類 UNIX 系統(包括一些 Linux 發行版本 和 Mac)中,終端模擬器 常常被簡稱為 終端(terminal),並且它的默認行為就是去啟動默認的 shell 程序(通常是 Bash),並將 終端 的輸入/輸出連接到 shell。*

綜上,終端(模擬器) 就是指有圖形界面的命令行工具(Command line)。
在類 UNIX 中,shell 默認為 Bash。
在 Windows 系統中,它有兩種 shell:cmd.exepowershell.exe

參考


轉自:https://www.jianshu.com/p/b8a80dd59414



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM