2007年9月29日星期六

Bash下的自动完成

目录下有个文件名乱码,想要用convmv转换之,convmv需要乱码文件名做为参数,直接输入是不行的,我没有乱码输入法。写个脚本没有问题,以前就做过

有没有更简单的办法呢?

于是想到了WindowsXP的命令行窗口,它的自动完成是以一种称作menu-complete的方式进行的,呵呵,幸亏我刚刚翻译过一篇介绍ipython的文章,里面提到了这种方式,否则,都不知如何去搜索(啊,Google不让Google)。显然,让shell自动为我填上文件名是个不错的主意。

以下就是我的设置:

jack@kubuntu:~$ cat ~/.inputrc
set completion-ignore-case on
"\C-[[Z": menu-complete
第1行配置是说自动完成时忽略大小写,比如我输个a,tab一下,给出的结果可以是Abc.txt或者是abc.txt。

关键是第2行,设定menu-complete的快捷键是shift+tab。我是怎么得到这么个疑似乱码的键名的呢?技巧在这里
cat > tmp
然后按shift+tab,得到^[[Z,这里^表示Ctrol键,使用标准的readline语法表示就是\C-。有点混乱吧,怎么冒出个Ctrol来了呢?反正我就是这样试验成功的,可能是我的keymap有问题?其实我一开始是想用ctrl+tab的,可即使这种方法,也得不到正确的key sequence。

上面我说了“tab一下”,其实在Ubntu,默认是要tab两下的,但的确也有发行版只要tab一下就够了,比如Mandriva。关键的配置是这个:
set show-all-if-ambiguous off
其实说白了就是配置一下readline。建议看一下Bash readline 使用技巧和readline的man页。

不知是幸运还是必然,乱码文件第一个就被选中,转码成功,原来是个“新建 文本文件.txt”。

没有评论: