让你的终端酷炫好用到爆--"Oh My Zsh "学习指南

11,366 阅读7分钟

简介

使用终端在开始时可能有点令人生畏--但在你习惯之后,它能以你无法想象的方式提高你的生产力,并能成为一种相当愉快的体验。

这可能是每天使用终端的最令人上瘾的部分。你总是在寻找最好的方法来更有效地完成某些任务,尽可能少地点击。

这种对更多效率的永不满足的渴望,可以说是_智人_崛起的原因之一,可能会使你考虑深入挖掘你的终端配置,即使你是在你的终端使用之旅的开始。

也许你已经看到有人在使用一个看起来很酷的终端,上面清楚地显示了很多有用的信息,并想知道一个终端怎么能看起来这么酷和优雅。

也许它看起来像这样的东西。

powerlevel10k theme

不管怎么说,你关于高级终端使用的大部分问题的答案可能是 Zsh shell并在其上安装 哦,我的Zsh框架安装在上面的。

简单地说。 Zsh是一个替代 Bashshell,它实现了很多很好的功能,可以_提高你的工作效率_,改善你的工作流程。为了这个目的。 哦,我的Zsh是一个轻量级的、开源的框架,用于管理那些漂亮的_Zsh_功能--主题、插件、别名......

在本指南中,我们将介绍一些你可以考虑使用_Oh My Zsh_的原因。首先,我们将熟悉_Zsh_shell,然后深入了解Oh_My Zsh_,再深入了解_Oh My Zsh_本身的配置。

本指南旨在作为你的_Oh My Zsh_之旅的一个起点。到最后,你应该明白在Oh My Zsh的帮助下配置Zsh的基本概念,了解替代方案,并准备好继续探索关于Zsh shell配置的新东西。

让我们从基础知识开始吧!

什么是Zsh?

Zsh,也被称为_Z shell_,是另一个基于UNIX系统的shell,经常被用作Bash的替代品,Bash是很多基于UNIX系统的默认shell。尽管Zsh创建于20世纪90年代,但它在过去几年中获得了很大的知名度,特别是自从苹果宣布他们将在所有运行macOS的新系统上使用Zsh作为默认的shell。

Bash和Zsh都是在同一时期创建的,都是基于 Bourne shell,是当时默认的UNIX shell。这就是为什么大多数Bash的休闲用户经常犹豫要不要改用Zsh,尽管Zsh有一些先进的功能,值得考虑。

为什么使用Zsh而不是Bash?

显然,没有明确的方法来决定哪个shell最终更好,应该一直使用。选择其中一个肯定会有一些好处和坏处,你的个人偏好可能会在决定中起到很大作用。

在本节中,我们将介绍使用Zsh的一些优点。

正如我们之前所说,Zsh和Bash都是由同一个shell开发出来的,有很多类似的功能。更确切地说,Zsh实际上可以_毫无问题地_运行很多Bash脚本。除此之外,Zsh还带有很多_不错的功能_,可以使它成为比Bash更好的选择,比如。

  • 更好的自动完成功能 - Zsh的自动完成功能可以说比Bash好得多。在自动完成的建议中进行导航是非常友好和直观的。
  • 内置的自动更正 - 如果你倾向于快速打字,并且在打字过程中出现了很多错别字,Zsh会帮你修正,而不需要运行外部脚本或安装额外的插件。
  • 自动cd- 不需要每次想改变一个目录时都输入cd ,只需输入所需目录的路径。
  • 递归路径扩展--也不需要输入整个路径,例如,cd us/b/l 将扩展为cd user/bin/lin
  • 更容易定制- Zsh最独特的功能之一可能是它的可定制性。有大量的主题和插件,可以满足你的大部分需求。它们通常由_Oh My Zsh_框架管理,但也有其他框架。

如何安装和配置Zsh

如果你决定给Oh My Zsh一个机会,你需要做的第一件事就是在你的系统上安装和配置Zsh。

这就像在你的终端输入以下内容一样简单。

