petronny / pinyin-completion

complete path name based upon the pinyin acronym of Chinese characters
GNU General Public License v3.0
63 stars 13 forks source link

zsh下*也被当成拼音 #8

Closed Kzinux closed 9 years ago

Kzinux commented 9 years ago

正常情况下输入ls * ,然后按tab补全就会自动补全当前目录下的文件名。但是如果执行一次source ~/.zshrc后再输入ls *按tab就会出现拼音补全的界面。 具体见下图: pycp

petronny commented 9 years ago

我这里构造了完全一样的目录结构,但是不能复现你所说的情况。 唯一的区别是.zshrc不一样。 我认为是你的.zshrc中有奇怪的东西。。

Kzinux commented 9 years ago

autoload -U compinit compinit

Zsh pinyin completion

source /usr/share/pinyin-completion/shell/pinyin-comp.zsh

zshrc排查过了,又更彻底地排查了一次,把所有配置都删了只剩下自动补全和拼音补全还是这样,而且我发现只要把拼音补全的配置放在自动补全之前打开之后即使没有运行source ~/.zshrc也跟主楼的图一样的情况。 .zshrc如果这样:

Zsh pinyin completion

source /usr/share/pinyin-completion/shell/pinyin-comp.zsh

autoload -U compinit compinit

情况如下图: lossy-compressed

petronny commented 9 years ago

1.你这个情况为什么会出问题 主要问题是在pinyin-comp之后运行了compinit。 你可以用一个变量锁来解决这个问题。

if [ ! $lock ]
then
  autoload -U compinit
  compinit
  lock=1
fi

2.我原来为什么不会出问题 我用的grml-zsh-config,里面已经做好了类似机制。

# completion system
COMPDUMPFILE=${COMPDUMPFILE:-${ZDOTDIR:-${HOME}}/.zcompdump}
if zrcautoload compinit ; then
    compinit -d ${COMPDUMPFILE} || print 'Notice: no compinit available :('
else
    print 'Notice: no compinit available :('
    function compdef { }
fi
Kzinux commented 9 years ago

是这样,多谢了。 我安装grml-zsh-config后就好了,不过prompt不兼容,重新设置又弄了会。