Re: [分享]终极Shell——Zsh
发表于 : 2011-04-14 0:20
已经深入Zsh门下,表示用Bash不胜其烦。但是如果系统坏了,有个ash的root shell也是好的。 

报歉……这么长时间才回复……lgxwqq 写了:同问lz这个问题...新安装一个软件之后确实无法tab补全,只能把命令完整的敲进去....是确定要rehash吗?wen1987 写了:在 /bin 中建议个新文件在 zsh 中不会补全,要重启 zsh 才行,bash 和 fish 中都可以的,郁闷。
还有 apt-get 的不全速度太囧了,有办法改进吗?
还有就是有时候比如说/etc/init.d/po [TAB]这个时候tab,但是/etc/init.d/中并没有po开头的文件,这时候按照lz的配置文件出来的结果就是会自动换成其他文件,但是会报一堆错,就是这样子,有点难看,代码: 全选
all_labels:compadd:39: invalid pattern character `(' _path_files:407: invalid pattern character `(' _path_files:compadd:458: invalid pattern character `(' _path_files:407: invalid pattern character `(' _path_files:compadd:458: invalid pattern character `(' _path_files:409: invalid pattern character `(' _path_files:409: invalid pattern character `('
![]()
叫lz大哥吧![]()
sed -i 's/lz/大哥/g'
不知道这个是哪个配置决定的,
哥们你太夸张了……adagio 写了:我太感动了,天意弄人啊,这个死老天为什么让我这么久才看到这个帖?
不管有多少楼,我都要在这里留下我“到此一游”的证据,就算立马封了我的ID,我也要说:“鸡屎,我爱死你了!”
用了LZ的配置文件,当我第一次颤抖着、轻轻的按下一个TAB键的时候……,天哪!我、我、我这是怎么了?为什么……,为什么我的眼眶会突然模糊!突然潮湿了?那突然出现的cd ,那突然出现的当前目录列表……,喔不不,还有当我再一次怯生生的按下TAB的时候,那个在目录名之间不断跳动的高亮色块,那不断在命令行补出来的完美路径……,这这这,这太贴心啦!![]()
我已经很久没有这样激动了,最近一次是什么时候?
嗯……好像是3年前,当我第一次穿上我给我老婆买的T恤的时候
那最近一次流泪又是什么时候?
好像是十几二十年前看《哪吒闹海》的时候
鸡屎!我要说这是我这辈子拉过最爽最痛快的一种屎!
LZ!如果那个死老天能给我再来一次的机会的话,我要对你说:“我顶!我狂顶!!我每天都来顶!!!”,如果非要在这前面加上一个条件的话,我要说:“沙发啊!为什么我没能坐上沙发!!老天瞎了眼啊!!!”
![]()
![]()
tab 是补全,如果是空行的话,自动填入 cd 和空格 ,如果你再输入一个空格然后 tab 的话,就变成 cd -0,接着你 tab 一次,这个数字加一次
空行 ret 直接 ls ,如果是 ..... 或者是 cd .......的话,它会自动扩展成 cd ../../../../.. 的形式。不过如果返回的上级目录太多的话 ........ 也是挺麻烦的
这个时候可以用空行 C-w ,一次向上一个目录,如果不是空行的话,则一下删一个单词,如果标记了区域的话,则删掉标记的内容
spc 比较简单,空行的话直接填入 switch-to-buffer ,不过在 eshell-cmpl 里面定义了 它的补全方式。如果你多输入空格再补全的话,它会填入 \* ,用于补全临时 buffer。同学们可以研究下它的补全的写法,自己写其它命令的补全,其实是很简单的。
代码: 全选
user-ret(){
case $BUFFER in
"" )
BUFFER="ls"
zle end-of-line
zle accept-line
;;
*\.* )
BUFFER=${${BUFFER//\./\/\.\.}/\/\.\.\//}
zle end-of-line
zle accept-line
;;
* )
zle accept-line
;;
esac
}
zle -N user-ret
bindkey "C-x" user-ret
代码: 全选
${${BUFFER//\./\.\.\/}%\.\.\/}
zsh 比 bash 用起来要简单…… 似乎因为是 bsd 协议的,和 gpl 不兼容,所以不能默认安装fang0319 写了:bash 还没有学好呢,呵呵
代码: 全选
user-ret(){
if [[ $BUFFER = "" ]] ;then
BUFFER="ls"
zle end-of-line
zle accept-line
elif [[ $BUFFER =~ "^cd\ \.\.\.+$" ]] ;then
BUFFER=${${BUFFER//\./\.\.\/}/\.\.\//}
zle end-of-line
zle accept-line
else
zle accept-line
fi
}
zle -N user-ret
bindkey "\r" user-ret
代码: 全选
>> ls <<
[_] => !?
=> cd_ => (dir)
cd_[_] => cd_~ => (named dir)
cd_[-] => (cd history)
cd_[--] => cd_+[-] => cd_-[-] => cd_+[-] ......
cd_[...] >> cd_../../ <<
cd_[....] >> cd_../../../ <<
cd_[.....] >> cd_../../../../ <<
..................................
这一行出错,提示:# cd ~ 补全顺序
#zstyle ':completion:*:-tilde-:*' group-order 'named-directories'
#'path-directories' 'users' 'expand'
#}}}
然后,随便哪个目录cd:command not found: path-directorie
这是啥情况呢>>>cd 127
Usage: file [-bchikLlNnprsvz0] [--apple] [--mime-encoding] [--mime-type]
[-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
file -C [-m magicfiles]
file [--help]
64 cd
64 cd
chpwd:12: command not found: histfile
arch的最新版本安装的时候已经是了xep007 写了:看看吧。这么优秀,相信以后会成为系统默认吧。