用户工具

站点工具


系统配置:inputrc:inputrc

http://bbs.chinaunix.net/thread-2247433-1-1.html

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

找到解决方案了,偶给“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


另外补充几点:

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”

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]也可以, 但有一些会被终端捕获)
相应字符输入方法与前面类似


加快你输入命令的速度

一般情况下,我们可以使用上下方向键来查找命令历史列表,以此重复输入命令,但是方向键离主键盘区太远,如果频繁使用的话,会耽误不少时间,而且挪动右手时也不太方便,有没有什么办法把方向键的功能转移到我们经常敲命令的地方呢? 如使用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) 可以把光标位置到末尾之间的字符全部转换为小写

系统配置/inputrc/inputrc.txt · 最后更改: 2023/06/13 05:25 由 127.0.0.1