題 為什麼Ctrl + V不能粘貼在Bash(Linux shell)中?


當我將某些東西複製到剪貼板並按下時 按Ctrl + V 在Bash,沒有任何事情發生;但是,右鍵單擊並選擇  做的工作。

為什麼? Linux中這種行為背後是否有任何合理的問題(我確定有)?


174
2018-05-07 07:44


起源


Shift - Insert 也有效 - bonyiii
我更喜歡 Ctrl-Shift-V, 親身。 - amalloy
你也可以使用 Shift + Insert 在大多數shell環境中。 - Fabian
如果您沒有插入鍵怎麼辦? - TR3B
它在Windows的命令提示符下也不起作用 - phuclv


答案:


在身體的日子裡 終端會話範圍的剪貼板不存在,只有少數程序支持內部複製/粘貼 - 通常以“buffers”或“kill rings”的名稱 - 並使用各種不同的擊鍵。例如, 慶典 shell使用 按Ctrlķ 要么 按Ctrlü “殺”(切), 按Ctrlÿ “yank”(粘貼);這來自 emacs的 編輯

按CtrlC Unix中幾乎無處不在 “中斷”鍵,用於取消當前的程序或操作。該 按CtrlV key通常意味著“逐字插入” - 也就是說,在不執行任何相關操作的情況下插入以下字符。例如,正常 退出 切換到命令模式  編輯,但是 按CtrlV退出 將插入 ESC 字符進入文檔。

指某東西的用途 按CtrlC 複製和 按CtrlV 從Mac OS在1983年和Microsoft Windows 3.x在1990年引入了從會話範圍的剪貼板粘貼。(早期的Windows版本(1.x和2.x)以及IBM OS / 2僅支持 IBM CUA 按鍵 按Ctrl插件 複製和 轉移插件 粘貼;所有Windows版本都支持這些快捷方式。)

當支持剪貼板的GUI最終到達Unix時, 按Ctrl 許多終端程序已經在使用按鍵。另外,X圖形界面有些不同 不同的機制:“選擇”和“削減緩衝區”。即使現在,您也可以在一個程序中選擇文本並使用鼠標中鍵插入,而無需任何顯式複制操作。

簡而言之,在編寫Xterm和GNOME終端時(我猜你使用後者), 按CtrlV  已經有了 多年來完全不同的含義,無法改變。此外,X11中已經存在另一種複製文本的方法 - “選擇” - 因此可能認為顯式複制/粘貼操作不像在Windows中那樣重要。這意味著必須選擇不同的鍵盤快捷鍵 - 例如,大多數現代終端程序(如GNOME終端)都使用 按Ctrl轉移C 和 按Ctrl轉移V。 (如果您使用Xterm,可以使用以下方法手動添加相同的快捷方式 的XTerm * VT100 *翻譯 Xresource。 Rxvt沒有這樣的選擇。)

(大多數X11工具包還支持CUA“複製”和“粘貼”鍵,這些鍵與終端程序不衝突。不幸的是,這些實現相當不一致 - 按Ctrl插件 複製到大多數程序中的“剪貼板”(GTK,Qt4,但被Xaw忽略);然而, 轉移插件從大多數GTK和Qt4程序中的“主要選擇”中粘貼,但是來自Firefox中的“剪貼板”,以及現在過時的Xaw中現在過時的剪切緩衝區。)


總而言之,一些終端或控制台(特別是Windows 10控制台)  支持這些鍵。由於Windows控制台始終具有單獨的“標記/選擇”模式, 按CtrlC 現在也有兩個基於上下文的含義 - 在常規模式下它發送一個中斷,在選擇模式下它複製到剪貼板(就像 輸入 曾經)。

同時,Windows命令行工具從未真正實現過 用過的  按CtrlV 對於任何事情,所以它必然會“粘貼”而不會打擾任何東西。然而,在類Unix終端上做同樣的事情會更成問題。


