分页: 11 / 12

Re: [分享]终极Shell——Zsh

发表于 : 2011-04-14 0:20
rediscover
已经深入Zsh门下,表示用Bash不胜其烦。但是如果系统坏了,有个ash的root shell也是好的。 :em06

Re: [分享]终极Shell——Zsh

发表于 : 2011-04-14 8:33
fang0319
bash 还没有学好呢,呵呵

Re: [分享]终极Shell——Zsh

发表于 : 2011-09-24 23:07
jemy.zhang
果然用起来舒服啊,看来我也要直接替换了

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-21 21:16
kardinal
maniux 写了:有一個問題:

我用的是gentoo,emerge的時侯,如果想安裝特定版本,bash裏就:

代码: 全选

emerge =eix-0.17.0
但是在zsh裏,這麽輸入,就會:

代码: 全选

zsh: eix-0.17.0 not found
那=不認。

這個怎麽解決?
这种情况一般要在前面加个脱字符吧 \ ,因为zsh把 = 解析成独有的语法了,具体解析成什么我也懒得去查了,现在用eshell了……

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-21 21:31
kardinal
lgxwqq 写了:
wen1987 写了:在 /bin 中建议个新文件在 zsh 中不会补全,要重启 zsh 才行,bash 和 fish 中都可以的,郁闷。

还有 apt-get 的不全速度太囧了,有办法改进吗?
同问lz这个问题...新安装一个软件之后确实无法tab补全,只能把命令完整的敲进去....是确定要rehash吗?

