ubuntu终端美化之zsh/oh-my-zsh

先看效果:

(如果你好奇这个和mobaxterm自带的终端极其相像那就对了,我就是按那个样子改的)

1.安装

1.1先安装zsh shell:

输入以下命令:

sudo apt-get install zsh

1.2安装oh-my-zsh:

1.2.1 情况1:

你可以流畅的访问github

你需要访问这个网址正常来说你会看到这个:

你应该复制这个命令,直接输入到终端里,应该就可以安装oh-my-zsh

1.2.2 情况2:

上述情况在你那里不存在

Ps:也就是克隆不下来

输入以下命令:

git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
#这一步是克隆项目到“~/”位置

cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
#这一步是将配置文件复制到指定位置

然后将zsh设为默认:

chsh -s /bin/zsh

3.更该主题

安装了oh-my-zsh后,你会发现:哇!我的shell竟然变得这么好看!但是,事实上,有更多更好看的主题在等着你呢!一起来看看吧!

编辑~/.zshrc文件输入以下命令:

vim ~/.zshrc

其内容是这样的:(除去了注释)

export ZSH=$HOME/.oh-my-zsh
ZSH_THEME="robbyrussell"
plugins=(git)
source $ZSH/oh-my-zsh.sh

其中的第二行的引号里就是主题的名称。如果大家打开~/.oh-my-zsh/themes文件夹,就能够看到各个主题的名称。Ps:因为比较多,我就不列出来了。比如我改成了:

ZSH_THEME="agnoster"

4.查看当前主题

echo$ZSH_THEME

2.修改主题(围绕agnoster做修改)

2.1安装插件

也许有人在开始的地方注意到了我的终端中出现了自动补全。这是安装了autojump插件的原因,下面是安装教程:输入以下命令:

sudo apt-get install autojump

然后把~/.zshrc文件中的

plugins=(git)

改为

plugins=(git autojump)

并在文件末尾添加

. /usr/share/autojump/autojump.sh

和主题一样,oh-my-zsh预装了一些插件,详情可以打开~/.oh-my-zsh/plugins文件夹查询。

如果想安装其他插件,可以修改plugins=()这一行,将插件名称用空格隔开。推荐插件:

https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins https://github.com/unixorn/awesome-zsh-plugins https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins-Overview

2.2其他小功能

2.2.1终端显示时间

2.2.2终端显示日期

2.2.3终端显示小图标及分块颜色调整

上述小功能已整理成现成配置文件(~/.oh-my-zsh/themes/agnoster.zsh-theme)如下,仅需替换你系统里的对应文件即可:

# vim:ft=zsh ts=2 sw=2 sts=2
#
# agnoster's Theme - https://gist.github.com/3712874
# A Powerline-inspired theme for ZSH
#
# # README
#
# In order for this theme to render correctly, you will need a
# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts).
# Make sure you have a recent version: the code points that Powerline
# uses changed in 2012, and older versions will display incorrectly,
# in confusing ways.
#
# In addition, I recommend the
# [Solarized theme](https://github.com/altercation/solarized/) and, if you're
# using it on Mac OS X, [iTerm 2](https://iterm2.com/) over Terminal.app -
# it has significantly better color fidelity.
#
# If using with "light" variant of the Solarized color schema, set
# SOLARIZED_THEME variable to "light". If you don't specify, we'll assume
# you're using the "dark" variant.
#
# # Goals
#
# The aim of this theme is to only show you *relevant* information. Like most
# prompts, it will only show git information when in a git working directory.
# However, it goes a step further: everything from the current user and
# hostname to whether the last call exited with an error to whether background
# jobs are running in this shell will all be displayed automatically when
# appropriate.
​
### Segment drawing
# A few utility functions to make it easy and re-usable to draw segmented prompts
​
CURRENT_BG='NONE'
​
case ${SOLARIZED_THEME:-dark}in
    light) CURRENT_FG='white';;
    *)     CURRENT_FG='black';;
