例如:我想把F12键绑定到命令echo "foobar"上,这样每次我按F12键时,消息“foobar”都会被打印到屏幕上。理想情况下,它可以是任何shell命令,而不仅仅是内置命令。如何实现这一点呢?
echo "foobar"
ctzwtxfj1#
在命令行中按Ctrl-v,然后按感兴趣的键,可以确定键发出的字符序列。在我的F12系统中,我得到^[[24~。^[表示Esc。不同类型的终端或终端模拟器可以为同一个键发出不同的代码。在Bash提示符下,可以输入类似下面的命令来启用键宏,以便您可以试用它。
^[[24~
^[
bind '"\e[24~":"foobar"'
现在,当你按下F12键时,你将在命令行上得到"foobar",准备好进一步编辑。如果你想通过按键立即输入命令,你可以添加一个换行符:
bind '"\e[24~":"pwd\n"'
现在,当你按F12键时,你将显示当前目录,而不必按Enter键。如果你已经在该行中键入了一些内容,并且你使用了自动执行的这一行呢?这可能会变得很混乱。但是,你可以将该行作为宏的一部分清除:
bind '"\e[24~":"\C-k \C-upwd\n"'
空格确保Ctrl-u有要删除的内容,以防止铃声响起。一旦你让宏按照你想要的方式工作,你可以通过把它添加到你的~/.inputrc文件中来使它持久化,而不需要bind命令或外面的一组单引号:
~/.inputrc
bind
"\e[24~":"\C-k \C-upwd\n"
您还可以创建一个键绑定,它将执行某些操作,而不会干扰当前命令行。
bind -x '"\eW":"who"'
然后,当您键入一个需要用户名的命令时,例如,您需要知道登录用户的名称,您可以按Alt-Shift-W,who的输出将显示出来,提示符将重新发出,您的部分命令保持不变,光标在行中的相同位置。不幸的是,这对于像F12这样输出两个以上字符的键来说并不适用。在某些情况下,这是可以解决的。命令(在本例中为who)可以是任何可执行文件-程序、脚本或函数。
who
mrphzbgm2#
您可以在~/.inputrc(GNU Readline库的配置文件)中定义bash键绑定。〈密钥符号或密钥名称〉:巨集例如:
Control-o: "> output"
我将创建一个宏,当你按下ControlO键时,它会插入"〉output
"\e[11~": "echo foobar"
将创建一个宏插入"回声foobar"当你按下F1 ...我不知道什么是F11的键符号是现成的。编辑:.inputrc理解\n的换行符转义序列,因此您可以使用
.inputrc
\n
"\e[11~": "echo foobar\n"
它将在命令发出后有效地"按回车"。
lp0sw83n3#
此解决方案特定于X11环境,与bash无关,但将以下内容添加到.Xmodmaps中
% loadkeys keycode 88 = F12 string F12 = "foobar" %
将在按下F12时向终端发送字符串“foobar”。
elcex8rz4#
我想把Ctrl+B绑定到一个命令上,受到上面答案的启发,我尝试使用bind,但无法弄清楚哪一系列神秘的曲线(\e[24~?)可以转换为Ctrl+B。在Mac上,进入终端应用程序的设置,配置文件-〉键盘-〉+,然后按下你想要的键盘快捷键,它就出来了。对我来说,Ctrl+B导致\002,我成功地绑定到命令bind '"\002":"echo command"'此外,如果您希望命令立即执行(而不仅仅是插入到提示符中),则可以在命令末尾添加Enter键,如下所示:bind '"\002":"echo command\015"'
Ctrl+B
\e[24~
+
\002
bind '"\002":"echo command"'
bind '"\002":"echo command\015"'
4条答案
按热度按时间ctzwtxfj1#
在命令行中按Ctrl-v,然后按感兴趣的键,可以确定键发出的字符序列。在我的F12系统中,我得到
^[[24~
。^[
表示Esc。不同类型的终端或终端模拟器可以为同一个键发出不同的代码。在Bash提示符下,可以输入类似下面的命令来启用键宏,以便您可以试用它。
现在,当你按下F12键时,你将在命令行上得到"foobar",准备好进一步编辑。如果你想通过按键立即输入命令,你可以添加一个换行符:
现在,当你按F12键时,你将显示当前目录,而不必按Enter键。如果你已经在该行中键入了一些内容,并且你使用了自动执行的这一行呢?这可能会变得很混乱。但是,你可以将该行作为宏的一部分清除:
空格确保Ctrl-u有要删除的内容,以防止铃声响起。
一旦你让宏按照你想要的方式工作,你可以通过把它添加到你的
~/.inputrc
文件中来使它持久化,而不需要bind
命令或外面的一组单引号:您还可以创建一个键绑定,它将执行某些操作,而不会干扰当前命令行。
然后,当您键入一个需要用户名的命令时,例如,您需要知道登录用户的名称,您可以按Alt-Shift-W,
who
的输出将显示出来,提示符将重新发出,您的部分命令保持不变,光标在行中的相同位置。不幸的是,这对于像F12这样输出两个以上字符的键来说并不适用。在某些情况下,这是可以解决的。
命令(在本例中为
who
)可以是任何可执行文件-程序、脚本或函数。mrphzbgm2#
您可以在
~/.inputrc
(GNU Readline库的配置文件)中定义bash键绑定。〈密钥符号或密钥名称〉:巨集
例如:
我将创建一个宏,当你按下ControlO键时,它会插入"〉output
将创建一个宏插入"回声foobar"当你按下F1 ...我不知道什么是F11的键符号是现成的。
编辑:
.inputrc
理解\n
的换行符转义序列,因此您可以使用它将在命令发出后有效地"按回车"。
lp0sw83n3#
此解决方案特定于X11环境,与bash无关,但将以下内容添加到.Xmodmaps中
将在按下F12时向终端发送字符串“foobar”。
elcex8rz4#
我想把
Ctrl+B
绑定到一个命令上,受到上面答案的启发,我尝试使用bind
,但无法弄清楚哪一系列神秘的曲线(\e[24~
?)可以转换为Ctrl+B
。在Mac上,进入终端应用程序的设置,配置文件-〉键盘-〉
+
,然后按下你想要的键盘快捷键,它就出来了。对我来说,Ctrl+B
导致\002
,我成功地绑定到命令bind '"\002":"echo command"'
此外,如果您希望命令立即执行(而不仅仅是插入到提示符中),则可以在命令末尾添加Enter键,如下所示:
bind '"\002":"echo command\015"'