mac下使用iTerm2终端,安装了zsh shell和oh-my-zsh配置,且使用主题agnoster,日常情况下都很好用没有什么问题,直到进入一个WebRTC大型工程时执行任何命令都非常慢,猜测应该是命令提示符显示了当前目录的git的一些状态,而这个工程的.git
太庞大了,所以读取git状态很慢。
网上查找解决办法:
关闭读取git信息
\$ git config --add oh-my-zsh.hide-dirty 1 \$ git config --add oh-my-zsh.hide-status 1
开启则将1改为0。
但这个办法相当于完全关闭了命令提示符的git显示功能,无法知道当前git的一些信息,比如我只想知道当前git分支信息,这个信息使用git读取应该是非常快的,而其他git动态信息才是影响速度的关键。
于是自己手动修改on-my-zsh的配置。
一开始修改$ZSH/lib/git.zsh
,但使用source ~/.zshrc
无法使修改生效。
最后发现git信息读取应该是在当前主题agnoster中被配置。
解决办法
修改$ZSH/themes/agnoster.zsh-theme
文件的prompt_git()
方法:
prompt_git() {
(( $+commands[git] )) || return
if [[ "$(git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]]; then
return
fi
local PL_BRANCH_CHAR
() {
local LC_ALL="" LC_CTYPE="en_US.UTF-8"
PL_BRANCH_CHAR=$'\ue0a0' #
}
local ref dirty mode repo_path
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
repo_path=$(git rev-parse --git-dir 2>/dev/null)
dirty=$(parse_git_dirty)
ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git rev-parse --short HEAD 2> /dev/null)"
if [[ -n $dirty ]]; then
prompt_segment yellow black
else
prompt_segment green $CURRENT_FG
fi
if [[ -e "${repo_path}/BISECT_LOG" ]]; then
mode=" <B>"
elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then
mode=" >M<"
elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then
mode=" >R>"
fi
#新增zsh.hide-status配置,不显示一些动态信息,提高速度=================
if [[ "$(git config --get zsh.hide-status 2>/dev/null)" = 1 ]]; then
echo -n "${ref/refs\/heads\//$PL_BRANCH_CHAR }${mode}"
return
fi
#=================================================================
setopt promptsubst
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' get-revision true
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' stagedstr '✚'
zstyle ':vcs_info:*' unstagedstr '●'
zstyle ':vcs_info:*' formats ' %u%c'
zstyle ':vcs_info:*' actionformats ' %u%c'
vcs_info
echo -n "${ref/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode}"
fi
}
保存后,让配置生效:
source ~/.zshrc
进入工程目录开启配置,只对当前git工程生效:
git config --add zsh.hide-status 1
shell飞快起来了~~~~