Linux 很久以前写的 zshell 介绍,分享一下

lilu · 2012年03月21日 · 最后由 AlphaLiu 回复于 2012年03月21日 · 4625 次阅读

从过去的文档里翻出来,可能有不少地方过时了,欢迎拍砖

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 都是这个类型的) 所以, 请尽情的探索和享受吧!

的确是学习了,刚转到 zsh 不久

嗯,挺好的,不过用了 oh-my-zsh 之后都不关心这个 了

kewin ruby-china 建议 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号