如何在inputrc中定义多重热键(如Ctrl+Alt+H)

发表于:2007-07-04来源:作者:点击数: 标签:
如题!偶试过了以下几种方式,但是都不行 ~/.inputrc "\M-H,\C-H":"cdHOME" "\M-H;\C-H":"cdHOME" "\M-H+\C-H":"cdHOME" "\M-Hnbsp;\C-H":"cdHOME" .... Anyideaisgreatlyappreciated!3KUverymuch! [Reference]: http://wssok.51.net/aboutme/bashhotkey.tx

如题!偶试过了以下几种方式,但是都不行

~/.inputrc
"\M-H  ,  \C-H" : "cd $HOME"           
"\M-H  ;  \C-H" : "cd $HOME"
"\M-H  + \C-H" : "cd $HOME"
"\M-H  & \C-H" : "cd $HOME"
....

Any idea is greatly appreciated! 3KU very much !

[Reference]:
http://wssok.51.net/aboutme/bashhotkey.txt

 coolend 回复于:2004-05-30 12:26:24
找到解决方案了,偶给"How To Make A Hotkey On The Linux Console" 的作者发了一封关于这个问题E-mail, 很快他就回信了

Linux的老外们还真是热情啊,感动中....

转到正题吧, 先用cat查看组合热键的ASCII字符:
# cat 
<按下热键,如:Ctrl-Alt-H>
看到了什么? ^[^H 对不对?
按<Ctrl-D>退出
同理可以得知其他组合热键对应的ASCII字符,

有一些组合热键像Ctrl+Alt+D/Q/Z/C/S/M/J/U/I/E好像不能使用,不过没关系,可用的热键有15个左右

然后修改/etc/inputrc 或 ~/.inputrc,向里面添加组合热键的宏定义,偶的如下:

"^[^G":"gaim & &>/dev/null && disown\C-M"
#按Ctrl-Alt-g在当前shell打开gaim, 并脱离该shell独立运行,即:即使你退出了该shell, gaim也不会关闭

字符输入方法: 在vi的插入模式下, ^[是先按Ctrl-V, 然后按ESC,[^G是先按Ctrl-v, 然后按Ctrl-H,其他的与此类似

"^[^H":"vi /etc/httpd/conf/httpd.conf\C-M"
# Ctrl-Alt-h 打开vi编辑器编辑apache的配置文件

"^[^L":"stardict & &>/dev/null && disown\C-M"
# Ctrl-Alt-l ->> 运行星际译王(l->look up查询的意思)

"^[^O":"soffice & &>/dev/null && disown\C-M"
# Ctrl-Alt-o ->> 打开Openoffice

"^[^P":"opera & &>/dev/null && disown\C-M"
# Ctrl-Alt-p ->> 大名鼎鼎的浏览器Opera

"^[^X":"xmms & &>/dev/null && disown\C-M"

其他一些组合键可以根据自己的需要配置,偶就不多说了

测试一下:
su -
<Press Ctrl-Alt-X>
u see what? --- xmms starts up

 platinum 回复于:2004-05-30 13:03:26
恭喜楼主

 coolend 回复于:2004-05-30 20:20:50
sorry, 笔误:
******************************************************
字符输入方法: 在vi的插入模式下, ... [^G是先按Ctrl-v, 然后按Ctrl-H
******************************************************

应该为:
******************************************************
字符输入方法: 在vi的插入模式下, ...^G是先按Ctrl-v, 然后按Ctrl-g
******************************************************

 零二年的夏天 回复于:2004-05-30 21:41:20
楼主严谨的精神值得学习!

 sakulagi 回复于:2004-05-31 08:15:41
鼓励楼主的精神。
部分热键不能用是因为有些热键先被终端给截获了,所以readline没有收到。

 sakulagi 回复于:2004-05-31 08:21:39
另外关于readline的热键定义,bash的manual里说的确实不清楚。除了楼主的方法,也可以这样定义:[code:1:95d17473ac]
"\M-\C-H":"cd ~\C-M"[/code:1:95d17473ac]
重新login或者su -l一下就可以按ctrl_alt_h,就会执行cd ~了。

 coolend 回复于:2004-05-31 09:56:26
呵呵,偶怎么就是没想到用 "\M-\C-H" 定义Alt+Ctrl+H呢?

还是版主博学多才,小弟佩服佩服!

另外补充几点:

1. 还可以定义Alt+Shif+[A-Z] 热键, 偶试了一下,26个热键全部都可以,不会被终端截获

#define Alt+Shift+[A-Z]
"^[A":"<command>\C-M"
"^[B":"<command>\C-M"
...
"^[Y":"<command>\C-M"
"^[Z":"<command>\C-M"

^[A 的输入方法与前面类似,进入Vi插入模式后,先按Ctrl-V, 再同时按Alt+Shif+A

2. 宏定义的末尾\C-M表示输入完定义的命令后回车,也可以更简洁地用一个\n来表示,即:

"^[A":"<command>\C-M"
与下面的是等价的
"^[A":"<command>\n"

3. 发现还可以定义Ctrl-F[1-12], Alt-Shift-F[1-12]
(Alt+F[1-12]也可以, 但有一些会被终端捕获)
相应字符输入方法与前面类似

真是太多了...
要是能写一个容易记忆且方便使用的自定义热键表出来就好了

 coolend 回复于:2004-05-31 20:33:58
加快你输入命令的速度

一般情况下,我们可以使用上下方向键来查找命令历史列表,以此重复输入命令,但是方向键离主键盘区太远,如果频繁使用的话,会耽误不少时间,而且挪动右手时也不太方便,有没有什么办法把方向键的功能转移到我们经常敲命令的地方呢?
如使用Alt+J = Down Arrow 向下查找,Alt+K=Up Arrow 向下查找

通过热键的宏定义可以做到这点:

偶的热键映射如下:
"\eh":"^[OD"       # move left 
Alt-H 向左移一个字符, 相当于Left Arrowgh

"\el":"^[OC"        # move right
Alt-L 向右移一个字符,相当于Right Arrow

"\ej":"^[OB"        # move up
Alt-J 向下移动,相当于Up Arrow

"\ek":"^[OA"       # move down
Alt-K 向上移动,相当于Down Arrow

"\ei":"^?"                                # left earse one character
Alt-I 向左删除一个字符,相当于Backspace

"\eo":delete-char                    # right earse one character
Alt-O 向右删除一个字符,相当于Delete

"\en":backward-kill-word         # left kill one word
Alt-N 向左删除一个单词

"\em":kill-word                        # right kill one word       
Alt-M 向右删除一个单词

"\ea":"^[n^[n^[n^[n^[n^[n^[n"                 # kill to the head
Alt-A 删除当前位置到开头,也就是多Alt-N几次(A--> ahead)

"\ee":"^[m^[m^[m^[m^[m^[m^[m"          # kill to the head
Alt-E 删除当前位置到末尾,也就是多Alt-M几次(E--> end)

"\ep": insert-last-argumem"
Alt-P 插入上一个命令最后一个参数 (P--> Paste)

"\ew": forward-word
系统默认Alt-F (forward)跳到当前单词词尾,如果已在词尾,则跳到下一个单词(右边一个单词)词尾   

发觉F和B键离得太远,不方便,偶分别改作Alt-Q, Alt-W, 但是Alt-F/B照样可以用

这样输入命令的时候几乎可以不用离开主键盘区,而且移动光标,删除字符,删除单词,上下历史命令查找都集中在一块,比以前方便多了。
不过开始可能有些不习惯,就跟使用vi一样,但是多练几次就熟练了。

以上是根据偶个人的喜好来设定的,大家如果有更好的方案的话,可以拿出来共享。

另外,这些热键在控制台可以使用自如,如果在X-windows下的模拟终端,需要把终端的菜单的热键禁用掉,可以在编辑->热键里更改

意外的发现:
Alt-U(Uppercase) 可以把光标位置到末尾之间的字符全部转换为大写
Alt-C(Case) 可以把光标位置到末尾之间的字符全部转换为小写

 coolend 回复于:2004-05-31 20:42:51
sorry, 因为回复的窗口太小(不知道这个问题可否解决?),输入很不方便,遗漏了一句;

"\eq": backward-word 
系统默认Alt-B (backward)跳到当前单词词首,如果已在词首,则跳到上一个单词(左边一个单词)词首

 platinum 回复于:2004-05-31 20:45:16
楼主可以编辑一下第一篇文章,弄一个最终版,否则这么一个一个看,像打PATCH,呵呵

 sakulagi 回复于:2004-05-31 22:50:00
就是,写个总结吧。^_^

 我爱臭豆腐 回复于:2004-06-01 07:19:32
:em02: 好东西值得学习

 coolend 回复于:2004-06-01 09:23:07
好吧,多谢大家的支持,偶就做个总结

 ShinRu 回复于:2004-06-04 23:51:09
不停学习ing

 天外闲云 回复于:2004-06-04 23:59:34
console下的热键绑定呢。好东西。

 haha451 回复于:2004-06-24 10:39:29
[quote:18317f762b="sakulagi"]鼓励楼主的精神。
部分热键不能用是因为有些热键先被终端给截获了,所以readline没有收到。[/quote:18317f762b]

sakulagi大师,各位大虾,如果要处理被终端截获的热键(如CTRL-ALT-DEL),怎么办?因为用CTRL-ALT-DEL登录温都死习惯了,现在习惯性动作闯了祸:服务器重启!

 q1208c 回复于:2004-06-24 14:38:17
谁知道怎么用那个 "windows key"来启动 gnome里的main menu button 呢??

原文转自:http://www.ltesting.net