bash: vim 自动补全文件名卡住

本来home目录下的.bashrc用一个git维护着. 今天手贱, 在另一个目录下, 以为存在git, 直接git reset, 然后就悲剧了, home下面有些配置直接被干掉了 T.T

然后就出现各种问题了, 发现bash中输入vim + TAB 之后就卡住了, 只能ctrl + C取消掉, 记得之前搞过, google了一通, 终于把它捞出来了.

好像是bash-completion的问题 (REF: link )

1
2
$ pacman -Ss bash-completion
extra/bash-completion 2.1-2 [installed]

运行一下下面这个就搞定了, 目测gvim, emacs也中枪. 可以加在.bashrc里.

1
complete -f -X '*.@(o|so|so.!(conf)|a|rpm|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

root cause

如果按照wiki所说, 这个bug应该早就被fixed了, 我的版本是2.x. 所以, 最大可能是自己干了神马2B的事情 -,-

奇怪的是bash-completion 是有这个规则的.

1
2
oneyoung:/usr/share/bash-completion$grep "vim" bash_completion -n
1890:_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

然后, runtime也是有这个规则的. 肿么会卡住, 这不科学啊

1
2
3
4
5
oneyoung:~$complete | grep vim 
complete -F _filedir_xspec rvim
complete -F _filedir_xspec gvim
complete -F _filedir_xspec vim
complete -F _filedir_xspec rgvim

突然想起来, 很久很久以前装过chs_completion, 在.bashrc的末尾还有这一块:

1
2
3
4
5
6
### chsdir start ###
. $HOME/bin/chs_completion
PATH=$PATH:$HOME/bin
#export CHSDIR="{'n':'l'}"
complete -o filenames -F _filedir_xspec file
### chsdir finish. ###

干掉这一段之后世界就清净了, 可能是chs_completion有bug, 很早之前装的, 好像什么用过, 索性就这样吧.

留言