`

ubuntu zsh安装

阅读更多

参考:https://github.com/robbyrussell/oh-my-zsh/

          https://github.com/robbyrussell/oh-my-zsh/wiki/Themes#agnoster

          http://logicmd.net/2012/11/installing-zsh-on-ubunt/

 

移除之前可能的oh-my-zsh的安装。

sudo apt-get install zsh git

if [ -d ~/.oh-my-zsh ]; then

    rm -r ~/.oh-my-zsh

fi

 

安装完成后设置当前用户使用 zsh:

chsh -s /bin/zsh

 

安装 git。

sudo apt-get install git

 

然后把shell切换成zsh,并重启计算机。

chsh -s `which zsh`

sudo shutdown -r 0

 

配置主要集中在用户当前目录的.zshrc里,用 vim 或你喜欢的其他编辑器打开.zshrc,在最下面会发现这么一行字:

 

# Customize to your needs…

 

 

接下来进行别名的设置,我自己的部分配置如下: 

alias ll='ls -l'

alias la='ls -a'

alias vi='vim'

alias javac="javac -J-Dfile.encoding=utf8"

alias grep="grep --color=auto"

alias -s html=mate   # 在命令行直接输入后缀为 html 的文件名,会在 TextMate 中打开

alias -s rb=mate     # 在命令行直接输入 ruby 文件,会在 TextMate 中打开

alias -s bz2='tar -xjvf'

zsh 的牛粪之处在于不仅可以设置通用别名,还能针对文件类型设置对应的打开程序,比如:

alias -s html=mate,意思就是你在命令行输入 hello.html,zsh会为你自动打开 TextMat 并读取 hello.html; alias -s gz='tar -xzvf',表示自动解压后缀为 gz 的压缩包。

 

 

默认主题是:

ZSH_THEME="robbyrussell"

 

设置默认的user

DEFAULT_USER=‘’

 

可以自己命名,例如:lzyfn.zsh-theme ,内容为下面的,需要添加字体:

cd~/.fonts/ && git clone https://github.com/scotu/ubuntu-mono-powerline.git 

 

    主题 lzyfn.zsh-theme

### Segment drawing
# A few utility functions to make it easy and re-usable to draw segmented prompts

CURRENT_BG='NONE'

# 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'
	SEGMENT_SEPARATOR='⮀'
}

# 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 [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment cyan black  "%(!.%{%F{yellow}%}.)$USER@%m:"
  fi
}

# Git: branch/detached head, dirty status
prompt_git() {
  (( $+commands[git] )) || return
  local PL_BRANCH_CHAR
  () {
    local LC_ALL="" LC_CTYPE="en_US.UTF-8"
    PL_BRANCH_CHAR=$'\ue0a0'         # 
  }
  local ref dirty mode repo_path
  repo_path=$(git rev-parse --git-dir 2>/dev/null)

  if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
    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 black
    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/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode}"
    echo -n "${ref/refs\/heads\//}${vcs_info_msg_0_%% }${mode}"
  fi
}

prompt_bzr() {
    (( $+commands[bzr] )) || return
    if (bzr status >/dev/null 2>&1); then
        status_mod=`bzr status | head -n1 | grep "modified" | wc -m`
        status_all=`bzr status | head -n1 | wc -m`
        revision=`bzr log | head -n2 | tail -n1 | sed 's/^revno: //'`
        if [[ $status_mod -gt 0 ]] ; then
            prompt_segment yellow black
            echo -n "bzr@"$revision "✚ "
        else
            if [[ $status_all -gt 0 ]] ; then
                prompt_segment yellow black
                echo -n "bzr@"$revision

            else
                prompt_segment green black
                echo -n "bzr@"$revision
            fi
        fi
    fi
}

prompt_hg() {
  (( $+commands[hg] )) || return
  local rev status
  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 black
      fi
      echo -n $(hg prompt "☿ {rev}@{branch}") $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 black
      fi
      echo -n "☿ $rev@$branch" $st
    fi
  fi
}

# Dir: current working directory
prompt_dir() {
  ## prompt_segment blue black '%~'
	prompt_segment cyan black '%~'
}

# Virtualenv: current working virtualenv
prompt_virtualenv() {
  local virtualenv_path="$VIRTUAL_ENV"
  if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
    prompt_segment blue black "(`basename $virtualenv_path`)"
  fi
}

# Status:
# - was there an error
# - am I root
# - are there background jobs?
prompt_status() {
  local symbols
  symbols=()
  [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘"
  [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡"
  [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙"

  [[ -n "$symbols" ]] && prompt_segment black default "$symbols"
}

## Main prompt
build_prompt() {
  RETVAL=$?
  prompt_status
  prompt_virtualenv
  prompt_context
  prompt_dir
  prompt_git
  prompt_bzr
  prompt_hg
  prompt_end
}

PROMPT='%{%f%b%k%}$(build_prompt) '

 

 

oh my zsh 项目提供了完善的插件体系,相关的文件在~/.oh-my-zsh/plugins目录下,默认提供了100多种,大家可以根据自己的实际学习和工作环境采用,想了解每个插件的功能,只要打开相关目录下的 zsh 文件看一下就知道了。插件也是在 ~.zshrc 配置文件里,找到plugins关键字,你就可以加载自己的插件了,系统默认加载 git ,你可以在后面追加内容,如下:

 

plugins=(rails3 rails git textmate ruby rvm gem git github brew bundler textmate pow)

下面简单介绍几个:

 

1、git:当你处于一个 git 受控的目录下时,Shell 会明确显示 「git」和 branch,如上图所示,另外对 git 很多命令进行了简化,例如 gco=’git checkout’、gd=’git diff’、gst=’git status’、g=’git’等等,熟练使用可以大大减少 git 的命令长度,命令内容可以参考~/.oh-my-zsh/plugins/git/git.plugin.zsh

 

2、textmate:mr可以创建 ruby 的框架项目,tm finename 可以用 textmate 打开指定文件。

 

3、osx:tab 增强,quick-look filename 可以直接预览文件,man-preview grep 可以生成 grep手册 的pdf 版本等。

 

4、autojump:zsh 和 autojump 的组合形成了 zsh 下最强悍的插件,今天我们主要说说这货。

 

首先安装autojump,如果你用 Mac,可以使用 brew 安装:

 

brew install autojump

如果是 Linux,去下载 autojump 的最新版本,比如:

 

wget https://github.com/downloads/joelthelion/autojump/autojump_v21.1.2.tar.gz

解压缩后进入目录,执行

 

./install.sh

最后把以下代码加入.zshrc:

 

[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

至此,安装、配置、插件三位一体,终极 Shell 全面登场。退出终端会话重新登录,开始感受 zsh 的训疾如风!

 

分享到:
评论

相关推荐

    Ubuntu 18.04下安装zsh和oh-my-zsh.doc

    "Ubuntu 18.04 下安装 zsh 和 oh-my-zsh" 在 Ubuntu 18.04 环境中,安装 zsh 和 oh-my-zsh 可以极大地提高命令行的体验。下面将详细介绍安装和配置 zsh 和 oh-my-zsh 的过程。 安装 zsh zsh 是一个功能强大的 ...

    Ubuntu工具zsh和Byobu

    标题中的“Ubuntu工具zsh和Byobu”指的是在Ubuntu操作系统中使用的两个强大的终端增强工具。zsh(Z-Shell)是一种高级的Unix shell,它提供了比默认的bash(Bourne-Again SHell)更多的功能和改进。Byobu则是一个...

    命令行zsh自动安装脚本

    3. **获取Zsh源码**:通常从官方仓库或者通过包管理器(如apt-get for Debian/Ubuntu, yum/dnf for CentOS/RHEL)下载最新版本的Zsh源码。 4. **编译和安装**:解压源码,配置安装路径,然后编译和安装。 5. **...

    0673-极智开发-解读ubuntu安装oh my zsh的方法

    0673_极智开发_解读ubuntu安装oh my zsh的方法

    Ubuntu2004-zsh-lvm-160g.ova.rar

    Ubuntu 20.04默认使用的是Bash,但用户可以自行选择安装并切换到ZSH,比如通过Oh My ZSH框架来增强ZSH的功能。 3. **LVM (逻辑卷管理)**: LVM是Linux下的一个存储管理技术,它允许我们将多个硬盘或分区组合成逻辑卷...

    Ubuntu 16.04安装ros 以及 Google Cartographer Slam

    ### Ubuntu 16.04 安装 ROS 与 Google Cartographer SLAM 详细步骤 #### 一、环境准备及源设置 在开始安装 ROS 和 Google Cartographer SLAM 之前,确保您的 Ubuntu 16.04 系统已经完成了基本的系统更新,并且能够...

    ubuntu基本工具Vim和Zsh等安装配置.txt

    适合初步接触ubuntu系统,需要配置git工具,VIm编辑器,zsh命令解释器及其插件的人,所需要的配置vim插件脚本install_vim.sh已经重新上传,原来的服务器地址不可用,直接bash install_vim.sh即可

    linux-使用zsh和zgen的简单zsh快速启动

    Zgen(Zsh Generator)是Zsh的一个轻量级框架,用于管理你的shell配置,使得安装、更新和管理插件、主题变得非常容易。本文将深入探讨如何使用Zsh和Zgen来实现快速启动和高效工作。 首先,安装Zsh。在大多数Linux...

    终极Shell——Zsh 转载

    - 在大多数Linux发行版和macOS上,可以通过包管理器安装,如Ubuntu的`apt-get install zsh`或macOS的`brew install zsh`。 - 要将Zsh设为默认shell,需使用`chsh -s /bin/zsh`命令。 4. **Oh My Zsh**: - Oh My...

    Ubuntu下的oh-my-zsh,ls彩色显示各种类型的文件.docx

    "Ubuntu 下的 oh-my-zsh,ls 彩色显示各种类型的文件" 在 Ubuntu 系统中,默认的命令行工具是 Bash,但是随着 oh-my-zsh 的出现,许多用户开始使用 zsh 作为默认 shell。oh-my-zsh 是一个基于 zsh 的配置框架,提供...

    zsh与oh-my-zsh终极配置文件

    zsh是众多shell里面比较强大的一个,有强大的补全功能,绚丽的颜色配置,传统的bash在它面前都显得没有任何光彩,最重要的就是兼容bash,但是又比bash好用,这里是基于oh-my-zsh的一个强大的配置文件

    用一行代码在Docker容器中安装Zsh,Oh-My-Zsh和插件!-Linux开发

    用一行代码在Docker容器中安装Zsh,Oh-My-Zsh和插件! Oh My Zsh Installer for Docker这是一个脚本,用于自动在开发容器中安装Oh My Zsh。 适用于基于Alpine,Ubuntu,Debian,CentOS或Amazon Linux的任何映像。 ...

    zsh_history:备份和还原ZSH历史记录

    备份和还原ZSH历史记录 简单的python脚本,可以将zsh历史记录文件备份和还原到sqlite db Dedups命令,并添加数据库中但不在历史记录文件中的所有命令 接受最大长度参数 这不会截断您的现有文件 如果最大长度小于或...

    ansible-role-zsh:安装ZSH和ZSH补全的简单角色

    ZSH 安装ZSH和ZSH补全的简单角色。要求该角色已在Ubuntu 16.04、18.04、20.04和Mac OSX High Sierra上进行了测试。 尽管任何带有ZSH软件包的操作系统都可以使用。 在Ubuntu上,该角色应以root身份运行,并使用become...

    myubuntu:Ubuntu的安装后脚本

    shell-extensions vundle 获取电力线字体获取优胜美地字体将点文件复制到主目录安装oh-my-zsh 为rofi创建键盘快捷方式(此操作是手动完成的,因为我不知道如何编写脚本来自动执行此操作)安装我的Ubuntu要求如果尚未...

    linux-为Zsh提供类似于Fishshell的语法高亮

    例如,在Ubuntu或Debian上,可以运行`sudo apt-get install zsh highlight`;在Fedora或CentOS上,可以使用`sudo dnf install zsh highlight`。 3. **配置`oh-my-zsh`**:如果你还没安装`oh-my-zsh`,可以先按照...

    ubuntu:适用于软件开发人员的Ubuntu安装脚本!!!!

    Ubuntu安装脚本 该项目是一个安装脚本,它允许在一个命令中安装编程语言,二进制文件和实用程序! 支持的操作系统 的Ubuntu Linux Mint 安装 以下示例显示如何使用安装脚本: curl -s ' ...

    Bash切换Zsh后,bashrc文件失效的解决方案.docx

    Bash 切换 Zsh 后,bashrc 文件失效的解决方案 在使用 Bash 时,bashrc 文件是 Bash Shell 的配置文件,用于存储用户的个性化设置。但是,当我们切换到 Zsh 时,bashrc 文件将失效,导致原先的配置无法生效。这种...

    linux-在zsh中用于CD类似于Fish的交互式tab完成

    要安装`zsh-completions`,可以使用流行的包管理器,如`Homebrew`(在macOS上)或`apt`(在Debian/Ubuntu系统上)。在`Homebrew`上,可以运行以下命令: ``` brew install zsh-completions ``` 在`apt`上,执行: ...

    Ubuntu安装

    Ubuntu安装 Ubuntu 20.04 LTS的安装 sudo apt update sudo apt install -y ansible ansible-playbook main.yaml -e "username=$(id -un)" -e "hostname=$(uname -n)" -K 概括 系统更新 dist升级 系统工具 新获取 ...

Global site tag (gtag.js) - Google Analytics