$ sudo apt update
$ sudo apt install zsh

现在,让我们通过运行下面的命令使Zsh成为我们系统中的默认shell。

$ chsh -s $(which zsh)

这应该就可以了!我们已经安装了Zsh并把它设置为默认的shell。现在我们可以集中精力使用 "Oh My Zsh "来定制它。

什么是 "Oh My Zsh"?

Zsh有很多主题和插件,如果你决定使用它们--它们需要以适当的方式安装和管理。如果你是一个初学者,你很可能无法自己正确地跟踪Zsh的配置。

这就是Oh My Zsh的作用!它是最流行的_管理Zsh配置、插件和主题的框架_。它将帮助你以_最简单的方式_从使用你目前的shell过渡到Zsh_。_

尽管Oh My Zsh还能做很多其他的事情,但它最著名的是能够轻松管理大量的主题和插件。这一点特别有用,因为Oh My Zsh的主题不只是简单的颜色方案,而是一种机制,它为我们提供了很多清晰显示的有用信息,比如。

  1. 当前的git分支
  2. Git状态
  3. 电池状态
  4. 当前文件夹的大小
  5. 命令性能信息

另一方面,插件是为了扩展Zsh的功能而制作的,有些插件只是为常用的命令添加新的别名,有些则添加了一些更高级的功能。

在本指南中,我们将主要侧重于展示一些有趣的主题和插件的功能。

如何安装Oh My Zsh

官方文档建议我们使用curlwget 来安装Oh My Zsh。我们需要做的就是通过_运行以下两个命令中的一个_来运行自动安装程序。

# Run the following command to install Oh My Zsh using `curl`
$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# Run the following command to install Oh My Zsh using `wget`
$ sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

你的终端不会有任何变化,直到你_重新启动_它。只有到那时,它才会应用不同的配置,但看起来还是和原来的状态相似。

终端的外观是基于我们当前使用的主题和安装的插件的。默认的主题与你可能已经习惯的东西很相似。

让我们改变一下主题,看看我们如何用Oh My Zsh来管理插件。

如何使用Oh My Zsh

在安装过程中,Oh My Zsh会控制名为.zshrc 的Zsh配置文件。这是在你的主目录中的一个文件,Zsh在其中存储了所有的配置参数。Oh My Zsh备份了原来的.zshrc 文件,只是创建了一个新的文件,所以如果你想禁用Oh My Zsh,你可以很容易地恢复到你原来的Zsh配置。

你可以在.zshrc 文件中做很多调整和改变,但我们将专注于最常见的那些。

让我们打开.zshrc 文件,看一下它的结构。

$ nano ~/.zshrc

这一行将使用nano 编辑器从主目录中打开.zshrc 文件。你可以使用任何其他编辑器打开它,如Visual Studio Code、Vim、Emacs等。

打开.zshrc 配置文件后,你将看到的第一件事是大量的注释内容。这些内容的存在是为了让你能够轻松地启用一些最常用的功能,只需取消对.zshrc 文件中相应命令的注释。

此外,该文件遵循一个非常简单的分节结构。

# Section 1 - PATH variables & path to Oh My Zsh installation
export ZSH="/home/stamd/.oh-my-zsh"

# Section 2 - Theme settings
# robbyrussel is the default Oh My Zsh theme
ZSH_THEME="robbyrussel"

# Section 3 - General zsh settings
...

# Secton 4 - Plugin settings
plugins=(git zsh-autosuggestions sudo)

# Section 5 - Other user settings
...

# Section 6 - User-defined aliases
# Aliases defined here will override any other alias
alias home="cd ~"
# Now, when you type `home` in the terminal, you will
# be navigated to the home directory
...

我们将专注于第2、4和6节。通过这样做,我们将说明Oh My Zsh最常见的使用情况,首先是安装一个简单的主题和几个有用的插件。之后,我们将看一下如何定义一些自定义别名。

如何安装Oh My Zsh主题

官方的主题目录包含了150多个易于安装的Zsh主题。安装这些主题是定制你的Zsh终端外观的最简单方法。

