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 的训疾如风!
下一篇: php模板之Phpbean的目录结构
推荐阅读
-
电脑安装ABBYY FineReader 12提示访问文件被拒绝的解决方法
-
mysql 5.7以上版本安装配置方法图文教程(mysql 5.7.12mysql 5.7.13mysql 5.7.14)
-
Wing FTP Server FTP服务器端中文版安装使用教程
-
Mysql5.7.17 winx64.zip解压缩版安装配置图文教程
-
ie9无法安装怎么解决?ie9无法安装解决图文教程
-
linux下mysql的安装步骤
-
windows系统mysql5.7.18安装图文教程
-
谷歌浏览器(chrome)的免费插件时空隧道安装与使用图文教程
-
详解在React项目中安装并使用Less(用法总结)
-
python3.4+pycharm 环境安装及使用方法