为什么 Ctrl + V 不能在 Bash(Linux shell)中粘贴?

为什么 Ctrl + V 不能在 Bash(Linux shell)中粘贴?

当我将某些内容复制到剪贴板并在 Bash 中按Ctrl+时V,什么也没有发生;但是,右键单击并选择粘贴完成工作。

为什么?Linux 中这种行为背后是否存在合理的问题(我相信存在)?

答案1

在身体终端,会话范围的剪贴板不存在,只有少数程序支持内部复制/粘贴(通常以“缓冲区”或“kill rings”的名称命名)并使用各种不同的按键。例如,狂欢shell 使用CtrlKCtrlU“kill”(剪切)、CtrlY“yank”(粘贴);这来自于emacs编辑

CtrlCUnix 中几乎到处都是“中断”键,用于取消当前程序或操作。该CtrlV键通常表示“逐字插入”——即逐字插入以下字符而不执行任何相关操作。例如,普通键Esc切换到命令模式编辑器,但是CtrlVEsc会将ESC字符插入到文档中。

CtrlCMac OS 于 1983 年引入了从会话范围剪贴板复制和粘贴的功能CtrlV,Microsoft Windows 3.x 于 1990 年也引入了此功能。(早期的 Windows 版本(1.x 和 2.x)以及 IBM OS/2 仅支持IBM 统一用户指南CtrlIns进行复制和ShiftIns粘贴;所有 Windows 版本都支持这些快捷方式。

当支持剪贴板的 GUI 最终进入 Unix 时,Ctrl许多终端程序已经使用了按键操作。此外,X 图形界面在某种程度上不同的机制:“选择”和“剪切缓冲区”。即使现在,您也可以在一个程序中选择文本,然后使用鼠标中键将其插入,而无需任何明确的复制操作。

简而言之,当 Xterm 和 GNOME Terminal 被编写出来时(我猜你使用的是后者),CtrlV 已经有了多年来,它的含义完全不同,无法改变。此外,X11 中已经存在另一种复制文本的方法——“选择”,因此明确的复制/粘贴操作可能被认为不像在 Windows 中那么重要。这意味着必须选择不同的键盘快捷键——例如,大多数现代终端程序(如 GNOME Terminal)使用CtrlShiftCCtrlShiftV。(如果您使用 Xterm,可以使用XTerm*vt100*翻译Xresource。Rxvt 没有这样的选项。)

(大多数 X11 工具包还支持 CUA 的“复制”和“粘贴”键,这些键与终端程序不冲突。不幸的是,实现方式相当不一致 -CtrlIns在大多数程序(GTK、Qt4,但被 Xaw 忽略)中复制到“剪贴板”;但是,ShiftIns在大多数 GTK 和 Qt4 程序中从“主要选择”粘贴,但在 Firefox 中从“剪贴板”粘贴,在现已过时的 Xaw 中从现已过时的剪切缓冲区粘贴。)


尽管如此,一些终端或控制台(特别是 Windows 10 控制台)支持这些键。由于 Windows 控制台始终具有单独的“标记/选择”模式,因此CtrlC现在根据上下文也具有两种含义 - 在常规模式下,它会发送中断,在选择模式下,它会复制到剪贴板(就像Enter以前一样)。

与此同时,Windows 命令行工具从未真正用过的 CtrlV对于任何东西,因此它必然会“粘贴”而不会干扰任何东西。然而,在类 Unix 终端上执行相同操作会更加麻烦。

答案2

用于CtrlShiftV粘贴。

Ctrl与其他字符一起通常被 shell 用于特殊功能。

答案3

以下是使用流行终端的通用复制粘贴设置:

gnome-terminal(在 Linux 上最流行)
复制CtrlShiftC
粘贴CtrlShiftV
笔记:选择复制和middle-click粘贴也有效,但它使用备用剪贴板。

PuTTY(Windows 中最流行的终端)
复制:(用鼠标选择,无需键盘交互)
粘贴: Right-click (或者更可靠地shiftRight-click:)
笔记:接受鼠标输入的应用程序(如vimlinks)可以窃取Right-click——shiftRight-click将在任何应用程序中始终起作用。

OSX 终端
复制AppleC
粘贴AppleV
笔记:需要鼠标控制的应用程序(如vimlinks)可能会覆盖选择文本的含义,在这种情况下,复制将无法按预期工作。在这些情况下,按住Control并拖动鼠标进行选择。终端设置中默认禁用鼠标与应用程序的交互,因此大多数人甚至都不知道这一点。

答案4

对我来说,在 shell 中复制粘贴的最简单方法是:

选择所需的代码,然后单击mouse-middle-key

相关内容