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


192

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

为什么?Linux中此行为背后是否存在任何合理的问题(我确定有)?


25
Shift- Insert也可以使用
bonyiii

33
Ctrl-Shift-V个人更喜欢。
合金

3
您也可以在大多数外壳环境中使用Shift +插入
Fabian 2012年

4
如果您没有插入键怎么办?
本·拉西科特

3
它在Windows的命令提示符下也
不起作用

Answers:


360

在物理终端时代,不存在整个会话范围的剪贴板,只有很少的程序支持内部复制/粘贴(通常以“缓冲区”或“ kill ring”的名义),并使用各种不同的击键。例如,bash shell使用CtrlKCtrlU来“杀死”(剪切)CtrlY到“猛击”(粘贴);这个来自emacs的编辑器

CtrlC在Unix中几乎所有地方都是“ interrupt”键,用于取消当前程序或操作。该CtrlV键通常表示“普通插入” –即,不执行任何相关操作就按字面插入以下字符。例如,一个正常的Esc开关来命令在模式VI编辑器,但是CtrlVEsc将插入ESC字符到文档中。

Mac OS在1983年和1990年在Microsoft Windows 3.x中引入了使用CtrlC复制和CtrlV粘贴整个会话范围的剪贴板的功能(早期Windows版本(1.x和2.x)以及IBM OS / 2)。 ,仅支持复制和粘贴IBM CUA密钥;所有Windows版本仍支持这些快捷方式。)CtrlInsShiftIns

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

简而言之,在编写Xterm和GNOME Terminal时(我猜您使用的是后者),CtrlV 多年来的含义已经完全不同,无法更改。此外,X11中已经存在另一种复制文本的方法-“选择”,因此,显式复制/粘贴操作可能不像在Windows中那样重要。这意味着必须选择不同的键盘快捷方式–例如,大多数现代终端程序(例如GNOME Terminal)都使用CtrlShiftCCtrlShiftV。(如果使用Xterm,则可以使用XTerm * vt100 * translations Xresource 手动添加相同的快捷方式。Rxvt没有此类选项。)

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


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

同时,Windows命令行工具从来没有真正用于 CtrlV任何用途,因此它必须“粘贴”而不打扰任何事情。但是,在类似Unix的终端上执行相同的操作会遇到更多问题。


10
嗯 在Vim中,“猛拉”表示复制而不是粘贴。这似乎也更有意义。您确定这里的术语含义吗?
Konrad Rudolph

11
是,我确定。Bash 从其Emacs等效项继承了默认快捷方式。
grawity 2012年

