Zsh的坑s
使用zsh 中遇到的坑s
zsh 配合 oh-my-zsh 很好用,很多插件,很多功能,提升了很多生产力,但是使用过程中,还是遇到了很多坑,大多都是不兼容惹出来的祸。
-
zsh: no matches found: --exclude=*.map
本来想用
alias
将grep
重定义下,增加一些默认参数,然后修改了~/.zshrc
:alias grep="grep --color -n -r --exclude-dir={.git,.svn} --exclude=tags --exclude=*.{map,tmp,bin,elf,o,a,lib,so} 2>/dev/null "
然后试着用了下新的grep,就报错了:
zsh: no matches found: --exclude=*.map
,开始怀疑是参数写的不对,然后改了半天突然想起来,以前执行ls *.c
也会报错,果不其然,去掉了*.{map,tmp,bin,elf,o,a,lib,so}
就好了,但是这个选项是我想要的,google 一下找到原因了,zsh 缺省情况下会自己解释*
,然后直接把*
这个符号给了 ls/grep,所以出错了。解决办法:
在 zsh 的配置文件
~/.zshrc
中添加setopt no_nomatch
, 这样zsh 就直接把*
交给命令解释去了,就不会出错了。 -
zsh: no such file or directory: powerpc-fsl-linux-gnuspe-gcc -m32 -mcpu=8548 -mabi=spe -mspe -mfloat-gprs=double --sysroot=/workspace/program/opt/fsl-networking/QorIQ-SDK-V1.7/sysroots/ppce500v2-fsl-linux-gnuspe
工作中要用 yocto 生成的 gcc 工具链,项目开始时我用的 bash,一点问题都没的,直接
$CC test.c
就可以编译代码了。后来切换到 zsh,只要执行$CC
就会提示上面的错误,很无奈,只能每次要编译的时候手动切换回 bash 编译,然后切换回 zsh 上将可执行文件传到开发板上(zsh 的 ”上一条执行“ 功能太方便了,不用每次重新输入scp 一串命令,或者在历史记录里找半天)解决办法:
还没有。。。。。。
-
进入 git 目录反应很慢(oh-my-zsh 的锅)
话说我的笔记本配置也不差:i7-4750HQ 4核8线程,16G 内存,256G SSD,但是刚开始用 zsh 的时候,很多时候进入linux 源码树目录都要等几十秒,而在树莓派上,这个等待时间就更久了。上网查了下,有人说是oh-my-zsh 的git plugin 造成的。
默认情况下,oh-my-zsh 的 git.zsh 插件会在git 的仓库目录中显示分支信息和当前的状态等,但这也使得在 git 目录中输入命令会出现明显的延时,即使用 git-fast 插件也没什么效果。
解决办法:
把 ~/.oh-my-zsh/lib/git.zsh 里面的
git_prompt_info
函数替换为function git_prompt_info() { ref=$(git symbolic-ref HEAD 2> /dev/null) || return echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX" }
然后,处理 git 目录的速度就恢复正常了,除了偶尔会在开机第一次进入大项目的目录时会卡顿几秒。
ps:现在新版的oh-my-zsh 已经处理了这个问题了,不用在自己手动更新了。
(随时更新)