更改 bash 快捷键,例如 Ctrl-C?

Pau*_*aul 30 linux bash inputrc

我正在使用 Kubuntu 10.04。我想更改 bash(终端)的一些标准快捷键。

以下是我想设置的快捷方式:

  • Ctrl-C将终端中选定的文本复制到剪贴板。

  • Ctrl-V从剪贴板粘贴到终端。

  • Ctrl-Z撤销对终端当前行的编辑。

  • Ctrl- Shift- C(甚至更好, Super- C)终止命令。

  • Ctrl- Shift- Z(或Super- Z)作为后台命令。

  • Ctrl- Shift- V(或Super- V)成为文字插入命令(或Ctrl-z之前所做的任何事情)。

我如何进行这些更改?

顺便说一句,我喜欢终端在 OS X 上的工作方式。命令键的使用使所有复制/粘贴命令非常一致(与 OS X 中的许多其他东西不同)。

PS我阅读了bash手册页,但没有帮助。它给了我一些想法,但我需要上述组合的具体示例。谢谢。

Ign*_*ams 19

这些不是 bash 的功能,而是终端驱动程序的功能。因此,它们由stty(1).

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
Run Code Online (Sandbox Code Playgroud)

  • 这是“鱼”: stty intr \^k (其中终止命令,以前的 Ctrl-C 现在变成了 Ctrl-K,K 可以是任何 alpha 键)没有人“给了我那条鱼”。我自己努力找到了它。所以用谚语说教会让你看起来像个混蛋,IMO。 (17认同)
  • 好的。谢谢你的线索。现在,我仍然想完成我的目标。而且我也知道 inputrc 可以重新映射 Ctrl-C。但我真的不在乎我是怎么做的,我只想知道如何在终端中重新映射这些快捷方式。 (7认同)
  • 在我看来,这是一种非常简单的方法。 (3认同)

Pau*_*aul 9

现在这几乎完全解决了。部分解决方案首先由 MTK358 在http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/引起我的注意. 他指出(相当明显,让我很尴尬)事实是复制和粘贴快捷键可以通过 konsole 的菜单设置轻松更改。当我看到这个时,大约需要 1 分钟来设置 Ctrl-C 和 Ctrl-V 以使用终端进行复制和粘贴。

解决方案的另一部分应该从 stty 手册页中清楚地看到,但它不是(对我来说)。我最终只是根据各种线索进行实验,例如上面发布的那些。

我决定用哪个非数字键替换 Ctrl-C 作为终止命令。(我用了“k”)。我从来没有找到任何关于如何将 shift 修饰符传达给 stty 的信息,所以我放弃了。有了这个决定,我所要做的就是在命令行上输入以下内容:

stty 内部结构 \^k

我确认一切都按预期工作。

现在我只需要将上面的单个命令 (stty intr \^k) 放在启动脚本中。我不确定哪一个是“合适的”。我希望此更改是系统范围的且永久的。

关于我应该将命令放入哪个脚本的任何建议?

最后,至于说教的答复,它们是不必要且无益的。


小智 6

我运行 Ubuntu 并将 Copy 的快捷方式从默认的Ctrl+ Shift+更改C为更正常和简单的Ctrl+ C。然而,这使我遇到了无法发送中断命令^C的问题。

感谢@Paul 的回答,我发现正在运行命令

tty intr \^k
Run Code Online (Sandbox Code Playgroud)

Ctrl将允许我使用+发送中断命令K。然而,每次我打开终端时都需要运行这个命令,这很麻烦(就像他自己提到的那样)。

经过一些进一步的研究(谷歌搜索),我发现了如何在每次打开终端时执行命令(无论如何在 Ubuntu 中)

因此,最终运行以下命令(一次)(在 Ubuntu 18.04 或更多版本中)每次都会给出预期的行为。

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

最后,值得一提的是,您一定不要使用该K按钮。您可以将上述所有命令中的k字母替换为您选择的任何字母键。


Dav*_*d Z 5

其中一些可以使用普通的 KDE 键盘快捷键机制进行设置。在 Konsole 的“设置”菜单中,单击“配置快捷方式”,您将看到一个对话框,您可以使用该对话框更改 KDE 处理的功能的键绑定。这将允许您将 Ctrl+C 重新映射为复制,将 Ctrl+V 重新映射为粘贴 - 但请记住,一旦您这样做,这些键序列将不再传递到终端,因此您将无法使用例如,Ctrl+C 中断程序。

其他功能由readline库控制,您可以通过编辑文件进行配置~/.inputrc。要让 Ctrl+Z 还原对当前行所做的任何编辑,您需要添加

C-z: revert-line
Run Code Online (Sandbox Code Playgroud)

但是该键序列可能已经被终端捕获,因此您可能必须使用stty它才能将其解除绑定才能工作。首先^Z在输出中查找stty -a(如 Ignacio 的回答所示),然后,例如,如果它出现在 中susp = ^Z,则运行

stty susp ^-
Run Code Online (Sandbox Code Playgroud)

解除绑定该键映射。

您要问的其他更改必须stty按照 Ignacio 的说法进行,因为这些是终端功能,但我不确定具体是如何进行的。问题是我不知道终端是否识别 Shift,或者如果识别,如何将该信息传达给stty.