4
@grawity:您的最后一条评论是误导青少年。Bash提供了两种命令行编辑模式,即vim模式和emacs模式。碰巧,emacs-mode是大多数安装中的默认设置。确实在术语yank(甚至是bash)的使用中引起了歧义。
拉穆(

1
哈!我知道 Vimperator开发人员在切换<C-v>i版本3 时犯了一个错误,但是我不太清楚为什么
2012年

2
@Colin:您仍然错过了剪贴板和X选择之间的区别。有几个选择(PRIMARY,SECONDARY,CLIPBOARD),但是通常只有其中一个被称为“剪贴板”-CLIPBOARD选择,因为这是Ctrl-C复制到的地方,也是Ctrl-V粘贴的地方。主要选择不是剪贴板。
grawity

47

使用CtrlShiftV粘贴。

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


4
那么,为什么Linux不为特殊功能注册CTRL + SHIFT呢?我认为某些用户复制粘贴比特殊功能更典型,对吗?
Yasser Zamani 2012年

22
在存在具有剪切和粘贴功能的图形终端和GUI之前,外壳就已经存在,因此您的论点并不是真的有效。@YasserZamani
slhck

9
Ctrl + Shift + V由终端仿真器执行(假设您使用的是GNOME终端),而不是bash单独执行。如果您不在GUI环境中,或者使用的是其他术语模拟器,则可能无法使用。不要认为此命令是可移植的。
拉穆(

@rahmu哦,对此一无所知。仅使用现有的Ubuntu安装。有通用命令吗?
阿卡什(Akash)

2
可能没有人可以访问剪贴板(主要选择只有Shift + Ins)。甚至剪贴板本身也是X11,不能从tty访问。但是,GNOME终端,Xfce4终端,KDE Konsole支持Ctrl + Shift + V。这涵盖了最流行的GUI环境。
grawity

20

这是带有常用终端的通用复制粘贴设置:

gnome-terminal(在Linux上最流行)
复制CtrlShiftC
粘贴CtrlShiftV
注意:选择复制和middle-click粘贴也可以,但是它使用备用剪贴板。

腻子(在Windows最流行的终端)
复制:(鼠标选择,没有键盘交互)
粘贴Right-click (或更可靠:shiftRight-click
:应用该拿鼠标输入(如vimlinks)可以窃取Right-click- shiftRight-click总是在任何应用工作。

OSX终端
复制AppleC
粘贴AppleV
注意:进行鼠标控制(如vimlinks)的应用程序可能会覆盖选择文本的含义,在这种情况下,复制将无法按您期望的方式工作。在这种情况下,请Control在拖动鼠标进行选择时按住。在终端设置中,默认情况下鼠标与应用程序的交互是禁用的,因此大多数人甚至都不知道此事。


是不是cmd.exe比腻子在Windows上更受欢迎?:-)

@Ben不是SSH终端。
tylerl

1
不,cmd.exe不是SSH终端。这是真的。
2012年

3
@Ben:根本不是终端,只有一个外壳。Windows中的默认终端是csrss的“ Windows控制台”组件。
grawity 2012年

@Ben但右键单击粘贴也可以cmd.exe快速编辑模式下使用(这是唯一的方法,如果您不想打开菜单>编辑>粘贴)。Win10之前的命令提示符中没有快捷方式
phuclv

17

根深蒂固的传统是,Ctrl键与字母一起生成ASCII控制字符,方法是从大写字母的ASCII值中减去64。此计算将Ctrl- 映射A为1,依此类推。举例来说Ctrl- ITabCtrl- J被换行。

Ctrl- 没有类似的传统ShiftCtrl- Shift- V预计不会产生任何特定的字符。

终端仿真器必须通过透明地通过Ctrl约定来支持传统,使其成为通过该终端窗口运行的程序的字符输入。基于终端的程序将控制键映射到命令。例如,Bash使用Ctrl- V作为命令,表示“从字面上接受下一个字符”。这使您可以在命令行中嵌入控制字符。如果终端窃取了控制键供自己使用,则这些命令将不可用。因此,拦截Ctrl- V对于元功能是不可能的(至少在默认配置中)。

然而,终端仿真器可以自由地拦截Ctrl- Shift- V未预计将产生的字符。Ctrl- Shift- V不是一个标准; 这是Gnome Terminal的东西(可能在其他一些终端中)。

在基于X的Unix桌面上,约定是不需要复制任何命令。您只需选择文本。然后,中间按钮将该文本粘贴到其他位置。您会发现它可以在Xterm,Gnome Terminal和Firefox中运行。

Ctrl- V是Microsoft Windows约定,是Macintosh 中Apple- 的模仿V


3
这并不是完全减法-传统上Ctrl 清除了字符的第6位和第7位;因此,在大多数终端中,Ctrl + Shift +字母的作用与Ctrl +字母相同(除非它被终端显式覆盖,如复制/粘贴快捷键一样)。
grawity 2012年

1
因为键实际上是相对于ASCII标准随机排序的,所以程序ROM包含几个查找表,这些表有助于ASCII码的生成。...按下另一个键时按住CONTROL键将导致另一个表查找。[VT100系列技术手册,4.4.9.3,数字]。
卡兹(Kaz)2012年

1
@Linger感谢您的编辑。它可以很好地呈现,但是我无法<kbd>在以后的文章中键入所有这些标签。
卡兹(Kaz),

Ctrl-A1。我该如何尝试?按下时,我的Gnome终端不执行任何操作Ctrl-A
罗伯特

3

对我而言,将粘贴复制到外壳中的最简单方法是:

选择所需的代码,然后通过单击将其粘贴 mouse-middle-key


1
只要您有鼠标中键即可。
jpierson

1
@jpierson并不是我强烈建议这样做,但是您可以编写一个小的脚本,该脚本仅用于xdotool click 2为您模拟第三次单击。然后,在您所处的任何窗口管理器/桌面环境中,您都可以将此脚本绑定到某个键上-例如mod i(用于插入)或您可能具有的任何键绑定(或任何mod可能意味着-这实际上取决于您将其绑定到何处)
dylnmc

2

我们可以使用插入键盘按钮进行复制和粘贴(在旧键盘中可能会丢失)

复制CtrlInsert
粘贴CtrlShiftInsert


1

如果您感到懒惰,也可以使用鼠标中键,并从文本文档,脚本,Web或论坛中选择命令。选择了所需的命令后,只需将其移至终端并单击鼠标的中间按钮即可。我使用这种方法是因为我使用的是小狗linux,它似乎不支持右键单击和粘贴的正常行为。它在文件处理程序窗口中执行,而不是在终端窗口中执行。不知道为什么,但是我很安静,我发现中间按钮方法非常方便!;-)

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.