Chinaunix首页 | 论坛 | 博客

hhktonybutbueatiful.blog.chinaunix.net

目标赋予我们生命的意义和目的。有了目标,我们才会把注意力集中在追求喜悦,而不是在避免痛苦上

  • 博客访问: 3764662
  • 博文数量: 585
  • 博客积分: 13864
  • 博客等级: 上将
  • 技术积分: 10249
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-28 21:25
  • 认证徽章:
个人简介

微博:http://weibo.com/butbueatiful github: https://github.com/hhktony

文章分类

全部博文(585)

文章存档

2015年(1)

2014年(2)

2013年(13)

2012年(413)

2011年(156)

分类: LINUX

2012-05-02 09:11:28

使用默认指令列模式(bash shell)的管理员可能想仔细看看zshell或是zsh。由于它于bash相似,功能又有所加强,zsh在Linux社区获得了关注。

那么zsh有什么不同之处呢?首先,zsh在感觉和功能上都和bash相似。但是一些增强功能让zsh变成一个有趣的选择。

Zsh增强功能:标签完成和拼写错误修正

用过bash标签完成的管理员会发现zsh中的增加功能令人印象深刻。这些功能包括菜单中现有的自动完成命令选项,该菜单可以通过使用箭头键滚动。举例来说,键入以下命令将提供可能命令行标记的列表:

$ ls -

或是

$ rm -

选择要取消的特定程序,程序列表就和取消命令一起可用了。

另一个功能在内置页面程序中,它提供到less命令的快捷方式。要访问它,输入:

$ 这和在命令行上运行more文件名一样。

对笨拙的打字员来说,拼写错误修正功能可用了。例如,如果你输入了一条错误命令,zsh会提示修正:

$ lls

zsh: 要将 'lls'修改为 'ls' [nyae]吗?

要修改它,输入y,命令就更正为ls,接着命令就准备运行了。

其它选项也很实用。输入n拒绝命令修正,输入a中断命令,输入e跳转到命令行进行编辑。这个自动修正功能也能用于命令行标记和文件名,包括修改无效Git分支名称一类的机密事务。

开始使用zsh

为了快速地开始使用zsh,可利用Robby Russell收集的zsh主题、功能和工具,它们被预先打包成“Oh My Zsh”。

$ wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

还可以手工安装这个工具包。如果您在运行另一种 shell,只是想试试 Z shell,那么手工安装可能会更好。请使用 Git 复制这个工具包,然后运行 zsh:

$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
$ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
$ zsh

OMZ! 的默认主题称为 "robbyrussell",由 OMZ! 的管理者命名。您可以将它更改为 ~/.oh-my-zsh/themes
中列出的任何主题。更改主题的方法是,打开 ~/.zshrc 文件,将 ZSH_THEME 变量设置为主题文件的基本名称。例如,要想使用 cloud.zsh-theme,则应该设置 ZSH_THEME=cloud。

