使

使用 Zsh 在 Unix 上配置一个漂亮的终端

2025-05-24

使用 Zsh 在 Unix 上配置一个漂亮的终端

最初发表于deepu.tech

我曾经是 Windows 的老用户,而且相当满意,但作为一名开发者,我缺少了很多东西,其中最主要的就是终端体验。我不喜欢苹果封闭的生态系统,所以 GNU/Linux 对我来说是一个轻松的选择,大约三年前我就换用了 Linux。我最初使用的是 Ubuntu,后来换成了 Fedora,现在 Fedora 是我的主要操作系统。你可以在这里阅读我的设置。

作为一名高级开发者和开源社区负责人,我花了很多时间在终端上,一个拥有良好开发者体验的终端能让你立即感到更快乐、更高效。默认的 Bash 终端对初学者来说已经足够好了,但如果你真的想要一个功能强大的终端,那么 Bash 之外的终端就显得尤为重要了。

让我们看看如何配置一个强大而高效的终端体验。该设置基于我在 Fedora 机器上的配置。相同的设置也可以在任何其他 Linux 发行版、BSD 或 Mac 上重新创建。你只需要使用工具中针对特定平台的安装说明即可。

以下是我们为此需要的工具。

Zsh

Zsh是 Unix 上功能最丰富的 shell 之一。它适用于 Linux、Mac、WSL和 BSD。有一些替代方案,例如Fish,也提供类似的功能,但我个人更喜欢 Zsh。

  1. zsh --version在终端上运行,检查 Zsh 是否已安装。如果没有找到,请使用包管理器进行安装。
  • Fedora:sudo dnf install zsh
  • 苹果:brew install zsh zsh-completions
  • RHEL/CentOS:sudo yum update && sudo yum -y install zsh
  • Ubuntu/Debian:sudo apt install zsh
  • 对于其他平台,请参阅
  1. 现在通过运行将 Zsh 设为默认 shell chsh -s $(which zsh)
  2. 注销并重新登录以使用新的默认 shell。
  3. 测试它是否与 echo 配合使用$SHELL。预期结果:/bin/zsh或类似。
  4. 测试$SHELL --version。预期结果:zsh 5.6.2或类似

注意:如果您是首次安装 Zsh 并启动 shell,它会提示您配置一些设置。您可以选择忽略该提示,q因为我们稍后会进行配置。

哦我的天哪

Oh-My-Zsh赋予 Zsh shell 超强功能。它是一个管理 Zsh 配置的框架。它拥有丰富的 Zsh 插件和主题。

来自他们的 Github 页面:

安装完成后,你的终端 shell 将成为城中热议话题,否则退款!每次在命令提示符下敲击键盘,你都能享受到数百个强大的插件和精美的主题。陌生人会在咖啡馆里走过来问你:“太棒了!你是天才吗?”

只需安装它。你需要它 :)

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Enter fullscreen mode Exit fullscreen mode

终端仿真器/多路复用器

您可以选择使用可以为您管理窗口和窗格的终端仿真器。

对于 Linux,我推荐使用Tilix,我已经使用它 3 年了,它非常棒。

对于 Mac,您可以使用非常流行的iTerm2 。

或者,如果您想要在 Linux、BSD 或 Mac 上现有的终端应用程序上使用更轻量级的功能,您也可以使用tmux 。

配置 Zsh

这才是有意思的部分。让我们把终端变得更棒。

安装插件

首先,让我们安装一些未与 Oh-My-Zsh 捆绑的附加插件。

zsh 自动建议

提供 shell 命令的自动完成功能。

运行git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions安装

zsh 语法高亮

在 shell 上提供语法突出显示。

运行git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting安装

自动跳跃

提供更智能的目录导航系统。请按照此处
的说明为您的操作系统安装自动跳转功能

现在让我们~/.zshrc对文件进行一些设置。是我的完整.zshrc文件。您的情况可能会有所不同。

添加导出

我们将从一些出口开始。

export TERM="xterm-256color" # This sets up colors properly

# set shell
export SHELL=/usr/bin/zsh

# If you come from bash you might have to change your $PATH.
export NODE_PATH=$NODE_PATH:$HOME/.npm-global/lib/node_modules
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:~/.npm-global/bin:$HOME/bin:/usr/local/bin:$PATH

