使用 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。
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
- 对于其他平台,请参阅此
- 现在通过运行将 Zsh 设为默认 shell
chsh -s $(which zsh)
。 - 注销并重新登录以使用新的默认 shell。
- 测试它是否与 echo 配合使用
$SHELL
。预期结果:/bin/zsh
或类似。 - 测试
$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)"
终端仿真器/多路复用器
您可以选择使用可以为您管理窗口和窗格的终端仿真器。
对于 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
Zsh 设置
现在我们可以配置一些 Zsh 特定的设置
DISABLE_MAGIC_FUNCTIONS=true
ZSH_AUTOSUGGEST_MANUAL_REBIND=1
COMPLETION_WAITING_DOTS=true
DISABLE_UNTRACKED_FILES_DIRTY=true
Zsh 主题
现在,让我们设置一个漂亮的主题。我目前使用powerlevel10k作为主题,它运行速度很快,而且看起来很棒。您可以使用默认主题,也可以从此处的列表中选择任何您喜欢的主题。如果您喜欢我的主题,请按照以下说明操作。感谢Roman Perepelitsa提供的一些实用技巧
运行git clone https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
以安装主题。
安装Powerline 字体。我使用Adobe 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 ##############
启用插件
我们可以通过启用插件和一些调整来完成
plugins=(zsh-autosuggestions git docker docker-compose autojump zsh-syntax-highlighting dnf npm)
source $ZSH/oh-my-zsh.sh
好了,一切准备就绪。启动一个新的终端会话,尽情享受吧。
问题与解决方法
如果你使用 Tilix 作为终端仿真器,那么可能需要这样做才能正确进行窗格拆分。将其添加到你的~/.zshrc
if [[ $TILIX_ID ]]; then
source /etc/profile.d/vte.sh
fi
如果你收到来自 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
如果您遇到 Oh-My-Zsh 的错误[oh-my-zsh] Insecure completion-dependent directories detected
,请在文件中的ZSH_DISABLE_COMPFIX=true
行前设置并重新启动会话或运行source $ZSH/oh-my-zsh.sh
~/.zshrc
exec 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'
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
如果您使用的是 Mac,请替换linux
为。osx
希望你喜欢。如果你有任何疑问,或者觉得我遗漏了什么,欢迎留言。
如果您喜欢这篇文章,请点赞或留言。
文章来源:https://dev.to/deepu105/configure-a-beautiful-terminal-on-unix-with-zsh-4mcb