在以前的一篇博文中曾經提到利用 「+ 暫存器使用系統剪貼簿拷貝粘帖內容。在使用中你或許會碰到這樣乙個問題:用 vim 開啟乙個檔案,複製其中的一段包含中文的內容(用 「+ 暫存器),然後關閉 vim ,然後在另乙個開啟的 vim 中粘帖,此時,中文都變成了亂碼。
如果你使用其他編輯器,比如 emacs,同樣存在這種問題。實際上,程式退出後丟失剪貼簿內容是 linux 系統上大多數軟體普遍存在的乙個「bug」。
在使用者進行「選擇」或「複製」動作的時候,xorg 並沒有拷貝真正的資料,而只是拷貝了乙份原始資料的引用。這樣在當前程式退出後,原始資料被釋放,而 xorg (確切的說是 xorg 的剪貼簿管理器)並沒有原始資料的拷貝,導致使用者「選擇」或「複製」的內容丟失。
可以使用如下命令觀察一下剪貼簿內容的變化:
$xsel那這是 xorg 的 bug 麼? 與其說是 bug,不如說是一種特性。xorg 這樣做,是為了減少不必要的資料拷貝,從而提高效能。-b
freedesktop 的「剪貼簿管理器規格說明(clipboard manager specification)」 中規定,剪貼簿的當前擁有者,比如前面提到的 vim,在退出時應該向剪貼簿管理器傳送請求,請求其接管剪貼簿。剪貼簿管理器在收到此種請求時再根據情況拷貝原始資料,並提供給後來的粘帖操作使用。
實際情況是,很少有軟體遵從以上規定。這也就是大部分軟體都存在丟失剪貼簿內容的問題的原因。不幸的是,我們最常用的 vim 也在此列。
還有個問題是,為什麼 vim 複製的英文內容沒丟失呢?或者說,為什麼 vim 複製的內容沒丟失而只是中文變成了亂碼呢?這個我就只能靠猜測了。因為,vim 內部使用了自己的暫存器,而我們把預設的暫存器對映到系統剪貼簿。當我們再次開啟 vim 時,vim 發現預設的暫存器裡有資料,它就認為系統剪貼簿裡也有相同的資料(其實不是)。那它在粘帖時就使用了錯誤的資料了,而那塊存放原始資料的記憶體剛好沒有被清零,但格式編碼等資訊都已經丟失了。
安裝乙個新的剪貼簿管理器。推薦 parcellite。這是乙個輕量級、但功能豐富的剪貼簿管理器。
debian 系的發行版可以直接安裝:
$ sudo apt當然,linux 下永遠都不會只有乙個選擇。同樣功能的軟體,還有針對 gnome 平台的 glipper、針對 kde 平台的 klipper 以及針對 xfce 平台的 clipman 等。-get
install parcellite
[1]
[2]
[3]
vim 剪下板 小技巧
相信看到這篇文章的人一定都在苦惱怎麼把vim裡邊的內容給複製貼上出來吧?我也遇到了類似的問題,上網找了找相關的內容,整理了一下 如果只是想使用系統貼上板的話直接在輸入模式按shift insert就可以了,下面講一下vim的貼上板的基礎知識,有興趣的可以看看,應該會有所收穫的。vim幫助文件裡與貼上...
要想清楚剪下板內容
只要在command中鍵入 cmd c echo off clip 或作乙個右鍵選單登錄檔檔案執行即可 for win7 將如下內容拷貝到文字檔案裡,儲存為.reg檔案即可,然後執行這個檔案就ok windows registry editor version 5.00 hkey classes r...
Vim 複製貼上剪下板
vim系統剪下板 暫存器 vim有多個剪貼簿,其中就包括了系統剪貼簿。使用命令 reg 可以看到各個剪貼簿的內容。其中 表示當前使用的剪貼簿,0 9 是歷史剪貼簿,如 reg registers dfssdfdsfdsfsd 0 12345678 j 1 dfssdfdsfdsfsd jf jsdf...