无法在bash中绑定Ctrl-J

时间:2012-02-13 03:02:26

标签: bash bind

我想将 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的替代品吗?

4 个答案:

答案 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]

如果没有-xbind会控制readline函数或宏,而-x bind将绑定到要执行的shell命令。

答案 3 :(得分:-1)

也许你可以使用你的窗口管理器键盘键绑定?