341
2018-05-07 08:03



嗯。在Vim中,“yank”表示複製而不是粘貼。這似乎也更有意義。你確定這個術語的含義嗎? - Konrad Rudolph
是,我確定。 Bash繼承了默認的快捷方式 他們的Emacs等價物。 - grawity
@grawity:你的最後一條評論是有點誤導的。 Bash提供兩種命令行編輯模式,vim-mode和emacs-mode。只是在大多數安裝中,emacs-mode是默認設置。這確實會增加使用該術語的含糊之處 猛拉,即使是對於bash。 - rahmu
A-HA!一世 知道 Vimperator開發人員在切換時犯了一個錯誤 <C-v> 至 i 在版本3中,但我無法完全按手指 為什麼。 - Izkata
@Colin:你仍然錯過了剪貼板和X選擇之間的區別。有幾個選項(PRIMARY,SECONDARY,CLIPBOARD),但其中只有一個通常被稱為“剪貼板” - CLIPBOARD選擇,因為這是Ctrl-C複製到的地方,也就是Ctrl-V粘貼的地方。主要選擇不是剪貼板。 - grawity


使用 按Ctrl轉移V 粘貼。

按Ctrl 與其他字符通常由shell用於特殊功能。


42
2018-05-07 07:45



那麼為什麼Linux不會為特殊功能註冊CTRL + SHIFT呢?我認為複制粘貼比某些特殊功能更典型,對吧? - Yasser Zamani
在存在具有剪切和粘貼功能的圖形終端和GUI之前,shell已存在,因此您的參數不是真正有效。 @YasserZamani - slhck
Ctrl + Shift + V由終端仿真器執行(假設您正在使用GNOME終端)而不是 bash本身。如果你曾經在GUI環境之外,或者你正在使用另一個術語模擬器,這可能不會起作用。不要認為這個命令是可移植的。 - rahmu
@rahmu哦,不知道那個。僅使用庫存Ubuntu安裝。有通用命令嗎? - Akash
可能沒有一個用於訪問剪貼板(只有Shift + Ins用於主要選擇)。甚至剪貼板本身也是X11的東西,無法從tty訪問。但是,GNOME終端,Xfce4終端,KDE Konsole支持Ctrl + Shift + V;這涵蓋了最流行的GUI環境。 - grawity


以下是常用終端的通用複制粘貼設置:

gnome-terminal(在Linux上最受歡迎)
複製按Ctrl轉移C
按Ctrl轉移V
注意:選擇複製和 中鍵單擊 粘貼也有效,但它使用備用剪貼板。

PuTTY(Windows中最受歡迎的終端)
複製:(用鼠標選擇,沒有鍵盤交互)
右鍵點擊  (或更可靠: 轉移右鍵點擊
注意:採用鼠標輸入的應用程序(如 vim 和 links)可以偷 右鍵點擊  - 轉移右鍵點擊 將始終適用於任何應用程序。

OSX終端
複製蘋果C
蘋果V
注意: 採用鼠標控制的應用程序(如 vim 和 links)可以覆蓋選擇文本的含義,在這種情況下,複製將不會按照您期望的方式工作。在這些情況下,請按住 控制 當你拖動鼠標選擇。默認情況下,終端設置會禁用鼠標與應用程序的交互,因此大多數人甚至都不知道這一點。


17
2018-05-07 21:22



是不是 cmd.exe 在Windows上比PuTTY更受歡迎? :-) - Ben
@Ben不作為SSH終端。 - tylerl
沒有, cmd.exe 不是SSH終端。這是非常正確的。 - Ben
@Ben:它根本不是終端 - 只是一個shell。 Windows中的默認終端是csrss的“Windows控制台”組件。 - grawity
@Ben但右鍵單擊粘貼也可以使用 cmd.exe (並且是唯一的方法,如果您不想打開菜單>編輯>粘貼) 快速編輯模式。在pre-win10命令提示符下沒有快捷方式 - phuclv


