我正在使用 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 在命令行上使用emacs
或vi
模式。它没有“选择”或“剪贴板”的概念。它使用诸如“kill buffer”和“point”、“mark”、“word”、“line”、“kill”和“yank”等东西。
尝试将 GUI 风格的功能强行塞入其中,充其量也只是令人沮丧,而且无法完全发挥作用。您必须尝试将 和 的功能结合起来stty
(readline
大概Terminal.app
对您而言)。您需要重新映射intr
、susp
、lnext
等功能,以便您仍然可以使用它们的功能。
我强烈建议不要进行如此彻底的修改。它本来就不是为实现你想要的效果而设计的。
在罗马的时候...