標籤:

Linux 中鍵粘貼和Ctrl+V粘貼的區別是什麼?


首先,這個功能不屬於 Linux,而是屬於它(目前)所廣泛使用的顯示服務程序——X Window

X Window 目前被廣泛使用的用於 X Window 客戶端(使用 X Window 的程序)間交換數據的剪貼板有兩個:primary selectionclipboard

Primary selection,通常,內容被選擇時會被放到這裡,按滑鼠中鍵時被獲取並粘貼。

例外一火狐瀏覽器中只有用戶主動選擇的內容才會被放到 primary selection,由網頁代碼導致的選擇不會修改用戶的 primary selection。

例外二Vim / GVim 的「可視」選擇默認並不放到 primary selection。有選項可以設置成這樣。

例外三:一些網站(如 GitHub)用的 Ace 在線編輯器,在用戶「選擇」時並不創建真正的選擇區,它只在用戶按「Ctrl-C」時做一些處理,因此在 Ace 編輯器中選中複製、中鍵粘貼無效。

例外四Wine 不支持 primary selection。

Clipboard,這就是大家熟悉的剪貼板了,圖形界面程序中 Ctrl-C 複製,Ctrl-V 粘貼。終端里因為快捷鍵會衝突,所以這些圖形界面常用的快捷鍵使用的時候都要按住 Shift 鍵。

關於 X Window 剪貼板要注意的地方:以上剪貼板的內容都不是保存在 X 伺服器上的,而是客戶端程序說,「我請求提供這個剪貼板的數據」(X 伺服器通常會允許這樣的請求的)。另外的程序要粘貼時就會通過 X 伺服器向這個程序請求:「請把 XX 剪貼板的數據給我。」所以,X Window 剪貼板上的內容會在擁有它的程序退出後自動被清除。所以一般人會需要用剪貼板管理器來更持久一些地保存剪貼板數據。

關於 X 協議細節可能有些不對,不過大體上是這個樣子的啦。

還有沒什麼程序用到的 secondary selection,以及 Vim 偶爾會用到的 cut buffers(共8個,Vim 和 xterm 會用第一個)。Cut buffers 似乎是由 X 伺服器保存數據的。Vim 在掛起時為了避免請求剪貼板數據的程序長時間等待會把自己的選擇區內容寫到 CUT_BUFFER0。

火狐似乎設置了很短的剪貼板請求超時時間,因此,從遠程程序請求剪貼板數據時,可能因為網路延遲導致火狐沒有及時得到數據而放棄。

----

本文已經發布到本人博客上,地址:X Window 中的剪貼板


Linux主要存在兩種複製和粘貼機制。在各種各樣的 GTK/KDE 程序中我們用 Ctrl + c 、Ctrl + v 複製粘貼或者用右鍵快捷菜單中的複製、粘貼選項。另一種方法是滑鼠高亮選擇要複製的文本,再單擊滑鼠中鍵進行粘貼。一些程序只支持其中一種方法。在shell里,ctrl+v是不能起作用得。可以使用ctrl+shift+v。


推薦閱讀:

UNIX/Linux最偉大的技術是什麼?
Linux上有哪些操作是原子操作?
怎樣評價《無根的根:無名師的 Unix 心傳》?
Linux 上有哪些工具軟體堪稱精美?
有哪些在線 Linux 環境可以 ssh 登錄來玩?

TAG:Linux | Xorg | XWindow |