這是一個根深蒂固的傳統 按Ctrl key和一個字母生成ASCII控製字符,通過從大寫字母的ASCII值中減去64來找到。這個計算圖 按Ctrl - 一個 到1,依此類推。例如 按Ctrl - 一世 是 標籤 和 按Ctrl - Ĵ 是換行的。

沒有類似的傳統 按Ctrl - 轉移按Ctrl - 轉移 - V 預計不會產生任何特定的字符。

終端模擬器必須通過透明傳遞來支持傳統 按Ctrl 慣例,讓它顯示為通過該終端窗口操作的程序的字符輸入。基於終端的程序將控制鍵映射到命令。例如,Bash使用 按Ctrl - V 作為一個命令,意思是“從字面上理解下一個字符”。這允許您在命令行中嵌入控製字符。如果終端竊取控制密鑰供自己使用,則這些命令變得不可用。如此攔截 按Ctrl - V 對於元函數是不可能的(至少在默認配置中)。

但是,終端仿真器可以自由攔截 按Ctrl - 轉移 - V這不會產生一個角色。 按Ctrl - 轉移 - V 不是標準;這是一個Gnome終端的東西(可能在其他一些終端)。

在基於X的Unix桌面上,慣例是不需要復制命令。你只需選擇文字。中間按鈕將文本粘貼到其他地方。您會發現它適用於Xterm,Gnome Terminal和Firefox等。

按Ctrl - V 是一種Microsoft Windows約定,它是一種模仿 蘋果 - V 從Macintosh。


16
2018-05-07 14:34



它不是 究竟 減法 - 傳統上Ctrl有 清除了第6位和第7位 性格;因此,Ctrl + Shift + letter在大多數終端中與Ctrl + Letter完全相同(除非它被終端明確覆蓋,如復制/粘貼快捷方式)。 - grawity
因為密鑰基本上是相對於ASCII標準隨機排序的,所以程序ROM包括幾個有助於生成ASCII代碼的查找表。 ...當按下另一個鍵時按住CONTROL鍵會導致另一個表查找。 [VT100系列技術手冊,4.4.9.3,數字]。 - Kaz
@Linger感謝編輯。它呈現得很好,但我無法輸入所有這些 <kbd> 將來的帖子中的標籤。 - Kaz
Ctrl-A 是 1。我怎麼試試呢?我按下時,我的Gnome終端什麼也沒做 Ctrl-A。 - robert


我們可以使用插入鍵盤按鈕進行複制和粘貼(在舊鍵盤中可能會丟失)

複製按Ctrl插入
按Ctrl轉移插入 


2
2018-05-08 13:42





對我來說,在shell中復制粘貼的最簡單方法是:

選擇所需的代碼,然後單擊以將其過去 鼠標中鍵


2
2017-08-03 12:57



只要你有一個鼠標中鍵。 - jpierson
@jpierson不是我強烈推薦這個,但你可以編寫一個簡單使用的小腳本 xdotool click 2 為您模擬第三次按鈕單擊。然後,在您所在的任何窗口管理器/桌面環境中,您可以將此腳本綁定到密鑰 - 比如說 mod  i (用於插入)或者你可能有的任何鍵綁定(或者mod可能意味著什麼 - 這實際上取決於你綁定它的位置) - dylnmc


如果您感覺懶惰,也可以使用中鍵和鼠標,並從文本文檔,腳本或Web或論壇中選擇命令。一旦選擇了預期的命令,只需移動到終端並單擊鼠標中鍵。我使用這種方法,因為我使用小狗linux,似乎不支持右鍵單擊和粘貼的正常行為。它在文件處理程序窗口中,而不是在終端窗口中。不知道為什麼,但我很高興我發現了中間按鈕的方法,非常方便! ;-)


1
2018-05-19 16:08