还有就是有时候比如说/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 `('
就是这样子,有点难看, :em06

叫lz大哥吧 :em02
sed -i 's/lz/大哥/g'

不知道这个是哪个配置决定的,
报歉……这么长时间才回复……
不过一般我不太泡论坛的,有什么问题可以直接发邮件我 [email protected]
可能有时候很长时间也不收邮件,但是最多也就是一二个月而已 :em06

先从简单的回答
新安装软件确实要rehash的

包管理软件一向是补全最慢的,本来查询软件包数据库就是比较耗时的操作,而有些内容可能联网才能查询
apt可能比其它的又要慢一点,我用pacman,补全速度还是可以接受的
这个可以自己改改补全字典来优化一下的吧,不过谁也不会没事就整天 apt,所以一般也不太花精力去优化这条

最后一个应该不是配置文件的问题,因为配置文件里面没有 compadd 这个命令
我觉得可能是你安装的 zsh 里面有什么文件损坏之类的……好像不太可能……好吧,我换个靠谱点的
其实有的时候,打开编辑器,在shell脚本里面随便改动个把字符,就可能出现上面的结果,它对格式要求太严格了,而且它报错也很不靠谱,正常情况下难以追踪……真是操蛋的玩意儿
这类问题不太好搞,重装一次先,配置文件也重新覆盖一遍

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-21 21:35
kardinal
adagio 写了:我太感动了,天意弄人啊,这个死老天为什么让我这么久才看到这个帖?
不管有多少楼,我都要在这里留下我“到此一游”的证据,就算立马封了我的ID,我也要说:“鸡屎,我爱死你了!”


用了LZ的配置文件,当我第一次颤抖着、轻轻的按下一个TAB键的时候……,天哪!我、我、我这是怎么了?为什么……,为什么我的眼眶会突然模糊!突然潮湿了?那突然出现的cd ,那突然出现的当前目录列表……,喔不不,还有当我再一次怯生生的按下TAB的时候,那个在目录名之间不断跳动的高亮色块,那不断在命令行补出来的完美路径……,这这这,这太贴心啦! :em21

我已经很久没有这样激动了,最近一次是什么时候?
嗯……好像是3年前,当我第一次穿上我给我老婆买的T恤的时候
那最近一次流泪又是什么时候?
好像是十几二十年前看《哪吒闹海》的时候

鸡屎!我要说这是我这辈子拉过最爽最痛快的一种屎!

LZ!如果那个死老天能给我再来一次的机会的话,我要对你说:“我顶!我狂顶!!我每天都来顶!!!”,如果非要在这前面加上一个条件的话,我要说:“沙发啊!为什么我没能坐上沙发!!老天瞎了眼啊!!!”

:em21 :em21 :em21
哥们你太夸张了…… :em06

我现在发现,不光是 tab 可以定制一下,其它的键也是可以的
这些东西是我现在用的 eshell 上的,本来也没打算弄到 zsh 上,不过看你这么给力,我试试能不能弄到 zsh 上
tab 是补全,如果是空行的话,自动填入 cd 和空格 ,如果你再输入一个空格然后 tab 的话,就变成 cd -0,接着你 tab 一次,这个数字加一次

空行 ret 直接 ls ,如果是 ..... 或者是 cd .......的话,它会自动扩展成 cd ../../../../.. 的形式。不过如果返回的上级目录太多的话 ........ 也是挺麻烦的

这个时候可以用空行 C-w ,一次向上一个目录,如果不是空行的话,则一下删一个单词,如果标记了区域的话,则删掉标记的内容

spc 比较简单,空行的话直接填入 switch-to-buffer ,不过在 eshell-cmpl 里面定义了 它的补全方式。如果你多输入空格再补全的话,它会填入 \* ,用于补全临时 buffer。同学们可以研究下它的补全的写法,自己写其它命令的补全,其实是很简单的。

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-21 22:47
kardinal

代码: 全选

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	
ok,好长时间不用了,也不知道回车键用什么表示的,就用 C-x 临时代替
配第二项的表达式可把我配晕了,数了半天才数对……不要再有下次了
像什么空行到上一级目录什么的实在是没有任何技术含量可言,我相信你能搞定 :em09

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-22 0:13
kardinal
google 基本不能用,用百度也找不到有用的信息……
tmd ,这是肿么了肿么了,我只是想要把一个功能绑到回车键上而已

……用 vim 或者 emacs 应该可以用插入控制字符的方法直接插入
凑合用吧

上面的表达式还是有点问题,如果只有一个点的时候它总是给替换成 ../ 要不就是 /.. 我也懒得数了

下面这个稍微正常点,两个以上的点都可以正常处理……一个点的话会吞掉……不过一般用一个点的时候不多

代码: 全选

${${BUFFER//\./\.\.\/}%\.\.\/}

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-22 1:24
kardinal
fang0319 写了:bash 还没有学好呢,呵呵
zsh 比 bash 用起来要简单…… 似乎因为是 bsd 协议的,和 gpl 不兼容,所以不能默认安装

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-22 20:49
kardinal
:em06 原来是 “\r” ,本来新建了一个文件,在里面改完了 source 就不行,能查的都查遍了,不知道什么原因。今天没事把那段拷到 .zshrc 里面,竟然可以用了……
不过还是有问题,我几乎又重新写了一遍……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

Re: [分享]终极Shell——Zsh

发表于 : 2011-10-22 21:13
kardinal
现在总结一下:
(下划线表示空格,方括号表示需要手动输入,=> 表示 tab 一下,>>表示回车,<<表示执行,希望你没有晕)

代码: 全选

>> ls <<
[_] => !?
=>  cd_ => (dir)
cd_[_] => cd_~ => (named dir)
cd_[-] => (cd history)
cd_[--] => cd_+[-] => cd_-[-] => cd_+[-] ......
cd_[...] >> cd_../../ <<
cd_[....] >> cd_../../../ <<
cd_[.....] >> cd_../../../../ <<
..................................

Re: [分享]终极Shell——Zsh

发表于 : 2012-08-29 22:05
Chanux
一直从第一页翻到末页,看完帮顶并Mark之。

Re: [分享]终极Shell——Zsh

发表于 : 2012-11-01 10:18
momova
# cd ~ 补全顺序
#zstyle ':completion:*:-tilde-:*' group-order 'named-directories'
#'path-directories' 'users' 'expand'
#}}}
这一行出错,提示:
command not found: path-directorie
然后,随便哪个目录cd:
>>>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
这是啥情况呢

Re: [分享]终极Shell——Zsh

发表于 : 2012-11-01 10:35
xep007
看看吧。这么优秀,相信以后会成为系统默认吧。

Re: [分享]终极Shell——Zsh

发表于 : 2012-11-01 21:26
momova
xep007 写了:看看吧。这么优秀,相信以后会成为系统默认吧。
arch的最新版本安装的时候已经是了