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

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

我正在使用 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 手册页,但没什么帮助。它给了我一些想法,但我需要上述组合的具体示例。谢谢。

答案1

这些不是 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

答案2

这是几乎现在完全解决了。部分解决方案首先引起了我对 MTK358 的注意,https://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) 放入启动脚本中。我不确定哪一个是“正确的”。我希望这个更改是系统范围内的并且是永久的。

关于我应该将命令放在哪个脚本中,有什么建议吗?

最后,至于说教式的回答,它们是不必要的,也是没有帮助的。

答案3

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

其他功能由库控制readline,您可以通过编辑文件来配置~/.inputrc。要使用 Ctrl+Z 来恢复当前行上所做的任何编辑,您需要添加

C-z: revert-line

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

stty susp ^-

取消该键映射。

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

答案4

Bash 在命令行上使用emacsvi模式。它没有“选择”或“剪贴板”的概念。它使用诸如“kill buffer”和“point”、“mark”、“word”、“line”、“kill”和“yank”等东西。

尝试将 GUI 风格的功能强行塞入其中,充其量也只是令人沮丧,而且无法完全发挥作用。您必须尝试将 和 的功能结合起来sttyreadline大概Terminal.app对您而言)。您需要重新映射intrsusplnext等功能,以便您仍然可以使用它们的功能。

我强烈建议不要进行如此彻底的修改。它本来就不是为实现你想要的效果而设计的。

在罗马的时候...

相关内容