2017-08-22 38 views
6

Làm thế nào để tăng thêm vim yank và dán, vì vậy khi tôi yank, vim viết nội dung vào một tệp. Khi tôi dán, nó sử dụng nội dung từ tệp. Tôi muốn có một hệ thống tập tin rộng mà phục vụ như là một bộ đệm toàn cầu.vim sao chép và dán thông qua một tệp được chia sẻ

Bối cảnh: Tôi chạy vim trong các phân tách tmux khác nhau trên máy chủ từ xa (trên ssh). Tôi muốn liên tục sao chép và dán giữa vims trong chia tách tmux. Tôi đã thử một loạt các plugin, nhưng không ai trong số họ làm việc, do đó câu hỏi.

+0

lẽ https://superuser.com/questions/235117/vim-copy-paste-across-terminals hoặc https://stackoverflow.com/questions/11042920/how -to-sao-và-dán-giữa-khác nhau-tmux-panes-chạy-vim-trường hợp có thể giúp – zedfoxus

+0

nơi chính xác bạn đã bị mắc kẹt? Bạn có thể viết một lệnh phạm vi để thực hiện điều đó và ghi đè 'y' và' p'. Nhưng tôi khuyên bạn không nên sử dụng 'y' và' p' vì có rất nhiều xử lý regsiter mà bạn cần phải quan tâm. –

+0

@DoktorOSwaldo Tôi đã cố gắng trả lời https://stackoverflow.com/a/11052783/1082727. Tuy nhiên, sao chép/dán không ổn định. Đôi khi nó sao chép đôi khi nó không. Tôi không biết cách chẩn đoán vấn đề. Có lẽ một số phức tạp về cách vim viết và đọc từ một tập tin. – ashim

Trả lời

0

Tôi tin vim cho phép bạn làm điều đó như thế này:

  1. Yank someting trong tập tin Một
  2. :wv và nhấn Enter
  3. Đến nộp B
  4. :rv và nhấn Enter
  5. Nhấn p để dán nội dung của bảng tạm (hiện tại) toàn cầu của bạn

Điều này sẽ hoạt động trên các phiên vim khác nhau của bạn một cách độc lập cho dù chúng chạy trong các khay tmux khác nhau hay không.

0

Bạn muốn có một cái nhìn tại địa chỉ:

  • map-operatory là một nhà điều hành: một chuyển động cấp phát lệnh
  • readfile()writefile() nguyên nhân các r hoặc w là lệnh, rất vui được sử dụng nhưng không cho các kịch bản
  • visualmode() để có được lựa chọn

Các tập tin chia sẻ được hardcoded /tmp/yank.txt:

function! Yank(type, ...) 
    " Invoked from Visual mode, use gv command. 
    if a:0 
    silent exe "normal! gvy" 
    elseif a:type == 'line' 
    silent exe "normal! '[V']y" 
    else 
    silent exe "normal! `[v`]y" 
    endif 

    call writefile([@@], '/tmp/yank.txt') 
endfunction 


function! Paste(is_back) 
    let @t = join(readfile('/tmp/yank.txt'), '') 
    if a:is_back 
    normal! "tP 
    else 
    normal! "tp 
    endif 
endfunction 


nnoremap y :set opfunc=Yank<CR>[email protected] 
nmap Y Vy 
vnoremap y :call Yank(visualmode(), 1)<CR> 
vnoremap Y :call Yank(visualmode(), 1)<CR> 


nnoremap p :call Paste(0)<CR> 
nnoremap P :call Paste(1)<CR> 
Các vấn đề liên quan