【MacOS】命令行配置zsh以及powerlevel10k主题

一、概述

前段时间在B站上看到有UP主在Manjaro Linux上使用了zsh并且配置一个超级炫酷的主题powerlevel9k:传送门。看了之后非常跃跃欲试,想在我的iMac上也配置一下,但是网上找了一下powerlevel的最新版本是powerlevel10k,而且10k的运行效率比9k提高很多,因此在这篇博文中记录一下我在MacOS中使用iTerm2终端配置zsh和powerlevel10k主题的过程。最终显示的效果如下(下文多图预警):
zsh+powerlevel10k

二、配置过程

1. 安装iTerm2并配置颜色字体

iTerm2相对于苹果原生的terminal具有更多的个性化定制和快捷键绑定,是MacOS终端的不二选择。可以在iTerm2的官网进行下载。下载完后可以选择一个颜色主题,我配置的是Solarized Dark,如下图。
配置iTerm2颜色
配置完颜色主题后为了防止后面powerlevel10k主题乱码,可以安装nerd字体。访问nerd fonts官网,下载DejaVuSansMono Nerd Font(当然你也可以选择你喜欢的字体),下载完后双击安装即可,然后在iTerm2的text配置项中选择这个字体,如下图。
iTerm2配置字体

2. 安装oh my zsh

在安装oh my zsh前可以先输入zsh --version判断一下本机是否已经安装了zsh(MacOS一般默认都会安装),如果有输出的话可以将zsh设置为默认shell:chsh -s /bin/zsh

oh my zsh是一个zsh的一个框架,它提供了很多zsh内建函数,并提供插件管理、主题管理等功能。安装它能够使zsh的使用体验更加完美。安装方式也很简单,通过curl或者wget就行了。

# 使用curl下载安装脚本并执行
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 使用wget下载安装脚本并执行
sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

3. 配置 Powerlevel10k

Powerlevel10k是oh my zsh的一个外部主题,托管在GitHub上,想要使用该主题只需要将该项目克隆下来:

# 将项目克隆到~/.oh-my-zsh/custom/themes/powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

# 使用gitee可以更加快速
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

克隆下来之后,在 zsh 的配置文件 ~/.zshrc 中设置 ZSH_THEME=powerlevel10k/powerlevel10k 即可,然后命令行输入p10k configure进行初始化。若要实现第一小节中图片的效果可以将下面脚本复制到~/.zshrc中的最后。每段代码的含义可以访问项目的GitHub,我下面就不再展开了。

COLOR=(
	004 
#	005 
	006 
#	010
	007
	)
COLOR_ARRAY=(
	004 067 059 
#	005 062 059 
	006 073 109 
#	010 070 115
	007 249 240
	)
# THEME_COLOR=$(( $RANDOM % 3 ))
THEME_COLOR=1
DEFAULT_BACKGROUND=235
DEFAULT_FOREGROUND="${COLOR[$(( $THEME_COLOR + 1 ))]}"

POWERLEVEL9K_MODE="nerdfont-complete"

#####################################[ prompt ]######################################
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="%F{$DEFAULT_FOREGROUND}╭─"
POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\ue0b4'
POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\ue0b4'
POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\ue0b0'
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%F{$DEFAULT_FOREGROUND}╰─%F{${COLOR_ARRAY[$(( $THEME_COLOR * 3 + 2 ))]}}\uf054%F{$DEFAULT_FOREGROUND}\uf054"
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION=$'\uf054'
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=124
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=70
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(user device virtualenv dir vcs newline prompt_char)
#POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(command_execution_time background_jobs status history time ssh)

#####################################[ vcs: git status ]######################################
POWERLEVEL9K_VCS_CLEAN_BACKGROUND="green"
POWERLEVEL9K_VCS_CLEAN_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND="yellow"
POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=166
POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="$DEFAULT_BACKGROUND"

##################################[ dir: current directory ]##################################
POWERLEVEL9K_DIR_HOME_BACKGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_DIR_HOME_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_DIR_HOME_SUBFOLDER_BACKGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_DIR_HOME_SUBFOLDER_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_SHORTEN_DIR_LENGTH=16
POWERLEVEL9K_SHORTEN_STRATEGY="truncate_absolute"
POWERLEVEL9K_SHORTEN_DELIMITER='...'
POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=240

##################################[ status ]##################################
POWERLEVEL9K_STATUS_OK_FOREGROUND="green"
POWERLEVEL9K_STATUS_OK_BACKGROUND="$(( $DEFAULT_BACKGROUND + 4 ))"
POWERLEVEL9K_STATUS_ERROR_FOREGROUND="red"
POWERLEVEL9K_STATUS_ERROR_BACKGROUND="$(( $DEFAULT_BACKGROUND + 4 ))"