主题本质上是其他人创建的配置集。你可以通过手动摆弄配置来创建你自己的自定义主题--但使用现有的主题会更容易上手。

为了安装一个主题,你只需要在官方目录中找到该主题的名称,并将该名称添加到.zshrc 文件的主题部分。

例如,如果你想安装名为 "simple "的主题,我们需要做的就是用主题名称替换.zshrc 文件中ZSH_THEME 变量的当前值。

ZSH_THEME="simple"

保存.zshrc 文件并重新启动终端后,它应该看起来像这样。

Oh My Zsh - "simple" theme

正如你所看到的,这似乎是一个非常简单的主题,然而它有一些有趣的功能。

  • 它改变了工作目录路径的显示方式,它从提示符中隐藏了当前的用户名。
  • 如果工作目录在Git仓库中,它会显示当前git分支的名称。
  • 此外,如果当前目录有一些未跟踪的变化,它会显示 符号,如果当前目录是最新的,它会显示 符号。

这个主题是一个很好的起点,因为它与你可能已经习惯的东西没有_太大_区别,但仍然提供了一些好处。

如果你不能选择一个你最喜欢的主题,你可以配置Oh My Zsh,在你每次启动一个新的终端时随机改变主题。为了实现这种行为,你需要从.zshrc 文件中的主题部分取消注释ZSH_THEME_RANDOM_CANDIDATES 变量,并相应地设置ZSH_THEME 变量。

ZSH_THEME=random

ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" "simple" )

现在,Oh My Zsh会从ZSH_THEME_RANDOM_CANDIDATES 变量中列出的三个主题中随机选择一个。

一个流行的主题是Powerlevel10k主题。

ZSH_THEME="powerlevel10k/powerlevel10k"

Powerlevel9k theme

如何安装Oh My Zsh的官方插件

在安装了主题之后,下一步显然是通过安装一些有趣的插件来进一步定制你的新的酷炫终端!

哦,我的Zsh已经安装了270多个官方插件,还有很多可以安装的第三方插件。它们的复杂程度从简单的只是给你的配置添加一些新的别名的插件,一直到更复杂的执行语法高亮、命令完成和其他一些高级功能的插件。

让我们来看看如何安装一些最流行的Oh My Zsh插件,并解释它们的用途。为了安装Oh My Zsh框架附带的插件,你只需要在官方插件列表中找到它的名字,并将其添加到.zshrc 文件的plugins 变量中的插件列表中。

让我们安装名为gitzsudo 的插件,方法是浏览并编辑.zshrc 文件,使plugins 变量包含一个提到的插件名称的列表。

plugins = (git z sudo)

就这样,我们已经启用了我们想要的插件,我们可以在重启终端后使用它们的功能。如果你想启用任何其他的官方插件,你只需要把它的名字加入到plugins 列表中。

**注意:**Zsh数组中的元素是用 空白处字符分隔,用逗号分隔会导致错误。

让我们来解释一下我们新安装的插件的使用情况。

  • Git- 本质上,这个插件是一个预定义别名的捆绑,可以帮助你在终端中加快使用Git的速度。代替git status ,你可以写gst ,代替git add ,你可以写ga ,等等。 看一下所有别名的列表,感受一下这些快捷方式。
  • sudo- 一个非常有用的插件,可以让你把sudo 作为当前或前一个命令的前缀,只需按两下ESC
  • z- 这个插件的目的是提高你的工作效率,使你能够以尽可能少的点击次数浏览目录。它跟踪你最常访问的目录,并使你能够通过输入所需目录路径中的几个字符来浏览它们。

例如,让我们假设我们已经访问了/usr/share/media-player-info 目录。要在下一次访问它,只需运行z med 命令即可。

如何安装第三部分的Oh My Zsh插件

现在我们已经解释了如何启用Oh My Zsh所提供的插件,让我们考虑一些有趣的第三方插件。

