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

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

评论

Shift-Insert也可以使用

我个人更喜欢Ctrl-Shift-V。

您还可以在大多数Shell环境中使用Shift + Insert。

如果没有插入键怎么办?

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

#1 楼

在物理终端时代,不存在整个会话范围的剪贴板,只有很少的程序支持内部复制/粘贴(通常以“缓冲区”或“ kill ring”的名义),并使用各种不同的击键。例如,bash shell使用CtrlK或CtrlU来“杀死”(剪切),使用CtrlY来“扬”(粘贴);这来自emacs编辑器。Unix中几乎所有地方的CtrlC都是“ interrupt”键,用于取消当前程序或操作。 CtrlV键通常表示“普通插入”,即按字面意义插入以下字符而不执行任何相关操作。例如,普通的Esc在vi编辑器中切换到命令模式,但使用Ctrl + E时,Esc会将ESC字符插入文档中。



使用CtrlC复制Mac OS于1983年和Microsoft Windows 3.x于1990年引入了CtrlV和从会话范围剪贴板粘贴的CtrlV。(早期Windows版本(1.x和2.x)以及IBM OS / 2,仅支持IBM CUA的CtrlIns键用于复制,而ShiftIns键用于粘贴;所有Windows版本均支持这些快捷方式。)

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

简而言之,在编写Xterm和GNOME Terminal时(我猜您使用的是后者),CtrlV多年来已经具有完全不同的含义,无法更改。此外,X11中已经存在一种替代文本的复制方法-“选择”,因此,显式复制/粘贴操作可能不像Windows中那样重要。这意味着必须选择不同的键盘快捷方式–例如,大多数现代终端程序,例如GNOME Terminal,都使用CtrlShiftC和CtrlShiftV。 (如果使用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的终端上执行相同操作会遇到更多问题。

评论


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

–康拉德·鲁道夫(Konrad Rudolph)
2012年5月7日在12:23

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

–user1686
2012年5月7日12:42

@grawity:您的最后一条评论是误导青少年。 Bash提供了两种命令行编辑模式,即vim模式和emacs模式。碰巧,emacs-mode是大多数安装中的默认设置。即使对于bash,这也确实增加了yank一词的使用范围。

– rahmu
2012年5月7日13:46

哈!我知道Vimperator开发人员在版本3中将切换到i时犯了一个错误,但是我不太清楚为什么。

–伊兹卡塔
2012年5月7日18:08



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

–user1686
16年11月5日在18:14

#2 楼

使用CtrlShiftV进行粘贴。

Ctrl和其他字符通常用于外壳程序的特殊功能。

评论


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

–亚瑟·扎马尼(Yasser Zamani)
2012年5月7日在7:58

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

–slhck
2012年5月7日在8:01



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

– rahmu
2012年5月7日13:48



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

– Akash
2012年5月7日15:46

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

–user1686
2012年5月8日,11:20

#3 楼

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

gnome-terminal(在Linux上最流行)复制:CtrlShiftCP粘贴:CtrlShiftV注意:选择复制和单击鼠标中键也可以粘贴,但是

PuTTY(Windows中最流行的终端)复制:(使用鼠标选择,无键盘交互)粘贴:右键单击(或更可靠地:shiftRight-click)注意:应用可以使用鼠标输入(例如vimlinks)进行偷鼠标右键操作-shiftRight-click始终可在任何应用程序中使用。和vim)可能会覆盖选择文本的含义,在这种情况下,复制将无法按您期望的方式工作。在这种情况下,按住Control并拖动鼠标进行选择。默认情况下,在终端设置中,鼠标与应用程序的交互是禁用的,因此大多数人甚至都不知道这一点。

评论


在Windows上,cmd.exe是否比PuTTY更流行? :-)

–本
2012年5月8日17:09

@Ben不是SSH终端。

– tylerl
2012年5月8日17:34

否,cmd.exe不是SSH终端。是的。

–本
2012年5月8日17:37

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

–user1686
2012年5月9日4:34

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

–phuclv
16-11-26在10:24

#4 楼

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

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

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

但是,终端仿真器可以随意拦截Ctrl-Shift-V,这是意料之外的产生一个角色。 Ctrl-Shift-V不是标准功能;这是一个Gnome终端程序(可能在其他终端机中)。

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

Ctrl-V是Microsoft Windows约定,它是Macintosh上对Apple-V的模仿。

评论


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

–user1686
2012年5月8日12:18



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

–卡兹
2012年5月10日下午2:40

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

–卡兹
13年5月29日在18:10

Ctrl-A为1。如何尝试?当我按Ctrl-A时,我的Gnome终端不执行任何操作。

–robert
17年3月3日在8:44



#5 楼

对我来说,复制粘贴到外壳中的最简单方法是:

选择所需的代码,然后单击鼠标中间键
粘贴它

评论


只要您有鼠标中键即可。

– jpierson
15年8月29日在11:35

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

– dylnmc
16-10-8在16:07



是否工作与外壳无关,但与您使用的终端仿真器无关。许多基于X的终端都允许此鼠标移动。

–xpusostomos
20年8月2日,下午3:59

#6 楼

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

复制:Ctrl插入粘贴:Ctrl Shift插入

评论


对于粘贴,通常只是Shift + Insert

–aff
20-09-16在4:29



#7 楼

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