esac
​
# Special Powerline characters
​
() {
  local LC_ALL=""LC_CTYPE="en_US.UTF-8"
  # NOTE: This segment separator character is correct.  In 2012, Powerline changed
  # the code points they use for their special characters. This is the new code point.
  # If this is not working for you, you probably have an old version of the
  # Powerline-patched fonts installed. Download and install the new version.
  # Do not submit PRs to change this unless you have reviewed the Powerline code point
  # history and have new information.
  # This is defined using a Unicode escape sequence so it is unambiguously readable, regardless of
  # what font the user is viewing this source code in. Do not replace the
  # escape sequence with a single literal character.
  # Do not change this! Do not make it '\u2b80'; that is the old, wrong code point.
  SEGMENT_SEPARATOR=$'\ue0b0'
}
​
# Begin a segment
# Takes two arguments, background and foreground. Both can be omitted,
# rendering default background/foreground.
prompt_segment() {
  local bg fg
  [[ -n$1 ]] && bg="%K{$1}" || bg="%k"
  [[ -n$2 ]] && fg="%F{$2}" || fg="%f"
  if [[ $CURRENT_BG !='NONE' && $1 !=$CURRENT_BG ]]; then
    echo-n" %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
  else
    echo-n"%{$bg%}%{$fg%} "
  fi
  CURRENT_BG=$1
  [[ -n$3 ]] && echo-n$3
}
​
# End the prompt, closing any open segments
prompt_end() {
  if [[ -n$CURRENT_BG ]]; then
    echo-n" %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
  else
    echo-n"%{%k%}"
  fi
  echo-n"%{%f%}"
  CURRENT_BG=''
}
​
### Prompt components
# Each component will draw itself, and hide itself if no information needs to be shown
​
# Context: user@hostname (who am I and where am I)
prompt_context() {
  if [[ "$USERNAME" !="$DEFAULT_USER" || -n"$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m"
  fi
}
​
# Git: branch/detached head, dirty status
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 2>/dev/null)"="true" ]]; 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
​
    local ahead behind
    ahead=$(git log --oneline @{upstream}.. 2>/dev/null)
    behind=$(git log --oneline ..@{upstream} 2>/dev/null)
    if [[ -n"$ahead" ]] && [[ -n"$behind" ]]; then
      PL_BRANCH_CHAR=$'\u21c5'
    elif [[ -n"$ahead" ]]; then
      PL_BRANCH_CHAR=$'\u21b1'
    elif [[ -n"$behind" ]]; then
      PL_BRANCH_CHAR=$'\u21b0'
    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
​
    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:gs/%/%%}/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode}"
  fi
}
​
prompt_bzr() {
  (( $+commands[bzr] )) || return
​
  # Test if bzr repository in directory hierarchy
  local dir="$PWD"
  while [[ ! -d"$dir/.bzr" ]]; do
    [[ "$dir"="/" ]] && return
    dir="${dir:h}"
  done
​
  local bzr_status status_mod status_all revision
  ifbzr_status=$(bzr status 2>&1); then
    status_mod=$(echo -n "$bzr_status" | head -n1 | grep "modified" | wc -m)
    status_all=$(echo -n "$bzr_status" | head -n1 | wc -m)
    revision=${$(bzr log -r-1 --log-format line | cut -d: -f1):gs/%/%%}
    if [[ $status_mod-gt0 ]] ; then
      prompt_segment yellow black "bzr@$revision ✚"
    else
      if [[ $status_all-gt0 ]] ; then
        prompt_segment yellow black "bzr@$revision"
      else
        prompt_segment green black "bzr@$revision"
      fi
    fi
  fi
}
​
prompt_hg() {
  (( $+commands[hg] )) || return
  local rev st branch
  if$(hg id >/dev/null 2>&1); then
    if$(hg prompt >/dev/null 2>&1); then
      if [[ $(hg prompt "{status|unknown}")="?" ]]; then
        # if files are not added
        prompt_segment red white
        st='±'
      elif [[ -n$(hg prompt "{status|modified}") ]]; then
        # if any modification
        prompt_segment yellow black
        st='±'
      else
        # if working copy is clean
        prompt_segment green $CURRENT_FG
      fi
      echo-n${$(hg prompt "☿ {rev}@{branch}"):gs/%/%%}$st
    else
      st=""
      rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
      branch=$(hg id -b 2>/dev/null)
      if`hg st | grep -q "^\?"`; then
        prompt_segment red black
        st='±'
      elif`hg st | grep -q "^[MA]"`; then
        prompt_segment yellow black
        st='±'
      else
        prompt_segment green $CURRENT_FG
      fi
      echo-n"☿ ${rev:gs/%/%%}@${branch:gs/%/%%}"$st
    fi
  fi
}
​
# Dir: current working directory
prompt_dir() {
  prompt_segment blue $CURRENT_FG'%~'
}
​
# Virtualenv: current working virtualenv
prompt_virtualenv() {
  if [[ -n"$VIRTUAL_ENV" && -n"$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then
    prompt_segment blue black "(${VIRTUAL_ENV:t:gs/%/%%})"
  fi
}
​
# Status:
# - was there an error
# - am I root
# - are there background jobs?
prompt_status() {
  local -a symbols
​
  #[[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘💔"
  [[ $RETVAL-ne0 ]] && symbols+="%{%F{red}%}💔"
  [[ $UID-eq0 ]] && symbols+="%{%F{green}%}⚡"
  [[ $(jobs -l | wc -l)-gt0 ]] && symbols+="%{%F{cyan}%}⚙"
​
  [[ -n"$symbols" ]] && prompt_segment black default "$symbols"
}
​
#AWS Profile:
# - display current AWS_PROFILE name
# - displays yellow on red if profile name contains 'production' or
#   ends in '-prod'
# - displays black on green otherwise
prompt_aws() {
  [[ -z"$AWS_PROFILE" || "$SHOW_AWS_PROMPT"=false ]] && return
  case "$AWS_PROFILE"in
    *-prod|*production*) prompt_segment red yellow  "AWS: ${AWS_PROFILE:gs/%/%%}" ;;
    *) prompt_segment green black "AWS: ${AWS_PROFILE:gs/%/%%}" ;;
  esac
}
​
# time
prompt_time_hhmmss() {
    str="🕒 %{%F{black}%}%D{%T}"
    #str=" %{%F{black}%}%D{%T}"
    prompt_segment green default "$str"
}
​
prompt_time_yymmdd() {
    #str=" %{%F{black}%}%D{%m/%f}"
    str="📆 %{%F{black}%}%D{%m/%f}"
    prompt_segment blue default "$str"
}
prompt_dir() {
  # 修改1:%~ 改成 %c,只显示当前文件夹
  #prompt_segment yellow $CURRENT_FG ' %c'
  prompt_segment yellow $CURRENT_FG'📂 %c'
}
#prompt_time() {
# local DT="`date "+%Y-%m-%d %H:%M:%S"`"
#  local DT="`date "+%Y-%m-%d_%H·%M·%S"`"
#  prompt_segment black default "%(!.%{%F{yellow}%}.)$DT"
#}
## Main prompt
build_prompt() {
  RETVAL=$?
  prompt_status
  prompt_virtualenv
  prompt_aws
  prompt_time_yymmdd #终端显示日期
  prompt_time_hhmmss #终端显示时分秒
  #prompt_context
  prompt_dir
  prompt_git
  prompt_bzr
  prompt_hg
  prompt_end
}
​
PROMPT='%{%f%b%k%}$(build_prompt) 

