2017-08-22 10 views
6

Jak zwiększyć vim szarpać i wklejać, więc kiedy szarpię, vim zapisuje zawartość do pliku. Kiedy wklejam, wykorzystuje treść z pliku. Chcę mieć plik o szerokości całego systemu, który służy jako globalny bufor.vim skopiuj i wklej za pośrednictwem udostępnionego pliku

Kontekst: Uruchomę vima w różnych partycjach tmux na zdalnym serwerze (przez ssh). Chcę bezproblemowo kopiować i wklejać między vims w splitach tmux. Próbowałem wielu wtyczek, ale żaden z nich nie działał, a więc pytanie.

+0

Może https://superuser.com/questions/235117/vim-copy-paste-across-terminals lub https://stackoverflow.com/questions/11042920/how -to-kopiuj-i-wklej między różnymi-tmux-panes-running-vim-instances może pomóc – zedfoxus

+0

, gdzie dokładnie utknąłeś? Powinno być możliwe napisanie polecenia zasięgu, które to robi, i zastąpienie "y" i "p". Ale nie polecałbym używania 'y' i' p', ponieważ jest wiele problemów z obsługą regsitera. –

+0

@DoktorOSwaldo Próbowałem tej odpowiedzi https://stackoverflow.com/a/11052783/1082727. Jednak kopiowanie/wklejanie nie jest stabilne. Czasami kopie czasem nie. Nie wiem, jak zdiagnozować problem. Są prawdopodobnie pewne zawiłości na temat tego, jak vim pisze i czyta z pliku. – ashim

Odpowiedz

0

wierzę vim pozwala zrobić to tak:

  1. Yank cos w pliku
  2. :wv i wciśnij enter
  3. Go złożyć b
  4. :rv i wciśnij enter
  5. Hit p, aby wkleić zawartość swojego (obecnie) globalnego schowka

Powinno to działać w różnych sesjach vim niezależnie od tego, czy działają one w różnych okienek tmux, czy nie.

0

Chcesz rzucić okiem na:

  • map-operator ponieważ y jest operatorem: ruch polecenie oczekiwaniu
  • readfile() i writefile() spowodować r lub w są polecenia, miła w obsłudze, ale nie dla skryptów
  • visualmode() uzyskać wybór

Udostępniony plik został ustalony /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> 
Powiązane problemy