Sie*_*geX 84 bash shell binding
示例:我想将F12键绑定到命令,echo "foobar"这样每次我点击F12消息"foobar"都会打印到屏幕上.理想情况下,它可以是任意shell命令,而不仅仅是内置命令.怎么会这样呢?
Pau*_*ce. 149
您可以通过在命令行按Ctrl- v然后按下您感兴趣的键来确定键发出的字符序列.在我的系统中F12,我得到^[[24~.该^[代表Esc.不同类型的终端或终端仿真器可以为相同的密钥发出不同的代码.
在Bash提示符下,您可以输入这样的命令来启用密钥宏,以便您可以尝试使用它.
bind '"\e[24~":"foobar"'
Run Code Online (Sandbox Code Playgroud)
现在,当您按下时F12,您将在命令行上获得"foobar",以便进一步编辑.如果您想要按键立即输入命令,可以添加换行符:
bind '"\e[24~":"pwd\n"'
Run Code Online (Sandbox Code Playgroud)
现在,当您按下时F12,您将显示当前目录而无需按Enter.如果您已在线路上输入了某些内容并使用自动执行的内容,该怎么办?它可能会变得混乱.但是,您可以将该行清除为宏的一部分:
bind '"\e[24~":"\C-k \C-upwd\n"'
Run Code Online (Sandbox Code Playgroud)
空间确保Ctrl- u有一些东西要删除,以防止铃声响起.
一旦你以你想要的方式运行宏,你可以通过将它添加到你的~/.inputrc文件来使它保持持久.不需要bind命令或外部单引号:
"\e[24~":"\C-k \C-upwd\n"
Run Code Online (Sandbox Code Playgroud)
编辑:
您还可以创建一个键绑定,它将执行某些操作而不会干扰当前命令行.
bind -x '"\eW":"who"'
Run Code Online (Sandbox Code Playgroud)
然后,当您输入需要用户名的命令时,您需要知道登录用户的姓名,您可以按Alt- Shift- W并who显示输出并重新发出提示部分命令保持不变,光标位于行中的相同位置.
不幸的是,这对于F12输出两个以上字符的键不起作用.在某些情况下,这可以解决.
命令(who在这种情况下)可以是任何可执行文件 - 程序,脚本或函数.
Bar*_*den 18
您可以在.inputrc(GNU Readline库的配置文件)中定义bash密钥绑定.语法是
<keysym或key name>:宏
例如:
Control-o: "> output"
Run Code Online (Sandbox Code Playgroud)
将按下时创建一个插入">输出"的宏 ControlO
"\e[11~": "echo foobar"
Run Code Online (Sandbox Code Playgroud)
当你按下时,会创建一个插入"echo foobar"的宏F1...我不知道是什么关键F11是在手边.
此解决方案特定于X11环境,与bash无关,但在.Xmodmaps中添加以下内容
% loadkeys
keycode 88 = F12
string F12 = "foobar"
%
Run Code Online (Sandbox Code Playgroud)
在击中F12时将字符串"foobar"发送到终端.