欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2024/3/7 编程问答 76 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【MacOS】命令行配置zsh以及powerlevel10k主题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、概述

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

二、配置过程

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

iTerm2相对于苹果原生的terminal具有更多的个性化定制和快捷键绑定,是MacOS终端的不二选择。可以在iTerm2的官网进行下载。下载完后可以选择一个颜色主题,我配置的是Solarized Dark,如下图。

配置完颜色主题后为了防止后面powerlevel10k主题乱码,可以安装nerd字体。访问nerd fonts官网,下载DejaVuSansMono Nerd Font(当然你也可以选择你喜欢的字体),下载完后双击安装即可,然后在iTerm2的text配置项中选择这个字体,如下图。

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 # 010007) COLOR_ARRAY=(004 067 059 # 005 062 059 006 073 109 # 010 070 115007 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=0POWERLEVEL9K_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=(gitzzsh-syntax-highlightingzsh-autosuggestions) ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=240'

1. git

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

2. z

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

3. 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键的方式进行自动补全,但是该插件提供了一个可视化的方式提示你后面可能会输入的命令,如下图。当它给出的自动提示符合你的期望的时候你可以按方向键的→键进行补全。

同样地,这个插件是非官方的第三方插件,像上一个插件一样从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

总结

以上是生活随笔为你收集整理的【MacOS】命令行配置zsh以及powerlevel10k主题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。