POWERLEVEL9K_HISTORY_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_HISTORY_BACKGROUND="$(( $DEFAULT_BACKGROUND + 2 ))"

POWERLEVEL9K_VIRTUALENV_BACKGROUND="$((  $DEFAULT_BACKGROUND - 2 ))"
POWERLEVEL9K_VIRTUALENV_FOREGROUND="$DEFAULT_FOREGROUND"

POWERLEVEL9K_OS_ICON_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_OS_ICON_BACKGROUND="$DEFAULT_BACKGROUND"

POWERLEVEL9K_TIME_FORMAT="%D{%T}" #  15:29:33
POWERLEVEL9K_TIME_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_TIME_BACKGROUND="$DEFAULT_BACKGROUND"

POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
#POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0

POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND="$DEFAULT_FOREGROUND"


POWERLEVEL9K_ROOT_ICON=$'\uF198'  # 

POWERLEVEL9K_SSH_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_SSH_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_SSH_ICON="\uF489"  # 

POWERLEVEL9K_HOST_LOCAL_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_HOST_LOCAL_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_HOST_REMOTE_FOREGROUND="$DEFAULT_FOREGROUND"
POWERLEVEL9K_HOST_REMOTE_BACKGROUND="$DEFAULT_BACKGROUND"


POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_LOAD_WARNING_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_LOAD_NORMAL_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND="red"
POWERLEVEL9K_LOAD_WARNING_FOREGROUND="yellow"
POWERLEVEL9K_LOAD_NORMAL_FOREGROUND="green"
POWERLEVEL9K_LOAD_CRITICAL_VISUAL_IDENTIFIER_COLOR="red"
POWERLEVEL9K_LOAD_WARNING_VISUAL_IDENTIFIER_COLOR="yellow"
POWERLEVEL9K_LOAD_NORMAL_VISUAL_IDENTIFIER_COLOR="green"

POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND_COLOR="$DEFAULT_BACKGROUND"
POWERLEVEL9K_BATTERY_CHARGING_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_BATTERY_CHARGED_BACKGROUND="$DEFAULT_BACKGROUND"
POWERLEVEL9K_BATTERY_DISCONNECTED_BACKGROUND="$DEFAULT_BACKGROUND"

function prompt_user() {
    p10k segment -b  $DEFAULT_BACKGROUND -f $DEFAULT_FOREGROUND -i $'\uf2be' +r -t '%n'
}
function prompt_device() {
    p10k segment -b "$(( $DEFAULT_BACKGROUND + 2 ))" -f $DEFAULT_FOREGROUND -i $'\uf108' +r -t '%m'
}

三、插件

oh my zsh提供了相当多插件供你使用,不过我配置的插件并不是很多,就只有以下四种,不过可以满足我对命令行的基本需求了,而且太多插件的话也会拖慢zsh的启动速度,所以大家可以根据自己的喜好在zshrc中配置插件。若要浏览oh my zsh的官方插件可以访问它的GitHub插件wiki

plugins=(
	git
	z
	zsh-syntax-highlighting
	zsh-autosuggestions
	)
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=240'

1. git

git插件主要提供了很多git命令行缩写别名,以及一些有用的函数,详情可以访问oh-my-zsh Git插件。同时在powerlevel主题下进入一个Git仓库,你的命令提示符也会发生变化哦~
zsh git

2. z

z插件的主要功能就是快速跳转,当我们使用bash的时候进入一个目录必须输入它完整的路径名,使用z插件后它会记忆你cd过的目录,当你使用z [dir]的时候,它会快速跳转到该目录,再也不用手动输入一长串路径了。
zsh z

3. zsh-syntax-highlighting

该插件的功能是提供命令行的语法高亮,所谓的语法高亮指的是你输入的命令会产生一个颜色效果,如下图
zsh-syntax-highlighting

不过该插件是非官方的第三方插件所以需要下载,下载方式也很简单:

# 将项目克隆到~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

克隆完成后在~/.zshrc中配置该插件就行了,就像第三小节中的示例一样。

4. zsh-autosuggestions

该插件的功能是提供命令行的自动提示,虽然bash可以通过tab键的方式进行自动补全,但是该插件提供了一个可视化的方式提示你后面可能会输入的命令,如下图。当它给出的自动提示符合你的期望的时候你可以按方向键的→键进行补全。
zsh-autosuggestions
同样地,这个插件是非官方的第三方插件,像上一个插件一样从GitHub克隆后,在~/.zshrc中配置即可激活使用。

# 将项目克隆到~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值