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


21

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

这是我要设置的快捷方式:

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

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

  • Ctrl- Z撤消终端中当前行上的编辑。

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

  • Ctrl- - ShiftZSuper- Z)为背景命令。

  • Ctrl- - ShiftVSuper- V)是文字插入命令(或其他Ctrl- z以前那样)。

如何进行这些更改?

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

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


其中一些“快捷方式”不能在bash中“实现”,而必须放在终端本身(xterm,gnome-terminal,konsole等)上。例如,“选定的文本”,“剪贴板”
akira

Answers:


10

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

5
好。谢谢你的提示。现在,我仍然想实现我的目标。而且我也知道inputrc可以重新映射Ctrl-C。但是我真的不在乎我怎么做,我只想知道如何在终端中重新映射这些快捷方式。
保罗2010年

15
这是“鱼”:stty intr \ ^ k(其中终止命令,以前是Ctrl-C现在变为Ctrl-K,K可以是任何字母键)没有人“给我那条鱼”。我很努力地自己找到它。因此,用谚语讲道使你看起来像个混蛋,IMO。
保罗2010年

如何将其重新映射到Ctrl + Shift + C?
crypdick

8

现在,这几乎已完全解决。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 intr \ ^ k

我确认一切正常。

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

关于将命令放置在哪个脚本中的任何建议?

最后,对于传教士的答复,这些答复是不必要和无益的。


您是否确定要使用的“正确”启动脚本是什么,还是执行此操作的更好方法?我正在同一个问题(您原来的问题)中苦苦挣扎。但是,尽管我可以使'stty intr \ ^ k'绑定ctrl-k,但它并不是解除ctrl-c的绑定,'stty intr undef'或'stty intr = ^-'都没有,ctrl-c仍会发送中断。而且“ stty -a”从不显示我所做的任何更改。
EricS

4

可以使用常规的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


3

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

试图将图形用户界面样式的功能引入其中,将是令人沮丧的,并且无法充分发挥作用。你将不得不设法结合的功能sttyreadline和你的终端(想必Terminal.app你)。您将需要重新映射功能,如intrsusplnext等等,所以你仍然可以使用自己的特点。

我强烈建议您不要进行此类重大修改。它只是设计用来做您想要的。

在罗马的时候...


Dave,对于像OS X一样工作的系统,我是否建议您使用OS X?正如Dennis所暗示的那样,即使您可以使用它,也可以在自己的计算机上以其他方式登录时陷入困境。
msw

我不能担保其他命令,但是在命令窗口中复制和粘贴非常有意义,并且非常方便。我经常使用它们在其他窗口和控制台之间进行复制和粘贴,并且这样做已经很多年了。Shift-Ctrl-C和Shift-Ctrl-V可以通过这种方式为Konsole开箱即用。尽管多年来我每天都这样做,但我还是不可避免地忘记了,并在Konsole中按了Ctrl-c。就个人而言,我准备停止使用“ When in Rome”格言,并重新映射它们以使其像几乎其他所有现有应用程序一样工作。
EricS

1

我运行Ubuntu和改变了快捷方式复制从默认Ctrl+ Shift+ C到更加正常和简单Ctrl+ C。但是,这使我遇到了无法发送中断命令^ C的问题

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

tty intr \^k

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

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

因此,最终(一次)运行以下命令在Ubuntu 18.04中,甚至可能更多)将始终给出预期的行为。

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.