Yas*_*ani 207 linux clipboard keyboard-shortcuts bash copy-paste
当我将某些内容复制到剪贴板并在 Bash 中按Ctrl+V时,没有任何反应;但是,右键单击并选择粘贴就可以了。
为什么?在 Linux 中,这种行为背后是否有任何合理的问题(我确定有)?
use*_*686 386
在物理终端时代,不存在会话范围的剪贴板,只有少数程序支持内部复制/粘贴——通常以“缓冲区”或“终止环”的名义——并使用各种不同的击键。例如,bash shell 使用CtrlKorCtrlU来“kill”(剪切)、CtrlY“yank”(粘贴);这个来自该emacs的编辑器。
CtrlC在 Unix 中几乎到处都是“中断”键,用来取消当前的程序或操作。的CtrlV关键往往意味着“逐字插入” -即插入下面的文字真的没有执行任何相关动作。例如,Esc在vi编辑器中正常切换到命令模式,但是CtrlV,Esc会将ESC字符插入到文档中。
1983 年 Mac OS 和 1990 年 Microsoft Windows 3.x 引入了从会话范围剪贴板CtrlC复制和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 终端,使用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 终端上做同样的事情会更成问题。
Aka*_*ash 50
使用CtrlShiftV粘贴。
Ctrl 与其他字符通常由外壳用于特殊功能。
tyl*_*erl 23
这是您使用流行终端的通用复制粘贴设置:
gnome-terminal(Linux 上最流行)
Copy : CtrlShiftC
Paste :CtrlShiftV
注意:Select-to-copy 和middle-clickto paste 也有效,但它使用备用剪贴板。
腻子(在Windows最流行的终端)
复制:(鼠标选择,没有键盘交互)
粘贴:Right-click (或更可靠:shiftRight-click)
注:应用该拿鼠标输入(如vim和links)可以窃取Right-click-shiftRight-click永远在任何应用程序的工作。
OSX 终端
复制:AppleC
粘贴:AppleV
注意:使用鼠标控制(如vim和links)的应用程序可能会覆盖选择文本的含义,在这种情况下,复制将无法按您预期的方式工作。在这些情况下,按住Control鼠标拖动鼠标进行选择。终端设置中默认禁用鼠标与应用程序的交互,因此大多数人甚至不知道这一点。
Kaz*_*Kaz 18
这是一个根深蒂固的传统,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 终端和 Firefox 中都可以使用。
Ctrl-V是 Microsoft Windows 的约定,它是对 Macintosh 中的Apple-的模仿V。