
[分享]终极Shell——Zsh
-
- 帖子: 3173
- 注册时间: 2010-01-13 23:26
Re: [分享]终极Shell——Zsh
已经深入Zsh门下,表示用Bash不胜其烦。但是如果系统坏了,有个ash的root shell也是好的。 

Here I am.
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
- fang0319
- 帖子: 628
- 注册时间: 2011-01-05 14:21
-
- 帖子: 37
- 注册时间: 2007-02-19 16:07
Re: [分享]终极Shell——Zsh
果然用起来舒服啊,看来我也要直接替换了
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh
这种情况一般要在前面加个脱字符吧 \ ,因为zsh把 = 解析成独有的语法了,具体解析成什么我也懒得去查了,现在用eshell了……
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh
报歉……这么长时间才回复……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'
不知道这个是哪个配置决定的,
不过一般我不太泡论坛的,有什么问题可以直接发邮件我 [email protected]
可能有时候很长时间也不收邮件,但是最多也就是一二个月而已

先从简单的回答
新安装软件确实要rehash的
包管理软件一向是补全最慢的,本来查询软件包数据库就是比较耗时的操作,而有些内容可能联网才能查询
apt可能比其它的又要慢一点,我用pacman,补全速度还是可以接受的
这个可以自己改改补全字典来优化一下的吧,不过谁也不会没事就整天 apt,所以一般也不太花精力去优化这条
最后一个应该不是配置文件的问题,因为配置文件里面没有 compadd 这个命令
我觉得可能是你安装的 zsh 里面有什么文件损坏之类的……好像不太可能……好吧,我换个靠谱点的
其实有的时候,打开编辑器,在shell脚本里面随便改动个把字符,就可能出现上面的结果,它对格式要求太严格了,而且它报错也很不靠谱,正常情况下难以追踪……真是操蛋的玩意儿
这类问题不太好搞,重装一次先,配置文件也重新覆盖一遍
上次由 kardinal 在 2011-10-22 1:31,总共编辑 2 次。
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh
哥们你太夸张了……adagio 写了:我太感动了,天意弄人啊,这个死老天为什么让我这么久才看到这个帖?
不管有多少楼,我都要在这里留下我“到此一游”的证据,就算立马封了我的ID,我也要说:“鸡屎,我爱死你了!”
用了LZ的配置文件,当我第一次颤抖着、轻轻的按下一个TAB键的时候……,天哪!我、我、我这是怎么了?为什么……,为什么我的眼眶会突然模糊!突然潮湿了?那突然出现的cd ,那突然出现的当前目录列表……,喔不不,还有当我再一次怯生生的按下TAB的时候,那个在目录名之间不断跳动的高亮色块,那不断在命令行补出来的完美路径……,这这这,这太贴心啦!![]()
我已经很久没有这样激动了,最近一次是什么时候?
嗯……好像是3年前,当我第一次穿上我给我老婆买的T恤的时候
那最近一次流泪又是什么时候?
好像是十几二十年前看《哪吒闹海》的时候
鸡屎!我要说这是我这辈子拉过最爽最痛快的一种屎!
LZ!如果那个死老天能给我再来一次的机会的话,我要对你说:“我顶!我狂顶!!我每天都来顶!!!”,如果非要在这前面加上一个条件的话,我要说:“沙发啊!为什么我没能坐上沙发!!老天瞎了眼啊!!!”
![]()
![]()

