我想将 Ctrl + J 绑定到BASH中的命令,具体来说我想这样做:
bind '"\C-j":"clear; ls *\n"'
但似乎因为 Ctrl + J 是换行键,转义序列\ n会调用 Ctrl + J 是绑定的,因此按 Ctrl + J 的结果是:
clear; ls *clear; ls *clear; ls *clear; ls *clear; ls * ...
有没有办法绑定 Ctrl + J 并保留\ n的含义?或者是\n
的替代品吗?
答案 0 :(得分:0)
bind -p | grep "not bound" | grep -v "self-insert" | cat >> keycodes-notbound.txt
bind -p | grep -v "not bound" | grep -v "self-insert" | cat >> keycodes-used.txt
会为您提供所有键绑定的列表。
通过这种方式,您可以在.txt文件中看到哪些密钥代码未被绑定/正在使用。
可能是,您必须取消绑定绑定到C-j的绑定函数(accept-line,IIRC)。
此How can I unbind and remap C-w in Bash?中的某些内容可能对您有所帮助。
答案 1 :(得分:0)
我假设您希望\n
立即执行命令。在这种情况下,是的,还有另一种选择:
bind '"\C-j":"clear; ls *\r"'
......应该做你想做的事。 (\r
是回车符,通常绑定到 Ctrl + M ,这通常具有相同的效果。)
答案 2 :(得分:0)
如果要执行shell命令,则必须使用-x
选项:
bind -x '"\C-j":"clear; ls *"'
来自help bind
:
bind: bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq]
[-x keyseq:shell-command] [keyseq:readline-function or readline-command]
Set Readline key bindings and variables.
比较各部分:
[-x keyseq:shell-command]
和
[keyseq:readline-function or readline-command]
如果没有-x
,bind
会控制readline函数或宏,而-x
bind
将绑定到要执行的shell命令。
答案 3 :(得分:-1)
也许你可以使用你的窗口管理器键盘键绑定?