以前介绍过一些使用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的说明文档

Tags: ,,.
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
Home

RFC: Request For Comments. Orz..

Name(required)
Mail (required),(will not be published)

RFC: Request For Comments. Orz..

Website(recommended)