我现在发现,不光是 tab 可以定制一下,其它的键也是可以的
这些东西是我现在用的 eshell 上的,本来也没打算弄到 zsh 上,不过看你这么给力,我试试能不能弄到 zsh 上
tab 是补全,如果是空行的话,自动填入 cd 和空格 ,如果你再输入一个空格然后 tab 的话,就变成 cd -0,接着你 tab 一次,这个数字加一次
空行 ret 直接 ls ,如果是 ..... 或者是 cd .......的话,它会自动扩展成 cd ../../../../.. 的形式。不过如果返回的上级目录太多的话 ........ 也是挺麻烦的
这个时候可以用空行 C-w ,一次向上一个目录,如果不是空行的话,则一下删一个单词,如果标记了区域的话,则删掉标记的内容
spc 比较简单,空行的话直接填入 switch-to-buffer ,不过在 eshell-cmpl 里面定义了 它的补全方式。如果你多输入空格再补全的话,它会填入 \* ,用于补全临时 buffer。同学们可以研究下它的补全的写法,自己写其它命令的补全,其实是很简单的。
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh
代码: 全选
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
配第二项的表达式可把我配晕了,数了半天才数对……不要再有下次了
像什么空行到上一级目录什么的实在是没有任何技术含量可言,我相信你能搞定

-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh
google 基本不能用,用百度也找不到有用的信息……
tmd ,这是肿么了肿么了,我只是想要把一个功能绑到回车键上而已
……用 vim 或者 emacs 应该可以用插入控制字符的方法直接插入
凑合用吧
上面的表达式还是有点问题,如果只有一个点的时候它总是给替换成 ../ 要不就是 /.. 我也懒得数了
下面这个稍微正常点,两个以上的点都可以正常处理……一个点的话会吞掉……不过一般用一个点的时候不多
tmd ,这是肿么了肿么了,我只是想要把一个功能绑到回车键上而已
……用 vim 或者 emacs 应该可以用插入控制字符的方法直接插入
凑合用吧
上面的表达式还是有点问题,如果只有一个点的时候它总是给替换成 ../ 要不就是 /.. 我也懒得数了
下面这个稍微正常点,两个以上的点都可以正常处理……一个点的话会吞掉……不过一般用一个点的时候不多
代码: 全选
${${BUFFER//\./\.\.\/}%\.\.\/}
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh
zsh 比 bash 用起来要简单…… 似乎因为是 bsd 协议的,和 gpl 不兼容,所以不能默认安装fang0319 写了:bash 还没有学好呢,呵呵
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh

不过还是有问题,我几乎又重新写了一遍……shell script真是操蛋的玩意
https://github.com/ran9er/desert/blob/master/zshrc
代码: 全选
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
上次由 kardinal 在 2011-10-24 15:14,总共编辑 1 次。
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: [分享]终极Shell——Zsh
现在总结一下:
(下划线表示空格,方括号表示需要手动输入,=> 表示 tab 一下,>>表示回车,<<表示执行,希望你没有晕)
(下划线表示空格,方括号表示需要手动输入,=> 表示 tab 一下,>>表示回车,<<表示执行,希望你没有晕)
代码: 全选
>> ls <<
[_] => !?
=> cd_ => (dir)
cd_[_] => cd_~ => (named dir)
cd_[-] => (cd history)
cd_[--] => cd_+[-] => cd_-[-] => cd_+[-] ......
cd_[...] >> cd_../../ <<
cd_[....] >> cd_../../../ <<
cd_[.....] >> cd_../../../../ <<
..................................
-
- 帖子: 45
- 注册时间: 2011-03-23 19:40
Re: [分享]终极Shell——Zsh
一直从第一页翻到末页,看完帮顶并Mark之。
- momova
- 帖子: 3381
- 注册时间: 2007-07-11 21:43
- 系统: archlinux
- 来自: 东江边
Re: [分享]终极Shell——Zsh
这一行出错,提示:# 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
我来了,我看见了,我征服了!
求勾搭,不管饭。
求勾搭,不管饭。
-
- 帖子: 871
- 注册时间: 2006-01-03 20:44
Re: [分享]终极Shell——Zsh
看看吧。这么优秀,相信以后会成为系统默认吧。
- momova
- 帖子: 3381
- 注册时间: 2007-07-11 21:43
- 系统: archlinux
- 来自: 东江边