您可能会注意到,许多主题的输出状态信息显示在提示符中和提示符的最右边。 例如,Clean 主题在最右边输出当前时间。与硬件屏幕不同,屏幕模拟器的底部通常没有状态条,但是可以使用提示符右边的区域提供动态反馈。还记得可以在提示符中使用 \e[ 编码设置颜色吗?有一组这样的 “转义” 可以将光标移动到窗口中的不同位置。另外,目前的 UNIX 系统并没有使用神秘的符号和数字,而是使用 tput 按名称或用途查找和产生转义。Z shell 使用这种方法提供 RPS1 和 RPS2,它们分别表示初始行和后续行右边的提示符。

除了通过主题控制颜色和提示符之外,OMZ! 还提供了一些插件,这些插件将同类的函数和特性集中在一起。例如,如果您使用 Git 进行源代码控制,可以启用 Git OMZ! 插件,它会在提示符中增加 Git 状态。请打开 ~/.zshrc 文件,然后编辑插件行,在其中包含 git>。现在,当切换到一个 Git 存储库时,提示符会反映该状态。(极限shell改造)

“Oh My Zsh”知识库包含一个主题和功能集合用于现有zsh环境的建立和改变。它也能和卸载脚本一起用来简化移除:

$ uninstall_oh_my_zsh

与zsh shell一起供给的还有一些很好的文档和zsh参考卡。GitHub等网站上的在线资源是.zshrc文件的例子,它相当于zsh版的.bashrc文件,这些资源同时也提供如何定制zsh的示例或是示范加强命令行经验的炫酷技巧。

一些zsh功能可和bash一起用,但在bash上设置、配置更加复杂,这也解释了为什么人们有多页.bashrc文件。如果是Shell的高度使用者,zsh会是吸引你用来取代bash的选择。它的使用快速且简单,而它的一些重要功能也让与shell的互动更有趣。

非常好用的特性  
加强的 alias,在bash里如果你用 alias,新名不用有补全功能了,所以alias功能有限,几次想用它简化软件包管理都放弃了。而zsh里的alias生成的新名同样支持选项补全,就样就可以很放心地 alias ai="sudo apt-get install" 等了,再也不用频繁输入长命令了。    
zsh可以方便里使用快捷键,例如可以实现按两下[esc],在命令之前加加sudo,按[esc][h],显示man,等等。 zsh可以对单个命令的补全进行设置,使常用命令高效。例如 kill [tab] 就可以选择所有进程。   
zsh的命令提示符设置更灵活。    
zsh对目录的操作特别灵活。    
zsh对重定向,管道等提供更多功能。

配置

点击(此处)折叠或打开

  1. #color{{{
  2. autoload colors zsh/terminfo
  3. if [[ "$terminfo[colors]" -ge 8 ]]; then
  4. colors
  5. fi
  6. for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
  7. eval _$color='%{$terminfo[bold]$fg[${(L)color}]%}'
  8. eval $color='%{$fg[${(L)color}]%}'
  9. (( count = $count + 1 ))
  10. done
  11. FINISH="%{$terminfo[sgr0]%}"
  12. #}}}

  13. #命令提示符 {{{
  14. precmd () {
  15. local count_db_wth_char=${#${${(%):-%/}//[[:ascii:]]/}}
  16. local leftsize=${#${(%):-%M%/}}+$count_db_wth_char
  17. local rightsize=${#${(%):-%D %T }}
  18. HBAR=" -"

  19. FILLBAR="\${(l.(($COLUMNS - ($leftsize + $rightsize +2)))..${HBAR}.)}"

  20. RPROMPT=$(echo "%(?..$RED%?$FINISH)")
  21. PROMPT=$(echo "$BLUE%M$GREEN%/ $WHITE${(e)FILLBAR} $MAGENTA%D %T$FINISH
  22. $CYAN%n $_YELLOW>>>$FINISH ")

  23. #在 Emacs终端 中使用 Zsh 的一些设置
  24. if [[ "$TERM" == "dumb" ]]; then
  25. setopt No_zle
  26. PROMPT='%n@%M %/
  27. >>'
  28. alias ls='ls -F'
  29. fi
  30. }
  31. #}}}

  32. #标题栏、任务栏样式{{{
  33. case $TERM in (*xterm*|*rxvt*|(dt|k|E)term)
  34. preexec () { print -Pn "\e]0;%n@%M//%/\ $1\a" }
  35. ;;
  36. esac
  37. #}}}

  38. #关于历史纪录的配置 {{{
  39. #历史纪录条目数量
  40. export HISTSIZE=1000
  41. #注销后保存的历史纪录条目数量
  42. export SAVEHIST=1000
  43. #历史纪录文件
  44. export HISTFILE=~/.zhistory
  45. #以附加的方式写入历史纪录
  46. setopt INC_APPEND_HISTORY
  47. #如果连续输入的命令相同,历史纪录中只保留一个
  48. setopt HIST_IGNORE_DUPS
  49. #为历史纪录中的命令添加时间戳
  50. setopt EXTENDED_HISTORY

  51. #启用 cd 命令的历史纪录,cd -[TAB]进入历史路径
  52. setopt AUTO_PUSHD
  53. #相同的历史路径只保留一个
  54. setopt PUSHD_IGNORE_DUPS

  55. #在命令前添加空格,不将此命令添加到纪录文件中
  56. #setopt HIST_IGNORE_SPACE
  57. #}}}


  58. #杂项 {{{
  59. #允许在交互模式中使用注释 例如:
  60. #cmd #这是注释
  61. setopt INTERACTIVE_COMMENTS

  62. #启用自动 cd,输入目录名回车进入目录
  63. #稍微有点混乱,不如 cd 补全实用
  64. #setopt AUTO_CD

  65. #扩展路径
  66. #/v/c/p/p => /var/cache/pacman/pkg
  67. setopt complete_in_word

  68. #禁用 core dumps
  69. limit coredumpsize 0

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

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

  77. #自动补全功能 {{{
  78. setopt AUTO_LIST
  79. setopt AUTO_MENU
  80. #开启此选项,补全时会直接选中菜单项
  81. #setopt MENU_COMPLETE

  82. autoload -U compinit
  83. compinit

  84. #自动补全缓存
  85. #zstyle ':completion::complete:*' use-cache on
  86. #zstyle ':completion::complete:*' cache-path .zcache
  87. #zstyle ':completion:*:cd:*' ignore-parents parent pwd

  88. #自动补全选项
  89. zstyle ':completion:*' verbose yes
  90. zstyle ':completion:*' menu select
  91. zstyle ':completion:*:*:default' force-list always
  92. zstyle ':completion:*' select-prompt '%SSelect: lines: %L matches: %M [%p]'

  93. zstyle ':completion:*:match:*' original only
  94. zstyle ':completion::prefix-1:*' completer _complete
  95. zstyle ':completion:predict:*' completer _complete
  96. zstyle ':completion:incremental:*' completer _complete _correct
  97. zstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate

  98. #路径补全
  99. zstyle ':completion:*' expand 'yes'
  100. zstyle ':completion:*' squeeze-slashes 'yes'
  101. zstyle ':completion::complete:*' '\\'

  102. #彩色补全菜单
  103. eval $(dircolors -b)
  104. export ZLSCOLORS="${LS_COLORS}"
  105. zmodload zsh/complist
  106. zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
  107. zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'

  108. #修正大小写
  109. zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'
  110. #错误校正
  111. zstyle ':completion:*' completer _complete _match _approximate
  112. zstyle ':completion:*:match:*' original only
  113. zstyle ':completion:*:approximate:*' max-errors 1 numeric

  114. #kill 命令补全
  115. compdef pkill=killall
  116. zstyle ':completion:*:*:kill:*' menu yes select
  117. zstyle ':completion:*:*:*:*:processes' force-list always
  118. zstyle ':completion:*:processes' command 'ps -au$USER'

  119. #补全类型提示分组
  120. zstyle ':completion:*:matches' group 'yes'
  121. zstyle ':completion:*' group-name ''
  122. zstyle ':completion:*:options' description 'yes'
  123. zstyle ':completion:*:options' auto-description '%d'
  124. zstyle ':completion:*:descriptions' format $'\e[01;33m -- %d --\e[0m'
  125. zstyle ':completion:*:messages' format $'\e[01;35m -- %d --\e[0m'
  126. zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m'
  127. zstyle ':completion:*:corrections' format $'\e[01;32m -- %d (errors: %e) --\e[0m'

  128. # cd ~ 补全顺序
  129. zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
  130. #}}}

  131. ##行编辑高亮模式 {{{
  132. # Ctrl+@ 设置标记,标记和光标点之间为 region
  133. zle_highlight=(region:bg=magenta #选中区域
  134. special:bold #特殊字符
  135. isearch:underline)#搜索时使用的关键字
  136. #}}}

  137. ##空行(光标在行首)补全 "cd " {{{
  138. user-complete(){
  139. case $BUFFER in
  140. "" ) # 空行填入 "cd "
  141. BUFFER="cd "
  142. zle end-of-line
  143. zle expand-or-complete
  144. ;;
  145. "cd " ) # TAB + 空格 替换为 "cd ~"
  146. BUFFER="cd ~"
  147. zle end-of-line
  148. zle expand-or-complete
  149. ;;
  150. " " )
  151. BUFFER="!?"
  152. zle end-of-line
  153. ;;
  154. "cd --" ) # "cd --" 替换为 "cd +"
  155. BUFFER="cd +"
  156. zle end-of-line
  157. zle expand-or-complete
  158. ;;
  159. "cd +-" ) # "cd +-" 替换为 "cd -"
  160. BUFFER="cd -"
  161. zle end-of-line
  162. zle expand-or-complete
  163. ;;
  164. * )
  165. zle expand-or-complete
  166. ;;
  167. esac
  168. }
  169. zle -N user-complete
  170. bindkey "\t" user-complete

  171. #显示 path-directories ,避免候选项唯一时直接选中
  172. cdpath="/home"
  173. #}}}

  174. ##在命令前插入 sudo {{{
  175. #定义功能
  176. sudo-command-line() {
  177. [[ -z $BUFFER ]] && zle up-history
  178. [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
  179. zle end-of-line #光标移动到行末
  180. }
  181. zle -N sudo-command-line
  182. #定义快捷键为: [Esc] [Esc]
  183. bindkey "\e\e" sudo-command-line
  184. #}}}

  185. #命令别名 {{{

  186. alias -g ls='ls -F --color=auto'
  187. alias -g ll='ls -l'
  188. alias -g la='ls -a'
  189. alias -g l='ls'
  190. alias -g grep='grep --color=auto'
  191. #alias -g history='history -fi'
  192. alias -g ai='sudo apt-get install'
  193. alias -g aar='sudo apt-get autoremove'
  194. alias -g ap='sudo apt-get purge'
  195. alias -g aud='sudo apt-get update'
  196. alias -g aug='sudo apt-get upgrade'
  197. alias -g adu='sudo apt-get dist-upgrade'

  198. #[Esc][h] man 当前命令时,显示简短说明
  199. alias run-help >&/dev/null && unalias run-help
  200. autoload run-help

  201. #历史命令 top10
  202. #alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
  203. #}}}

  204. #路径别名 {{{
  205. #进入相应的路径时只要 cd ~xxx
  206. hash -d HIST="$HISTDIR"
  207. #}}}

  208. #{{{自定义补全
  209. #补全 ping
  210. zstyle ':completion:*:ping:*' hosts g.cn facebook.com
  211. #补全 ssh scp sftp 等
  212. my_accounts=(
  213. {ly50247,osily,lg50247,root}@{192.168.1.1,192.168.0.1}
  214. osily@localhost
  215. )
  216. zstyle ':completion:*:my-accounts' users-hosts $my_accounts

  217. #def pacman-color completion as pacman
  218. #compdef pacman-color=pacman
  219. #}}}

  220. #{{{ F1 计算器
  221. arith-eval-echo() {
  222. LBUFFER="${LBUFFER}echo \$(( "
  223. RBUFFER=" ))$RBUFFER"
  224. }
  225. zle -N arith-eval-echo
  226. bindkey "^[[11~" arith-eval-echo
  227. #}}}

  228. ####{{{
  229. #function timeconv { date -d @$1 +"%Y-%m-%d %T" }

  230. # }}}

  231. ####{{{
  232. function command_not_found_handler() {
  233. python /usr/lib/command-not-found $1
  234. return 0
  235. }
  236. # }}}

  237. ## END OF FILE #################################################################
  238. # vim:filetype=zsh foldmethod=marker autoindent expandtab shiftwidth=4


  239. export http_proxy=http://192.168.187.145:80
  240. #export JAVA_HOME="/usr/lib/jvm/java-6-sun"
  241. #export JRE_HOME="/usr/lib/jvm/java-6-sun/jre"
  242. export PATH="$PATH:/home/osily/program/bin"
  243. #exportCLASSPATH="$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/home/osily/program/tomcat620/lib:/home/osily/program/tomcat620/lib/servlet-api.jar"
  244. alias upg="sudo apt-get update && sudo apt-get upgrade"
  245. alias qq="nohup google-chrome --no-proxy-server --app=http://web.qq.com >/dev/null 2>/dev/null &"
  246. #alias tomstart="sudo ~/program/tomcat620/bin/startup.sh"
  247. #alias tomshut="sudo ~/program/tomcat620/bin/shutdown.sh"
  248. #alias js2="rhino"
  249. alias gmusic="google-chrome --no-proxy-server --app=http://g.top100.cn/12174704/html/player.html#loaded"
  250. alias apa="dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P"
阅读(36575) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册