2011-06-23 39 views
30

Khi tôi mở Vim từ thiết bị đầu cuối, sao chép một số văn bản vào khay nhớ tạm thời của hệ thống và thoát khỏi Vim, khay nhớ tạm của hệ thống bị xóa.Ngăn Vim khỏi xóa khay nhớ tạm khi thoát

Làm cách nào để giữ văn bản được sao chép trong khay nhớ tạm?

+0

Windows, Linux, Mac OS? – TLP

+2

Đọc Câu hỏi thường gặp mà mọi người bỏ phiếu để đóng. "Các công cụ phần mềm thường được sử dụng bởi các lập trình viên" không phải là chủ đề. –

+6

@TLP Phải là Linux. Nếu tôi không nhầm, quy trình là như sau: 1. Bạn sao chép văn bản. 2. Vim nói với X rằng nó có dữ liệu cho clipboard («nói rằng nó có dữ liệu», không phải «đưa dữ liệu vào clipboard»). 3. Bạn thoát khỏi vim. 4. X bây giờ không có ý tưởng nơi ông có thể nhận được dữ liệu cho clipboard: clipboard là «xóa». – ZyX

Trả lời

27

câu trả lời Tổng hợp từ superuser, chỉ cần thêm dòng sau vào bạn .vimrc

autocmd VimLeave * call system("xsel -ib", getreg('+')) 
+2

Nó không làm chính xác những gì TS muốn: nó tiết kiệm giá trị của đăng ký mặc định vào clipboard, không đăng ký clipboard. Bạn nên sử dụng 'getreg ('+')'. – ZyX

+0

Bạn nói đúng, tôi có những thứ khác trong vimrc của tôi đồng bộ hóa hai ... – Matt

+2

Cảm ơn công việc xung quanh Matt và Z yX. Nó đòi hỏi cài đặt 'xsel' mặc dù. Tôi đã sử dụng getreg ('+'). – gimley

1

Hãy sửa tôi nếu tôi sai nhưng từ sự hiểu biết của tôi về ...
1) Vim sử dụng thanh ghi thay vì bảng tạm để lưu trữ dữ liệu đã sao chép/cắt.
2) Các thanh ghi này được lưu giữ khi thoát khỏi tệp trạng thái nhưng không thể truy cập được bên ngoài quy trình đang chạy trừ khi bạn mở tệp theo cách thủ công và kiểm tra nội dung của nó
3) Lưu nội dung vào + đăng ký trong khi Vim chạy cho phép bạn dán vào các ứng dụng khác.
4) Bằng cách tạm ngưng vim (CTRL-Z) thay vì đóng, các thanh ghi này vẫn có thể truy cập được.

Điều đó có hỗ trợ không?

+1

Tôi có thể dán vào cửa sổ/thiết bị đầu cuối khác khi vim vẫn đang chạy. Đang tạm dừng vim với ctrl + z đang xóa văn bản đã sao chép như thoát. – gimley

+0

Một lần nữa, trải nghiệm của tôi rất hạn chế Tôi thường làm việc với vi thông qua một thiết bị đầu cuối PuTTY.Chính sách của những gì tôi có thể học là chương trình sử dụng thanh ghi cục bộ trong khi đang chạy để lưu trữ dữ liệu vào khay nhớ tạm, khi ứng dụng bị chấm dứt thanh ghi sẽ bị xóa và dữ liệu không thể truy cập được Chúc may mắn: D – Grambot

5

Install Parcellite, hoặc glipper cho Gnome và Klipper cho KDE.

Khởi động lại máy tính của bạn hoặc chạy thủ công.

see: https://wiki.ubuntu.com/ClipboardPersistence

+0

Tôi không hiểu tại sao mọi người bỏ phiếu cho câu trả lời này. Nó cho thấy rằng vấn đề không chỉ vì cách Vim cư xử - nó ảnh hưởng đến nhiều ứng dụng. Liên kết hiển thị cách khắc phục sự cố cho tất cả các ứng dụng bị ảnh hưởng. Bạn có cần gì nữa không? –

+0

Một số người, chẳng hạn như bản thân tôi, không thực sự muốn một trình quản lý clipboard đầy đủ vì chúng tôi muốn khay nhớ tạm biến mất ngay khi không còn cần thiết nữa (ví dụ: vì nó chứa dữ liệu nhạy cảm). May mắn thay, Parcellite cung cấp một chế độ daemon trong đó nó sẽ "chỉ" giữ clipboard an toàn. – Kevin

+0

Cảm ơn, Parcellite hoạt động tốt. –

2

Dựa trên Matt's answer, sau đây sử dụng xclip thay vì xsel:

autocmd VimLeave * call system('echo ' . shellescape(getreg('+')) . ' | xclip -selection clipboard') 
0

Tôi chạy vào vấn đề này và một vấn đề liên quan đến nơi tạm dừng vim với ctrl-z cũng sẽ xóa clipboard. Tôi đã mở rộng Matt's solution để sửa chữa cả:

set clipboard=unnamedplus 

if executable("xsel") 

    function! PreserveClipboard() 
    call system("xsel -ib", getreg('+')) 
    endfunction 

    function! PreserveClipboadAndSuspend() 
    call PreserveClipboard() 
    suspend 
    endfunction 

    autocmd VimLeave * call PreserveClipboard() 
    nnoremap <silent> <c-z> :call PreserveClipboadAndSuspend()<cr> 
    vnoremap <silent> <c-z> :<c-u>call PreserveClipboadAndSuspend()<cr> 

endif 

Người bảo vệ if executable("xsel") ở đó để tránh sai sót nếu xsel không được cài đặt. Ánh xạ nnoremap lưu giữ khay nhớ tạm khi tạm dừng từ chế độ bình thường và các xử lý ánh xạ vnoremap tạm dừng từ chế độ trực quan hoặc chọn.

Tôi đã xác nhận điều này hoạt động trên vim 7.4 và 8.0.

Các vấn đề liên quan