# Add exports from your profile
source ~/.profile
# Path to your oh-my-zsh installation.
export ZSH=$HOME/.oh-my-zsh
Enter fullscreen mode Exit fullscreen mode

Zsh 设置

现在我们可以配置一些 Zsh 特定的设置

DISABLE_MAGIC_FUNCTIONS=true
ZSH_AUTOSUGGEST_MANUAL_REBIND=1
COMPLETION_WAITING_DOTS=true
DISABLE_UNTRACKED_FILES_DIRTY=true
Enter fullscreen mode Exit fullscreen mode

Zsh 主题

现在,让我们设置一个漂亮的主题。我目前使用powerlevel10k作为主题,它运行速度很快,而且看起来很棒。您可以使用默认主题,也可以从此处的列表中选择任何您喜欢的主题。如果您喜欢我的主题,请按照以下说明操作。感谢Roman Perepelitsa提供的一些实用技巧

运行git clone https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k以安装主题。

安装Powerline 字体。我使用Adob​​e Source Code Pro

将以下配置添加到~/.zshrc文件中。

# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-zsh is loaded.
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"

############ POWERLEVEL THEME SETTINGS ##############
POWERLEVEL9K_MODE='awesome-fontconfig'

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir vcs nvm)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(disk_usage time)

POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
POWERLEVEL9K_SHOW_RULER=true
POWERLEVEL9K_RULER_CHAR='─'
POWERLEVEL9K_RULER_BACKGROUND=none
POWERLEVEL9K_RULER_FOREGROUND=237

POWERLEVEL9K_LEFT_SEGMENT_END_SEPARATOR=
POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=
POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR=' '
POWERLEVEL9K_RIGHT_SEGMENT_END_SEPARATOR=
POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=
POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR=
POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS=

POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
POWERLEVEL9K_SHORTEN_STRATEGY="truncate_middle"

POWERLEVEL9K_DIR_SHOW_WRITABLE=true

POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=none
POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=magenta
POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=red
POWERLEVEL9K_TIME_BACKGROUND=none
POWERLEVEL9K_TIME_FOREGROUND=white

POWERLEVEL9K_DIR_HOME_BACKGROUND=none
POWERLEVEL9K_DIR_HOME_SUBFOLDER_BACKGROUND=none
POWERLEVEL9K_DIR_ETC_BACKGROUND=none
POWERLEVEL9K_DIR_DEFAULT_BACKGROUND=none
POWERLEVEL9K_DIR_NOT_WRITABLE_BACKGROUND=none

POWERLEVEL9K_DIR_HOME_FOREGROUND=blue
POWERLEVEL9K_DIR_HOME_SUBFOLDER_FOREGROUND=blue
POWERLEVEL9K_DIR_ETC_FOREGROUND=blue
POWERLEVEL9K_DIR_DEFAULT_FOREGROUND=blue
POWERLEVEL9K_DIR_NOT_WRITABLE_FOREGROUND=red

POWERLEVEL9K_OS_ICON_BACKGROUND="white"
POWERLEVEL9K_OS_ICON_FOREGROUND="blue"

POWERLEVEL9K_VCS_GIT_ICON='%fon %F{040}\uf1d3 '
POWERLEVEL9K_VCS_GIT_GITHUB_ICON='%fon %F{040}\uf09b '
POWERLEVEL9K_VCS_GIT_BITBUCKET_ICON='%fon %F{040}\uf171 '
POWERLEVEL9K_VCS_GIT_GIT_GITLAB_ICON='%fon %F{040}\uf296 '

POWERLEVEL9K_VCS_CLEAN_BACKGROUND=none
POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=none
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=none
POWERLEVEL9K_VCS_LOADING_BACKGROUND=none
POWERLEVEL9K_VCS_CLEAN_FOREGROUND="040"
POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="red"
POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="yellow"
POWERLEVEL9K_VCS_LOADING_FOREGROUND="grey"

POWERLEVEL9K_VCS_UNTRACKED_ICON=$'%{\b?%}'
POWERLEVEL9K_VCS_UNSTAGED_ICON=$'%{\b!%}'
POWERLEVEL9K_VCS_STAGED_ICON=$'%{\b+%}'

POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_COLOR=red
POWERLEVEL9K_LOCK_ICON=$'\uf023'

POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=''
local p='%F{ %(?.green.red)}${${${KEYMAP:-0}:#vicmd}:+❯}${${$((!${#${KEYMAP:-0}:#vicmd})):#0}:+❮}%f '
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="$p"

POWERLEVEL9K_NVM_BACKGROUND=none
POWERLEVEL9K_NVM_FOREGROUND=green
POWERLEVEL9K_NODE_ICON='%fvia %F{green}⬢'

############ END- POWERLEVEL THEME SETTINGS ##############
Enter fullscreen mode Exit fullscreen mode

启用插件

我们可以通过启用插件和一些调整来完成

plugins=(zsh-autosuggestions git docker docker-compose autojump zsh-syntax-highlighting dnf npm)

source $ZSH/oh-my-zsh.sh

Enter fullscreen mode Exit fullscreen mode

好了,一切准备就绪。启动一个新的终端会话,尽情享受吧。

问题与解决方法

如果你使用 Tilix 作为终端仿真器,那么可能需要这样做才能正确进行窗格拆分。将其添加到你的~/.zshrc

if [[ $TILIX_ID ]]; then
        source /etc/profile.d/vte.sh
fi
Enter fullscreen mode Exit fullscreen mode

如果你收到来自 zsh-completion 插件的错误,你可能想将其添加到你的~/.zshrc

# workaround as per https://superuser.com/questions/1222867/zsh-completion-functions-broken
FPATH=$HOME/.oh-my-zsh/plugins/git:$HOME/.oh-my-zsh/functions:$HOME/.oh-my-zsh/completions:/usr/share/zsh/site-functions:/usr/share/zsh/$ZSH_VERSION/functions

export FPATH
Enter fullscreen mode Exit fullscreen mode

如果您遇到 Oh-My-Zsh 的错误[oh-my-zsh] Insecure completion-dependent directories detected,请在文件中的ZSH_DISABLE_COMPFIX=true行前设置并重新启动会话或运行source $ZSH/oh-my-zsh.sh~/.zshrcexec zsh

Docker 化的游乐场。

如果您已安装 Docker,那么您可以使用以下代码片段在沙箱中尝试此设置,而无需安装任何东西或影响您现有的设置。

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -e TERM=$TERM -it --rm ubuntu bash -uexc '
  apt update && apt install -y git curl zsh autojump && cd /root
  sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" --skip-chsh --unattended
  git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
  git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
  git clone https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
  curl -fsSLO http://bit.ly/Spaceship10kTheme
  echo "source ~/Spaceship10kTheme" >~/.zshrc
  exec zsh'
Enter fullscreen mode Exit fullscreen mode

VSCode 提示

如果您像我一样使用 VSCode,您可能也希望执行以下操作以在集成的 VSCode 终端中获得相同的终端体验。

请按照以下步骤操作

  • 下载并安装修补的字体
  • 在 Linux 上,运行fc-cache -f -v以刷新字体缓存。
  • 在 VSCode 上,打开“首选项”→“设置”,然后单击{}图标打开 JSON 模式并设置以下内容
    "terminal.integrated.shell.linux": "/usr/bin/zsh",
    "terminal.integrated.fontFamily": "'SauceCodePro Nerd Font Mono','Source Code Pro'",
    "terminal.integrated.rightClickCopyPaste": true,
    "terminal.integrated.fontSize": 14,
    "terminal.integrated.cursorStyle": "underline",
    "terminal.integrated.cursorBlinking": true
Enter fullscreen mode Exit fullscreen mode

如果您使用的是 Mac,请替换linux为。osx


希望你喜欢。如果你有任何疑问,或者觉得我遗漏了什么,欢迎留言。

如果您喜欢这篇文章,请点赞或留言。

您可以在TwitterLinkedIn上关注我。

文章来源:https://dev.to/deepu105/configure-a-beautiful-terminal-on-unix-with-zsh-4mcb
PREV
🚀 揭秘现代编程语言中的内存管理 第一部分:内存管理简介 参考资料
NEXT
现代编程语言中的并发性:Rust、Go、Java、Node.js、Deno、.NET 6