从过去的文档里翻出来,可能有不少地方过时了,欢迎拍砖
zsh 入门
一,配置文件在哪里:
有 5 个文件放起始配置,读取先后顺序: 1, /etc/zshenv 2, ~/.zshenv 3, ~/.zprofile (login shell) 4, ~/.zshrc (交互 shell) 5, ~/.zlogin (login shell)
2 个文件放退出配置: 1, /etc/zlogout 2, ~/.zlogout
login shell 是指那些接受连接请求的 daemon 产生的 shell,比如 ssh,telnet 到远程主机这种
交互 shell 是指有提示符要敲命令的 shell
搞不懂区别,我该放哪?先放.zshrc 里,以后慢慢研究吧
二,提示符:
PS1=$'%{\e[32m%}%*-%n@%m%{\e[0m%}%{\e[1;34m%}%~%%%{\e[0m%}'
哦,有了时间和当前 path,还带颜色了,这不算什么,在提示符里还可以编程
PS1=$'%{\e[32m%}%*%n@%m%{\e[0m%}%{\e[31m%}%(0?..-%?-)%{\e[0m%}%{\e[1;34m%}%~%%%{\e[0m%}'
当上一个命令的 exit status 不为 0 时将其显示,Great! 我们还可以再玩大一点......
PS1=$'%{\e[32m%}%*%n@%m%{\e[0m%}%{\e[31m%}%(0?..-%?-)%{\e[0m%}%{\e[1;34m%}%(5~.%3c.%~)%%%{\e[0m%}'
当目录深度达到 5 层以上后自动截断至剩下的最后三个目录
总之,zsh 的提示符定制是极端强大的,甚至有自己的扩展类型
三,别名:
alias ls='ls -CF --color=auto' alias l='ls -l ' alias s='~/Dropbox/study'
ok,你可以执行 "l s"了,zsh 的 alias,不仅仅只能替换命令,而是一切
四。关于 cd:
setopt autocd
你不需要 cd 了,直接敲目录名字就能进入
cdpath=(~)
你在任何地方都可以直接进入你的 home 目录下的任意目录了
同级跳转,从~/Dropbox/study 跳转到~/Dropbox/working 只需要:cd study working
pushd/popd 都可以有 +/-n 的参数来指定目录堆栈操作深度
五。命令历史:
HISTFILE=~/.histfile HISTSIZE=10000 SAVEHIST=10000 setopt appendhistory
!n 执行历史行号为 n 的命令,忘了 fc -s 吧 !! 执行上一条 !str 执行 str 开头的 !?str 执行包括 str 的 !n:0 !n 不要所有参数执行 .........
! 和 fc 相关的都支持就是了
六。自动补全:
这个功能无比的强大,几乎算是 zsh 的招牌了
# The following lines were added by compinstall zstyle :compinstall filename '/home/lilu/.zshrc'
autoload -Uz compinit compinit # End of lines added by compinstall
首先,tab 可以自动补全几乎所有的东西,文件,命令,后台进程,别名,shell 函数。。。。。 比如输入 kill 然后 tab,会出进程号来选 或者 ssh 然后 tab, hosts 里的东西都会列出来
然后,zsh 允许你自己定义补全,使用 compctl 命令,详情请 man zshcompctl,这个可能性和可选项实在太多了
七。文件名扩展:
setopt extendedglob nomatch
**,对目录递归 除了普通的文件通配符之外 ^x 除了 x 模式的任何匹配 x~y 符合 x 模式不符合 y 模式的匹配
文件名扩展和通配也很复杂,不过不是系统管理员的话,高级的用的不是很多
八。多重管道:
试试 print hello > 1.out > 2.out 是的,zsh 支持多重管道 (另一个招牌),可以将输出 copy 给任意多的进程
还可以 sort <(ls) <(ls /usr)
九。水比较深的部分:
$变量的定制 zshexpn 可编程的命令行编辑器 zshzle 运行时加载模块 zshmodules 还有 shell 脚本编写相关,这个以后有空再写写体会(我现在是有了 ruby, 写 shell 脚本的机会不多了)
十。总结 :
zsh 是目前最好最强大的 shell,几乎没有什么事情是别的 shell 可以而她不能做的. zsh 的一切都是可编程可扩展可定制的,这里提到过的,真的只是粗浅入门,冰山一角. zsh 不容易学,属于难学难精的类型,但是,一旦掌握,就能获得超高的效率和无限的乐趣 (呵呵,我最爱的 emacs 和 ruby 都是这个类型的) 所以,请尽情的探索和享受吧!