2011-06-23 18 views
30

Po otwarciu Vima z terminalu, skopiuj tekst do schowka systemowego i wyjdź z Vima, schowek systemowy zostanie wyczyszczony.Zapobieganie usuwaniu schowka przez Vim przy wyjściu

Jak zachować skopiowany tekst w schowku?

+0

Windows, Linux, Mac OS? – TLP

+2

Przeczytaj najczęściej zadawane pytania osób, które głosują, aby zamknąć. "Narzędzia powszechnie stosowane przez programistów" nie są wyłączone. –

+6

@TLP To musi być Linux. Jeśli się nie mylę, proces jest następujący: 1. Kopiujesz tekst. 2. Vim mówi X, że ma dane do schowka ("mówi, że ma dane", a nie "umieszcza dane w schowku"). 3. Wyjdziesz z vima. 4. X teraz nie ma pojęcia, skąd może pobrać dane do schowka: schowek jest "wyczyszczony". – ZyX

Odpowiedz

27

syntetyzowania odpowiedzi od superuser, wystarczy dodać następujące wpisy do .vimrc

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

Nie robi dokładnie tego, co chce TS: zapisuje wartość domyślnego rejestru do schowka, a nie rejestru schowka. Powinieneś używać 'getreg ('+')'. – ZyX

+0

Masz rację, mam coś innego w moim vimrc, który synchronizuje dwa ... – Matt

+2

Dzięki za pracę wokół Matta i Z yX. Wymaga to jednak instalacji "xsel". Użyłem getreg ("+"). – gimley

1

Proszę mnie poprawić, jeśli się mylę, ale z mojego rozumienia Vima ...
1) Vim używa rejestrów zamiast schowka do przechowywania skopiowanych/wyciętych danych.
2) Rejestry te są zachowane podczas wychodzenia vim w pliku statusu, ale nie są dostępne poza uruchomionego procesu, chyba że ręcznie otworzyć plik i sprawdzić jego zawartość
3) Zapisywanie rzeczy do registre + podczas Vim działa pozwala możesz wkleić do innych aplikacji.
4) Zawieszając vim (CTRL-Z) zamiast go zamykać, rejestry te są nadal dostępne.

Czy to zapewnia pomoc?

+1

Jestem w stanie wkleić do innego okna/terminalu, gdy vim nadal działa. Zawieszenie vima za pomocą ctrl + z powoduje wyczyszczenie skopiowanego tekstu, takiego jak exit. – gimley

+0

Ponownie, moje doświadczenie jest bardzo ograniczone Zwykle pracuję z vi przez terminal PuTTY, czego mogłem się nauczyć, to że program używa lokalnych rejestrów podczas działania w celu przechowywania danych do schowka, po zakończeniu aplikacji rejestry są kasowane, a dane są niedostępne, z wyjątkiem pliki pamięci podręcznej, które zapisuje przy zamknięciu, jeśli powoduje to również stan zawieszenia, nie mogę zasugerować niczego innego. Powodzenia: D – Grambot

5

Install Parcellite lub glipper dla Gnome i klipper dla KDE.

Uruchom ponownie komputer lub uruchom go ręcznie.

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

+0

Nie rozumiem, dlaczego ludzie głosowaliby na tę odpowiedź. Pokazuje to, że problem nie wynika tylko z zachowania Vima - dotyczy wielu aplikacji. Link pokazuje, jak rozwiązać problem dla wszystkich aplikacji, których dotyczy problem. Czego chcieć więcej? –

+0

Niektóre osoby, na przykład ja, nie potrzebują pełnego menedżera schowka, ponieważ chcemy, aby schowek zniknął, gdy tylko nie jest już potrzebny (np. Ponieważ zawiera poufne dane). Na szczęście Parcellite oferuje tryb demona, w którym "tylko" chroni schowek. – Kevin

+0

Dzięki, Parcellite działa dobrze. –

2

podstawie Matt's answer dodaje wykorzystuje xclip zamiast xsel:

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

wpadłem na ten problem i związanego problemu gdzie zawieszania vim z ctrl-z również wyczyścić schowek. Mam rozszerzone Matt's solution naprawić zarówno:

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 

if executable("xsel") straż jest tam, aby uniknąć błędów, jeśli nie jest zainstalowany xsel. Mapowanie nnoremap zachowuje schowek podczas zawieszania w trybie normalnym, a uchwyty mapowania zawieszają się w trybach wizualnym lub wyboru.

Potwierdziłem, że to działa na vim 7.4 i 8.0.

Powiązane problemy