启用它们并不像启用官方插件那样简单,因为每个插件都有自己的安装程序。特别是考虑到这些程序可能会随着时间的推移而改变--我们能做的就是把你指向官方文档,在那里你可以按照概述的步骤来启用这些插件。

一些有趣的第三方插件是。

  • zsh-syntax-highlighting- 这个插件根据输入的命令的正确性来突出显示你当前正在输入的命令。如果输入的命令是错误的,则为红色;如果输入的命令是正确的,则为绿色;如果是现有文件夹的名称,则为下划线。
  • zsh-autosuggestions- 这个插件根据你以前执行过的命令来建议你当前输入的命令的结束。

创建别名

如果你每天使用某些命令超过几次--为该命令定义一个_别名_可能是个好主意。

一个 "别名 "只是一个命令的替代名称。你通常会定义比命令本身_更短的_别名,并把它们作为快捷方式使用。

例如,gaa 可以是git add all 命令的别名。如果你在终端键入别名,系统就会执行原来的命令,这常常会大大节省时间。

Oh My Zsh自带了一些预定义的别名,其中大部分与Git有关。我们不会在本指南中介绍这些别名,但你可以在Oh My Zsh的官方网页上阅读预定义的Oh My Zsh别名的完整列表。

Zsh别名的第一种类型是_简单别名_。这些别名在.zshrc 文件中是这样定义的。

# alias my-alias="command"
# Examples:alias gaa="git add all"alias lsla="ls -la"...

简单别名是用来用较短的别名代替长的命令的。从本质上讲,它们是在减少运行某些常用命令所需的击键次数。

我们要介绍的Zsh别名的另一种类型是_后缀别名_。我们使用-s 标志来定义这种类型的别名。

# alias -s extension=name-of-the-tool
# Examples:alias -s py=codealias -s js=codealias -s {css,html}=code...

后缀别名是用来定义哪个工具将被用来打开所有带有所列扩展名的文件。例如,alias -s py=code 将导致包括Python文件名在内的所有命令被用代码编辑器打开。

例如,example.py 命令将被转化为code example.py ,结果是example.py 文件被用 Visual Studio Code 打开,假设 Visual Studio Code 已经安装。

还有三种类型的Zsh别名,全局别名操作系统特定别名,以及_带参数的别名函数_,这些是即将出版的《Zsh别名指南》的主题(即将出版!)。

要创建一个别名,你只需按照标准语法修改.zshrc 文件。

alias ct="{print -z Current time is $(date)}"

一旦别名被保存在文件中,你就可以在终端中以如下方式引用它。

$ ct
Current time is Fri Jul 23 15:56:02 CEST 2021

当在风格化的终端中运行时,它看起来会像。

custom oh my zsh alias

或者你甚至可以在终端中创建一个别名,在运行中,根本不用修改文件。

~ alias ct="print -z Current time is $(date)"
~ ct                                         
~ Current time is Fri Jul 23 15:59:08 CEST 2021

结论

你可能已经猜到了,Oh My Zsh最重要的目标是_易于使用_。绝对没有必要用它来管理你的Zsh配置,通过各种方式,所有这些都可以在没有Oh My Zsh的帮助下实现。

需要注意的是,没有它来管理配置,对一个没有经验的新用户来说可能有点困难。

为此,我们可以把Oh My Zsh定义为在切换到Zsh shell时,使学习曲线变得平缓的工具。

总而言之,Oh My Zsh将有助于使使用终端成为一种舒适的体验。有很多漂亮的主题可供选择,还有大量有用的插件,这些都是为了提高你的工作效率。除此之外,Zsh shell本身的运行速度也比大多数替代的shell快很多,这使得它很好用。

当然,Bash shell有一个与Oh My Zsh类似的框架,叫做 Bash-it.如果你对从Bash切换到Zsh犹豫不决,Bash-it可能是Oh My Zsh的一个可行的替代品。

本指南旨在概述Oh My Zsh框架的基本功能,旨在给你一些入门知识,鼓励你深入挖掘Zsh配置的细节。