关于尚观
最新课程体系
企业服务
零起点咨询
开放课程
报名咨询
免费资源申请
Oracle服务
学员专区&薪资
认证课程
  • 尚观首页
  • 尚观简介
  • 师资力量
  • 尚观文化
  • 尚观动态
  • 加入尚观
  • 联系我们
  • 珍贵瞬间
  • 院校合作
  • Linux系统与集群
  • 数据库集群架构师
  • 嵌入式内核驱动开发
  • 服务器开发架构师
  • Android开发架构师
  • RHCE/LPI认证体系
  • Oracle OCP认证
  • 企业高级技术培训
  • 批量人才供应及研发团队建设
  • 软件外包及研发项目合作
  • 人力外包及人力供应
  • 猎头服务
  • 开启职业生涯
  • 如何入门
  • Unix/Linux职业方向
  • 嵌入式职业方向
  • 集群(Cluster)Oracle(DBA)方向
  • 新手专栏
  • Android开发方向
  • Unix/Linux新手专栏
  • Unix/Linux管理
  • 嵌入式及POSIX开发
  • Linux开源文化及市场
  • 最近网络课堂
  • P2P教学视频
  • 精彩Linux培训视频
  • 零起点数据库集群(长期)
  • 嵌入式驱动(长期)
  • Linux金牌三证(RHCE级)
  • Linux架构师(RHCA级)
  • 嵌入式/驱动加速课程
  • Linux免费网络安全公开课
  • 免费Linux资料申请
  • 免费Linux安全&DDOS防御课程
  • 免费嵌入式Linux开发课程
  • 免费Linux网络安全机制
  • 尚观服务
  • 软件产品
  • 技术方案
  • 尚观支持
  • 学员毕业薪资(不断更新中)
  • 加入尚观猎头服务(仅限老学员)
  • OCP认证
  • Intel认证
  • RHCE认证
  • RHCE+OCP
  • RHCE+LPI
  • OCM认证
  • RHCA认证


    您现在的位置:尚观Linux培训 - 嵌入式Linux培训专家尚观Linux培训 » 嵌入式及POSIX开发 » 终极Shell——Zsh

 
 
咨询热线
  • 免费咨询电话:
    400-700-0056
    800-810-0056

    教学就业监督电话:
    400-810-3016



  • 在线咨询
免费资源
  • -4月24日
  • [沈阳]Linux嵌入式-4月24日
  • [上海]DDos攻防-4月24日
  • [上海]Linux嵌入式-4月24日
  • [深圳]DDos攻防-4月24日
  • [深圳]Linux嵌入式-4月24日
  • [北京]DDos攻防-4月24日
  • 就业课程
  • 免费课程
  • 五万年薪就业保证课程

  • ULP-S 尚观王者IT集群课程 v8版
  • UEA嵌入式内核驱动开发者 V8版
  • UGA-Android开发架构师 V3.2版
  • ULA-Linux云计算集群架构师课程
  • UOA-Oracle数据库集群架构
  • 八万年薪就业保证课程

  • UOM- Oracle集群大师
  • UEM-嵌入式开发大师
  • 纯免费!shrek主讲 linux网络攻击及安全课程 2月8日
  • 纯免费!连续3天,Android开发入门实战免费公开课 12月27日
  • 纯免费!“云”指南“嵌入式”指北大型讲座! 12月24日
  • 纯免费!云计算虚拟化应用大型讲座! 12月17日
  • 纯免费! OCM考试经验分享! 12月7日
  • 纯免费! RHCA考试与学习经验分享! 12月13日
  • 纯免费! Android在线天气预报开发实战 11月30日
  • 纯免费! shrek主讲Linux攻防与安全! 11月24日
  • 纯免费! Redhat最高级RHCA考试与学习经验分享 11月22日
Linux培训●最新开班
  • [北京]UGA课程12月班热招!
  • [北京]UEA课程12月班热报!
  • [北京]ULP-S课程12月班热招
  • [上海]UEA课程12月班热招!
  • [上海]ULP-S课程12月班热招
  • [上海]UGA课程12月班热招!
  • [深圳]ULP-S课程12月班热招
  • [深圳]UEA课程12月班热招!
 
终极Shell——Zsh
  •        有句话这样说,zsh: The last shell you’ll ever need! Z是最后一个字母,所以是终极Shell。

        我曾经搜索到一个比较各种Shell的文章,Zsh交互性是A+级别的,远高于其它Shell。在编程方面,Zsh是A级的吧,也是最高的。只是不知道出于什么原因,Zsh被严重的低估了。

        大多数的Linux用户比较偏爱Bash,因为大多数的发行版默认的就是它。凭心而论,Bash确实比Csh之流的好用多了。不过Bash也有很多地方不尽人意,像自动补全的功能不够强大,定位较长路径不够方便等。

        后来我使用Zsh。如果不调整一些必要的配置的话,Zsh甚至还不如Bash好用。这也是很多人尝试过并放弃过的原因。

        不熟悉Zsh的人,对Zsh最深刻的印象应该就是它的命令提示符了。它支持右侧对齐的提示符,并且可以配置成这个样子的:

        不过我还是喜欢比较简单的样式。

        Zsh的自动补全功能十分的强大,如图所示:

        它可以自动补全命令、参数、文件名、进程、用户名、变量、权限符等。

        Zsh还有一个贴心的功能:路径别名。假设有一个很长的路径,例如/home/lighttpd/html,可以把这个路径命名为 ~WWW。

        Zsh可以使用Emacs风格的键绑定,习惯Bash键绑定的朋友无需重新适应。Zsh兼容大多数主流Shell,像Bash、Csh等。

    下面讲解一下Zsh配置文件:

        #命令提示符 ( ^[ 是一个特殊字符 在vi插入模式下 按Ctrl+v ESC 插入该字符)
        PROMPT='%{ ^[[36m%}%n%{^[[35m%}@%{^[[34m%}%M %{^[[33m%}%D %T %{^[[32m%}%/
        %{^[[31m%}>>%{^[[m%}'

        #关于历史纪录的配置
        # number of lines kept in history
        export HISTSIZE=10000
        # # number of lines saved in the history after logout
        export SAVEHIST=10000
        # # location of history
        export HISTFILE=~/.zhistory
        # # append command to history file once executed
        setopt INC_APPEND_HISTORY

        #Disable core dumps
        limit coredumpsize 0

        #Emacs风格键绑定
        bindkey -e
        #设置DEL键为向后删除
        bindkey "\e[3~" delete-char

        #以下字符视为单词的一部分
        WORDCHARS='*?_-[]~=&;!#$%^(){}<>'

        #自动补全功能
        setopt AUTO_LIST
        setopt AUTO_MENU
        setopt MENU_COMPLETE

        autoload -U compinit
        compinit

        # Completion caching
        zstyle ':completion::complete:*' use-cache on
        zstyle ':completion::complete:*' cache-path .zcache
        #zstyle ':completion:*:cd:*' ignore-parents parent pwd

        #Completion Options
        zstyle ':completion:*:match:*' original only
        zstyle ':completion::prefix-1:*' completer _complete
        zstyle ':completion:predict:*' completer _complete
        zstyle ':completion:incremental:*' completer _complete _correct
        zstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate

        # Path Expansion
        zstyle ':completion:*' expand 'yes'
        zstyle ':completion:*' squeeze-shlashes 'yes'
        zstyle ':completion::complete:*' '\\'

        zstyle ':completion:*:*:*:default' menu yes select
        zstyle ':completion:*:*:default' force-list always

        # GNU Colors 需要/etc/DIR_COLORS文件 否则自动补全时候选菜单中的选项不能彩色显示
        [ -f /etc/DIR_COLORS ] && eval $(dircolors -b /etc/DIR_COLORS)
        export ZLSCOLORS="${LS_COLORS}"
        zmodload zsh/complist
        zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
        zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'

        zstyle ':completion:*' completer _complete _match _approximate
        zstyle ':completion:*:match:*' original only
        zstyle ':completion:*:approximate:*' max-errors 1 numeric

        compdef pkill=kill
        compdef pkill=killall
        zstyle ':completion:*:*:kill:*' menu yes select
        zstyle ':completion:*:processes' command 'ps -au$USER'

        # Group matches and Describe
        zstyle ':completion:*:matches' group 'yes'
        zstyle ':completion:*:options' description 'yes'
        zstyle ':completion:*:options' auto-description '%d'
        zstyle ':completion:*:descriptions' format $'\e[01;33m -- %d --\e[0m'
        zstyle ':completion:*:messages' format $'\e[01;35m -- %d --\e[0m'
        zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m'

        #命令别名
        alias cp='cp -i'
        alias mv='mv -i'
        alias rm='rm -i'
        alias ls='ls -F --color=auto'
        alias ll='ls -l'
        alias grep='grep --color=auto'
        alias ee='emacsclient -t'

        #路径别名 进入相应的路径时只要 cd ~xxx
        hash -d WWW="/home/lighttpd/html"
        hash -d ARCH="/mnt/arch"
        hash -d PKG="/var/cache/pacman/pkg"
        hash -d E="/etc/env.d"
        hash -d C="/etc/conf.d"
        hash -d I="/etc/rc.d"
        hash -d X="/etc/X11"
        hash -d BK="/home/r00t/config_bak"

        ##for Emacs在Emacs终端中使用Zsh的一些设置 不推荐在Emacs中使用它
        if [[ "$TERM" == "dumb" ]]; then
        setopt No_zle
        PROMPT='%n@%M %/
        >>'
        alias ls='ls -F'
        fi

        效果超炫的提示符:

        #效果超炫的提示符

        function precmd {

        local TERMWIDTH
        (( TERMWIDTH = ${COLUMNS} - 1 ))

        ###
        # Truncate the path if it's too long.

        PR_FILLBAR=""
        PR_PWDLEN=""

        local promptsize=${#${(%):---(%n@%m:%l)---()--}}
        local pwdsize=${#${(%):-%~}}

        if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then
        ((PR_PWDLEN=$TERMWIDTH - $promptsize))
        else
        PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}"
        fi

        ###
        # Get APM info.

        #if which ibam > /dev/null; then
        #PR_APM_RESULT=`ibam --percentbattery`
        #elif which apm > /dev/null; then
        #PR_APM_RESULT=`apm`
        #fi
        }

        setopt extended_glob
        preexec () {
        if [[ "$TERM" == "screen" ]]; then
        local CMD=${1[(wr)^(*=*|sudo|-*)]}
        echo -n "\ek$CMD\e\\"
        fi
        }

        setprompt () {
        ###
        # Need this so the prompt will work.

        setopt prompt_subst

        ###
        # See if we can use colors.

        autoload colors zsh/terminfo
        if [[ "$terminfo[colors]" -ge 8 ]]; then
        colors
        fi
        for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
        eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
        eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
        (( count = $count + 1 ))
        done
        PR_NO_COLOUR="%{$terminfo[sgr0]%}"

        ###
        # See if we can use extended characters to look nicer.

        typeset -A altchar
        set -A altchar ${(s..)terminfo[acsc]}
        PR_SET_CHARSET="%{$terminfo[enacs]%}"
        PR_SHIFT_IN="%{$terminfo[smacs]%}"
        PR_SHIFT_OUT="%{$terminfo[rmacs]%}"
        PR_HBAR=${altchar[q]:--}
        #PR_HBAR=" "
        PR_ULCORNER=${altchar[l]:--}
        PR_LLCORNER=${altchar[m]:--}
        PR_LRCORNER=${altchar[j]:--}
        PR_URCORNER=${altchar[k]:--}

        ###
        # Decide if we need to set titlebar text.

        case $TERM in
        xterm*)
        PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}'
        ;;
        screen)
        PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}'
        ;;
        *)
        PR_TITLEBAR=''
        ;;
        esac

        ###
        # Decide whether to set a screen title
        if [[ "$TERM" == "screen" ]]; then
        PR_STITLE=$'%{\ekzsh\e\\%}'
        else
        PR_STITLE=''
        fi

        ###
        # APM detection

        #if which ibam > /dev/null; then
        #PR_APM='$PR_RED${${PR_APM_RESULT[(f)1]}[(w)-2]}%%(${${PR_APM_RESULT[(f)3]}[(w)-1]})$PR_LIGHT_BLUE:'
        #elif which apm > /dev/null; then
        #PR_APM='$PR_RED${PR_APM_RESULT[(w)5,(w)6]/\% /%%}$PR_LIGHT_BLUE:'
        #else
        PR_APM=''
        #fi

        ###
        # Finally, the prompt.

        PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
        $PR_CYAN$PR_SHIFT_IN$PR_ULCORNER$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\
        $PR_GREEN%(!.%SROOT%s.%n)$PR_GREEN@%m:%l\
        $PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_HBAR${(e)PR_FILLBAR}$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\
        $PR_MAGENTA%$PR_PWDLEN<...<%~%<<\
        $PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_URCORNER$PR_SHIFT_OUT\

        $PR_CYAN$PR_SHIFT_IN$PR_LLCORNER$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\
        %(?..$PR_LIGHT_RED%?$PR_BLUE:)\
        ${(e)PR_APM}$PR_YELLOW%D{%H:%M}\
        $PR_LIGHT_BLUE:%(!.$PR_RED.$PR_WHITE)%#$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
        $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
        $PR_NO_COLOUR '

        RPROMPT=' $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_BLUE$PR_HBAR$PR_SHIFT_OUT\
        ($PR_YELLOW%D{%a,%b%d}$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_LRCORNER$PR_SHIFT_OUT$PR_NO_COLOUR'

        PS2='$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
        $PR_BLUE$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT(\
        $PR_LIGHT_GREEN%_$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
        $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR '
        }

        setprompt

     




    精彩Linux视频、嵌入式视频、Android视频、Oracle视频,免费先学!
    查看:尚观Linux培训学员最新就业薪资待遇统计报告!
    查看:UGA-4G Android开发架构师大纲
    查看:UDA-Linux服务器开发架构师大纲
    查看:UEA-嵌入式内核驱动开发者大纲
    查看:UOA-Oracle数据库集群架构大纲
    查看:ULA-Linux系统与集群架构师大纲

    填表获取 Linux、嵌入式、Oracle 技术资料

  • 姓    名:
  • 固    话:
  • 手    机:
  • E-Mail :
  • 所在地:
  •         

北京(总部)

电子地图
电话:(010)62113016/17 68949060
地址:北京海淀区中关村南大街 甲10号 银海大厦南区410-418

上海(Shanghai)

电子地图
电话:(021)64859996 64859889
地址:上海徐汇区钦江路333号漕河泾开发区38号楼申能科技3楼

深圳(Shenzhen)

电子地图
电话:(0755)82995128 82995168
地址:深圳福田区 彩田路 中深花园B2005室

沈阳(Shenyang)

电子地图
电话:(024)31500816 31500817
地址:沈阳和平区三好街54号物产科贸大厦2号楼201室

大连(Dalian)

电子地图
电话:(0411)84336822 84326822
地址:大连沙河口区西安路86号行政大厦(罗斯福广场对面)17楼1705室

成都(Chengdu)

电子地图
电话:(028)66677820 66677828
地址:成都青羊区上西顺城街252号顺吉大厦8楼B4

广州(Guangdong)

电子地图
电话:(020) 88900632 81368992
地址:广州市越秀区人民北路612号中广大厦9层(国际银行中心旁)

南京(Nanjing)

电子地图
电话:(025)83176720 83176710
地址:南京新街口广场中山东路9号天时科技园12层G、H单元

武汉(Wuhan)

电子地图
电话:(027)87596339
地址:武汉市洪山区鲁磨路118号国光大厦A座1201室1203室




2005-2009高新技术企业

LPI授权培训考试中心

CSDN战略伙伴

51Job战略伙伴

Oracle WDP授权培训与考试中心

Intel软件服务培训供应商

Redhat授权培训与考试中心

高新技术企业证书
 

友情链接(联系QQ:87865954):   LPI  RedHat  CSDN  ChinaUnix  ITPub  Eygle.Com  Linux培训  嵌入式培训  Linux联盟  Unix爱好者  51CTO开发 尚观知识库 天极导航  PHP中国  网易教育  天津赶集网  工具软件下载  连锁加盟  天极网南京站  个人简历模板  北京赶集网  畅享网  网页制作  Linux  ZOL服务器  广告联盟  颈椎病的症状  21CN教育  亿芯网  强直性脊柱炎  数码比价网  投资创业  DJ网站  嵌入式技术网  OCM培训  股票入门  大功率LED网   搜电网  杭州写字楼网  时尚论坛  医药营销联盟  Linux技术中心  泉州人才网  大学后  天天健康  RHCE培训  SVN中文技术网  网罗天下  Oracle培训  北京法律咨询  嵌入式资讯网  Fedora中文爱好者  沸点100网   教培英才网  中国二手车城  Linux公社  Oracle教程  深圳本地宝  狂人网  0090网址大全  数码比价网  IT英才网

  • PR
COPYRIGHT © 2000-2009 北京尚观科技有限公司 - 北京市海淀区尚观培训学校 - Linux培训及嵌入式培训专家 ALL RIGHTS RESERVED

咨询热线:400-700-0056    800-810-0056
京ICP备09018548号 | Linux就业信息 | 免责声明 | 隐私声明 |