以前介绍过一些使用Bash时候的一些快捷键,使用这些Bash可以大大提高你输入和编辑命令行的速度,提升你的工作效率,当然也可能会把你衬托地更牛B一点。不管怎样,如果你经常使用命令行,熟练使用一些快捷键总是好的。
普通的自动补全
Tab键就是这样一个快捷键,利用它你可以不必输入命令/参数/文件/目录的的完整名称,它可以进行自动不全。比如:
1 2 3 4 5 6 7 8 9 | dutor@dutor-desktop:~$ #alias l="ls -CFh" dutor@dutor-desktop:~$ l Desktop/ Downloads/ Pictures/ Videos/ Documents/ Music/ Templates/ Wdir/ dutor@dutor-desktop:~$ #cd des<Tab> dutor@dutor-desktop:~$ cd Desktop/ /home/dutor/Desktop dutor@dutor-desktop:~ #cd d<Tab><Tab> Desktop/ Documents/ Downloads/ |
当可选项唯一时,按下TAB键就会立即被不全。而如果有多个候选项时,按下TAB两次,所有候选项都会被列出。如上例,D开头的有三个目录,Desktop, Documents和Downloads,若想进入Destop目录,只需键入De
经常使用Vim的朋友(亲们?)可能会发现,Vim的命令模式(Last Line Mode)中使用帮助文档或者打开另外一个文件时,也有Tab自动不全的功能。不仅如此,当有多个候选项存在时,按下Tab或者Ctrl+n会逐次遍历这些候选项,直到找到你想要的选项。那么,Bash里面可以实现类似的功能吗?
当然,因为默认情况下,Vim的命令行和Bash的命令行使用的是“同一个”行编辑组件:Readline。细心的朋友可能发现,在Vim的命令行中,Ctrl+a、Ctrl+e等命令也是可以使用的。
配置inputrc
我们这里需要的是一种叫做菜单式补全(menu-complete)的功能。通常,默认情况下,这个选项是没有被配置的。为了配置这项功能,并为之进行快捷键绑定,我们需要修改inputrc配置文件,这个文件中保存了Readline的一些键绑定和其它诸如编辑模式的配置选项。像许多其它配置文件一样,inputrc有系统级的配置选项/etc/inputrc和用户级的点文件~/.inputrc。建议建立自己的点文件,而不是直接编辑系统级文件,当然如果整个系统只是你一个人在用的话,你也可以在/etc/inputrc上面直接编辑。但使用点文件的另一个好处告诉你,它是属于你自己的,即使在另外一个不同的发行版上,点文件通常也是可以直接使用的。这可以减轻你在不同系统上的不适。
好了,打开或者建立你的.inputrc,写下,下面两行:
1 2 | "\C-j": menu-complete "\C-k": menu-complete-backward |
保存,然后重启Bash或者执行下面命令,使inputrc的配置立即生效:
1 | bind -f ~/.inputrc |
此时,通过Ctrl+j就可以把“下一个”候选项加入命令行,或者通过Ctrl+k把“上一个”候选项加入命令行。加入这项功能的另外一个好处就是,如果你要处理中文的文件或目录时,不比切换输入法(我的rxvt甚至无法使用中文输入法),选择即可。
了解更多Readline
在inputrc中还可以定义很多其它的特性,若想详细了解这些特性即配置方法,请参考这份关于GNU Readline Library的说明文档。
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
精彩的博客!
accepted.
注意:
如果存在 ~/.inputrc
libreadline就会忽略 /etc/inputrc 的配置
在我的机器上,表现就是 home/end 不像之前那样正常工作了,在vim里面上下左右也有问题。
我的bash:menu-complete-backward 不起作用啊
在Ubuntu上面使用bash是可以的。但在Redhat上面我试过,backward确实不行
我就是ubuntu上试的…
你能不能把shopt执行结果贴出来看看?
发现在bash4.1可以。。。
但是这个哥们:
http://www.tikirobot.net/wp/2006/03/29/reverse-menu-complete-in-bash/
说的: shift+tab反向补全不知为什么不可以