3.卸载zsh及oh-my-zsh

使用命令卸载zsh及其配置相关文件(卸载后重启终端可恢复至原始shell):

sudo apt-get --purge remove zsh
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 首先,需要安装zsh。在终端中输入以下命令: sudo apt-get install zsh 2. 安装完成后,输入以下命令安装oh-my-zsh: sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 3. 安装完成后,需要将zsh设置为默认shell。输入以下命令: chsh -s /bin/zsh 4. 重启终端,即可开始使用oh-my-zsh。 ### 回答2: 在安装 Oh-My-Zsh 之前,需要确保已经在 Ubuntu 安装了 Git。如果没有安装,可以通过以下命令安装: sudo apt-get install git 然后可以使用以下命令来安装 Oh-My-Zsh: sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 运行命令后,终端会在几秒钟内自动安装 Oh-My-Zsh,并提示您选择是否将其设置为默认 shell。如果希望将其设置为默认 shell,则需要输入 Y。 安装完成后,可以通过打开 ~/.zshrc 文件来编辑 Oh-My-Zsh 配置。可以添加自己的主题、插件以及自定义别名等等。 推荐使用 Powerlevel10k 主题,这是一个非常流行的 Shell 主题,支持多种显示特效选项,样式非常美观,并且可配置性极高,可以根据自己的喜好进行配置。 可以通过以下命令来下载 Powerlevel10k 主题: git clone https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k 然后将主题添加到 .zshrc 文件中: echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc 最后,重新启动终端,即可看到 Oh-My-Zsh 的主题已经生效了,同时也可以使用终端中的更多功能和快捷方式了。 ### 回答3: Oh-my-zsh是一款提供增强了的终端功能和个性化定制的Shell使用工具,它基于Zsh开发,提供了丰富的主题和插件让我们可以方便地使用终端。 安装oh-my-zsh通常需要在终端中运行一系列命令: 1.打开终端,输入以下命令安装Zsh: sudo apt-get install zsh 2.安装Git: sudo apt-get install git 3.下载oh-my-zsh: wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh 4.设置oh-my-zsh为默认shell: chsh -s /bin/zsh 5.退出当前终端,并重新打开一个新的终端窗口,当看到欢迎界面出现后,表示oh-my-zsh安装成功。 如果你想自定义oh-my-zsh,可以编辑~/.zshrc文件。该文件包含了oh-my-zsh的配置信息。你可以通过更改配置信息来定制自己的终端。 如果你想添加主题或插件,可以在oh-my-zsh的主题和插件目录下添加自己的主题或插件。主题和插件都以git仓库的形式存在,所以您需要克隆相应的仓库到相应目录下。 安装oh-my-zsh可能需要一些时间,但是它提供了一些很有用的功能。无论你是要解决日常的问题还是进行开发工作,在你的终端上使用oh-my-zsh将会让你得到更高效的工作方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值