Czy istnieje sposób skopiowania bloku tekstu do schowka systemowego, aby móc go wkleić w innym programie?

Komentarze

  • To pytanie zostało już zadane i udzielono na nie odpowiedzi. Możesz tam znaleźć więcej różnych informacji.
  • Używałem tej wtyczki na macvim christoomey / vim-system-copy i naprawdę ją kocham. Działa bardzo dobrze z ruchami cpip, cpi{.
  • Naprawdę potrzebujesz EasyClip . Zrobi tylko to i wiele więcej …
  • Nie mogę dodać odpowiedzi, ale komentarz. Jeśli chcesz tylko skopiować tekst, możesz również użyć sed :). sed -n 5p file; tylko 5 linia. sed -n -e 5p -e 8p file; tylko 5 i 6 linia. sed -n 5,8p file; linie między 5 a 8. Wypisze linie w konsoli. Możesz łatwo skopiować, zaznaczając tekst.

Odpowiedź

Dla X11 systemy oparte na systemie (np. Linux i większość innych UNIX ) istnieją dwa niezależne od siebie schowki:

  • PODSTAWOWY – To jest kopiowanie przy zaznaczeniu i można je wkleić środkowym przyciskiem myszy.
  • SCHOWEK – jest kopiowany za pomocą (zwykle) ^C i wklejany z ^V (to jak MS Windows).

OS X i Systemy Windows mają tylko jeden schowek.

Dla X11 istnieje wiele narzędzi, które synchronizują te schowki, więc jeśli wydają się być takie same, możesz mieć jeden z nich uruchomiony.

Vim ma dwa specjalne rejestry tery odpowiadające tym schowkom:

  • * używa PRIMARY; mnemonic: S tar is S wybierz (for copy-on- s wybierz)
  • + używa CLIPBOARD; mnemonic: CTRL PLUS C (dla wspólnego skrótu)

W systemie Windows & OS X nie ma różnicy między + a *, ponieważ te systemy mają tylko jeden schowka, a oba rejestry odnoszą się do tego samego (nie ma znaczenia, którego z nich użyjesz).

Możesz używać tych rejestrów jak dowolnego rejestru. Na przykład, używając schowka PODSTAWOWEGO * z poleceniami y i p:

  • "*yy
  • "*p

Może możesz użyć tego jako wygodniejszych skrótów klawiszowych:

noremap <Leader>y "*y noremap <Leader>p "*p noremap <Leader>Y "+y noremap <Leader>P "+p 

Jeśli chcesz ” automatycznie ” połączyć się z systemem „zamiast odwoływać się do niego ręcznie przez cały czas, możesz ustawić zmienną clipboard:

  • Ustaw go na unnamed, aby użyć * (PODSTAWOWY, przy wyborze)
  • Ustaw na unnamedplus by użyć + (CLIPBOARD, ^C)

Teraz samo użycie yy spowoduje przejście do schowka systemowego zamiast nienazwanego rejestru Vima, a p wklei system „s schowka.

Możesz także przypisać do tych rejestrów, tak jak każdy rejestr z let:

  • :let @+=42
  • :let @*=42

clipboard ustawienie ma więcej opcji (takich jak wykluczanie filtrów); ale to są podstawy. Zobacz :help "clipboard", aby poznać całą historię 😉

gVim

Jeśli używasz gVim, możesz uzyskać zachowanie kopiowania przy zaznaczeniu, gdy używając :set guioptions+=a.
Jest to domyślnie włączone w systemach X11 (kopiuje do PRIMARY), ale nie w MS Windows & OSX (ponieważ wybranie dowolnego tekstu przesłoniłoby twój schowek).

Nie +clipboard?

Vim wymaga +clipboard flaga funkcji, aby wszystko to działało; możesz sprawdzić, czy Twój Vim ma to za pomocą :echo has("clipboard") z poziomu Vima (jeśli wyjście to 0, to nie jest obecny, jeśli to „1, to jest), lub sprawdzanie wyniku vim --version dla +clipboard.

Większość dystrybucji Linuksa jest dostarczana z ” minimalną ” kompilacją Vima domyślnie, która nie ma +clipboard, ale zwykle można go zainstalować:

  • Debian & Ubuntu: zainstaluj vim-gtk3.
  • Fedora: zainstaluj vim-X11 i uruchom vimx zamiast vim ( więcej informacji ).
  • Arch Linux: zainstaluj gvim (włączy to również +clipboard dla zwykłego vim).

Możesz także użyj xclip, xcopy lub xsel, aby skopiować tekst do schowka. Zobacz poniżej pytania do rozwiązań:

SSH

Możesz także użyć schowka na zdalnych komputerach, jeśli włączysz przekazywanie X11 przez SSH. Jest to szczególnie przydatne w przypadku powyższej wskazówki, ponieważ możesz wtedy użyć xclip, aby uzyskać dostęp do schowka na pulpicie. Vim na komputerze, na którym chcesz się połączyć, nadal będzie potrzebował +clipboard funkcja.

Wymaga to ustawienia ForwardX11Trusted i powinno należy wykonywać tylko na zaufanych serwerach , ponieważ daje to niemal pełną kontrolę nad sesją X11:

$ ssh -XY myhost 

Aby utrwalić te ustawienia (więc nie trzeba dodawać -XY za każdym razem), możesz zrobić coś takiego w swoim ~/.ssh/config:

# Do **NOT** set this globally; it gives the server complete control over # your X11 session. Host myhost ForwardX11 yes ForwardX11Trusted yes 

Neovim

Neovim odnowił obsługę schowka. Wbudowany interfejs został usunięty i zastąpiony systemem, który wywołuje zewnętrzne narzędzie, takie jak xclip, xsel lub pbcopy / pbpaste.

Powinien zautomatyzować podnieś te narzędzia i użyj ich. W systemie OS X pbcopy i pbpaste powinny być dostępne domyślnie, w systemie Linux prawdopodobnie chcesz zainstalować xclip, ponieważ jest to najpowszechniej dostępna (w rzeczywistości istnieją dwie wersje xsel z niekompatybilnymi flagami . To jest naprawdę głupi).

Zobacz także :help clipboard w Neovim.

Komentarze

  • ssh -Y implikuje -X, więc -X można pominąć.
  • Bardzo interesujący efekt uboczny uczenia się tego (kilka lat temu) uświadomiłem sobie, że " może wybrać wiele nazwanych rejestrów. "+ to nie magia, to ' po prostu zarejestruje +. Na przykład, jeśli chcesz skopiować trzy rzeczy naraz i wkleić każdą z nich po kolei, możesz "1y, "2y i "3y i l ater "1p, "2p i "3p. To jest naprawdę potężne i nie istnieje w prawie żadnym innym edytorze. Innym interesującym zastosowaniem jest przeglądanie przechowywanych makr. Na przykład, jeśli nagrywasz z qq, ale zdasz sobie sprawę, że musisz to naprawić, możesz: w linii tymczasowej "qp naprawić it i "qd.
  • Uwaga: OS X ma dwa oddzielne schowki. Dostęp do jednego uzyskuje się za pomocą Cmd-C i Cmd-V, a do drugiego za pomocą skrótów klawiszowych emacsa Ctrl-K i Ctrl-Y.
  • @shahbaz – prawdopodobnie lepiej użyć do tego celu rejestrów literowych, ponieważ ponumerowane zmieniają się za każdym razem, gdy usuwany jest tekst.
  • Kopiuj & wklej zgodnie z opisem w pytaniu jest przeznaczony dla komputerów stacjonarnych. Prawdą jest, że zainstalowanie pakietu gvim wraz z vim zapewnia funkcje schowka. ale w przeglądarkach plików dostępne są dwa edytory tekstu do otwierania plików! A to wygląda brzydko. Dlatego lepiej jest instalować tylko pakiety vim i vim-gui-common. Później udostępniono funkcje schowka bez konieczności instalowania gvim. To jest w systemie Linux Debian 10.

Odpowiedź

Od http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus 

To zmienia domyślny rejestr Vima na + rejestr, który jest połączony ze schowkiem systemowym.Od :h clipboard-unnamedplus :

 clipboard-unnamedplus unnamedplus A variant of the "unnamed" flag which uses the clipboard register "+" (quoteplus) instead of register "*" for all yank, delete, change and put operations which would normally go to the unnamed register. When "unnamed" is also included to the option, yank operations (but not delete, change or put) will additionally copy the text into register "*". Only available with the +X11 feature. Availability can be checked with: if has("unnamedplus") 

Komentarze

  • Dlaczego to nie działa u mnie, gdy yank & wklejanie między instancjami vima (każda w osobnym terminalu terminatora)?
  • Jeśli korzystasz z Linuksa, a Vim został skompilowany z funkcją + X11 i masz ustawioną wartość clipboard = unnamedplus, to powinieneś być w stanie wyciągnąć linię w jednej instancji vima i wkleić ją w innej instancji of vim. Powinieneś także móc wkleić go do dowolnej innej aplikacji za pomocą CTRL + V lub SHIFT + INSERT. Możesz użyć :version w Vimie, aby zobaczyć, czy + X11 pojawia się na liście dołączonych funkcji. Możesz również sprawdzić, czy funkcja ' unnamedplus ' jest dostępna w :if has('unnamedplus')⏎ echo 'yes'⏎ endif . Jeśli tak nie w Linuksie, powinieneś użyć unnamed zamiast unnamedplus.

Odpowiedź

Pozostałe odpowiedzi dotyczą sposobu kopiowania tekst z bufora do schowka systemowego. Inną powszechną operacją jest kopiowanie tekstu z innego rejestru do schowka. Na przykład, jeśli „już ściągnąłeś jakiś tekst do " (domyślnego rejestru), możesz chcieć załadować ten rejestr do schowka.

Możesz zrób to za pomocą :let:

  • let @+=@" — kopiuje domyślny rejestr do schowka
  • let @*=@" — kopiuje domyślny rejestr do podstawowego wyboru X11 („mysz schowek „)
  • let @+=@a — skopiuj z rejestru a do schowek
  • itp.

Zauważ, że to działa ogólnie dla rejestrów: let @a=@b kopiuje rejestr b, aby zarejestrować a.

Odpowiedź

Włączone kompilacje, które go obsługują, rejestr o nazwie * jest schowkiem systemowym. Aby skopiować tekst z Vima do schowka systemowego, możesz zaznacz tekst w trybie wizualnym, a następnie naciśnij "* y , aby skopiować go do schowka systemowego.

I odwrotnie, użyj "* p , aby wkleić tekst ze schowka systemowego do Vima.

Odpowiedź

Jeśli nie potrafisz „dowiedzieć się, jak uruchomić +clipboard, czego z jakiegoś powodu nie mogłem, to możesz to zrobić to.

Zakładając, że chcesz skopiować tylko część pliku, robię shift + v, aby przejść w tryb wizualny i zaznaczaj tylko te linie, które chcę skopiować. Następnie robię to.

# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard 

Wyjaśnienie

  • "<,"> – oznacza, że użył trybu wizualnego do wybrania zakresu (nie wpisujesz tego)
  • w !{cmd} – zapisz zakres do standardowego wymiaru cmd, zobacz więcej na :help w_c
  • wl-copy i xclip to programy, do których możesz przesłać tekst potokiem i dodadzą go do schowka systemowego

Ponadto, kiedy już jest to w historii, nie musisz wpisywać całego tekstu Po prostu wybierz w trybie wizualnym, wpisz w, a następnie naciśnij w górę, a polecenie powinno zostać automatycznie uzupełnione. Nie musisz też używać trybu wizualnego. Możesz ustawić dowolny zakres.

Komentarze

  • Głosowanie za tym (nad inną podobną odpowiedzią), ponieważ ta daje wyjaśnienie. Nawiasem mówiąc, uwaga dla mnie lub innych czytelników: używając xclip, NIE MUSISZ dodawać parametru -selection clipboard, którym jest zbyt dłuuugi, by pisać. Domyślnie :'<,'>w !xclip skopiowałoby zawartość do ” podstawowego ” tj. Copy-on- wybierz schowek, który można wkleić środkowym przyciskiem myszy.

Odpowiedź

Polecam Gvim, i dodaj to do swojego .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Włącza to obsługę Ctrl C , Ctrl X , Ctrl V jak notatnik w systemie Windows.

Pamiętaj, że spowoduje to również dodanie innych popularnych skrótów Windows, takich jak Ctrl S dla :w, Ctrl A dla zaznaczenia wszystkich itd.

Odpowiedź

Walczyłem z schowek systemowy i vim wewnątrz tmux.

Zostało to rozwiązane za pomocą xsel lub xclip, jak w tym przykładzie:

1.) visu sojusznik zaznacz blok tekstowy w trybie normalnym: V<motionkey>

2.a) z xsel uruchom ex: :"<,">w !xsel -b

2.b) z xclip uruchom ex: :"<,">w !xclip -selection clipboard

3.) wklej do innego programu

… a teraz nmap to zgodnie z preferencjami.

Te opcje (-b lub -selection clipboard) w zasadzie oznaczają, że program (xsel lub xclip) jest wysyłany w tło i czeka, aż inny program wklej treść, aby mogła „przeszkadzać”.

(na manjaro z i3, xfce4-terminal, tmux)

Odpowiedź

To jest zachowanie Chciałem, jeśli chodzi o schowek systemowy:

  • Yankowanie wiersza z nową linią działa
  • Yankowanie wiersza bez nowej linii działa
  • Yankowanie wszystkiego, co jest wizualnie wybrane prace
  • Wytnij prace
  • Wycięcie linii z nową linią działa
  • Wycięcie linii bez nowej linii działa

Według prac Chodzi mi o to, że „nadal mogę używać p do wklejania w vimie i mogę również używać schowka systemowego. Zasadniczo chcę, aby kopiowanie i wklejanie działało zgodnie z oczekiwaniami i nie zrobiłem” Nie chcę zaśmiecać mojego schowka systemowego bardziej niż to konieczne.

Moja technika polegała na zmapowaniu popularnych poleceń yank, wycinania i usuwania w celu użycia schowka systemowego przez dodanie tych wierszy do mojego ~/.vimrc:

" use system clipboard " https://anuragpeshne.github.io/essays/vim/7.html noremap y "*y noremap yy "*yy noremap Y "*y$ noremap x "*x noremap dd "*dd noremap D "*D 

Najważniejsze informacje z https://anuragpeshne.github.io/essays/vim/7.html post na blogu to:

Mapowanie rekurencyjne jest złe, zawsze używaj mapowania nierekurencyjnego. (noremap)

Komentarze

  • Co robi " zrobić? W pierwszej odpowiedzi wyjaśniono już, do czego * jest przeznaczony (odnosząc się do podstawowego schowka), ale nie ' nigdzie nie widzę żadnego wyjaśnienia do czego służy " i dlaczego to sprawia, że polecenie działa.
  • ' nie jest od razu oczywiste, ponieważ ' są prawdopodobnie używane do cytowania używanego do oznaczania słów, takich jak "foo"; jednak dla vim "* jest w rzeczywistości nazwą ” rejestru ” (a vim koncepcja), który łączy się ze schowkiem systemowym. Jeśli otworzysz Vima i wpiszesz :registers, zobaczysz nazwy innych rejestrów, takich jak: "", "0, "1 i dalej. Uważam, że ten artykuł jest przydatny do poznania rejestrów: brianstorti.com/vim-registers

Odpowiedź

Jeśli Twój vim nie obsługuje +clipboard, możesz użyć fakeclip wtyczka dla systemu Linux, Mac, Windows, tmux, screen, …

Odpowiedź

Każda inna odpowiedź została omówiona wszystkie ważne rzeczy dotyczące rejestrów. Chciałbym dodać jeszcze jedną rzecz, której używam.

W Vimie jest sposób na bezpośrednie skopiowanie wizualnie wybranego tekst do schowka. Po prostu umieść to w swoim pliku vimrc :

set guioptions+=a 

I za każdym razem, gdy wizualnie wybierzesz jakiś tekst, zostanie on skopiowany do schowek. Aby uzyskać więcej informacji na ten temat, :help guioptions

BTW, to jest tylko dla gVim.

Komentarze

  • guioptions+=a jest również wspomniane w odpowiedzi Carpetsmoker '.
  • @muru Tak, przepraszam . Nie ' nie widziałem tego wcześniej. Właśnie to widziałem.

Odpowiedź

Możesz także użyć polecenia globalnego, aby umieścić określony wzorzec na schowek. Może to być przydatne w sytuacjach, gdy masz rozproszone informacje w pliku, a ręczne radzenie sobie jest podatne na błędy i męczące.

Najpierw wyczyść rejestr, który otrzyma informacje.

:let @a="" 

Następnie skopiuj wszystkie wiersze zawierające wzorzec do niego

:g/pattern/yank A 

Na koniec przenosząc (kopiując) informacje do schowka systemowego

:let @+=@a 

Jeśli spróbujesz skopiować każdy wiersz zawierający „wzorzec” bezpośrednio do schowka, nie zadziała, ponieważ schowek nie ma możliwości dodania nowego zawartość, dlatego używamy tutaj normalnego rejestru vim do przechowywania wszystkich linii zawierających wzorzec naraz, a następnie umieszczamy go w schowku.

OBS: Konieczne jest sklejenie rejestru przed jego użyciem, a użycie wersji rejestru WIELKIMI LITERAMI umożliwia dołączanie treści, w przeciwnym razie to też nie zadziała.

Odpowiedź

MacVim Cmd + x/c/v do wycinania / kopiowania / wklejania

Jeśli używasz MacVim, zwykłe Cmd+x/c/v są zdefiniowane w $ VIMRUNTIME / macmap.vim , który jest pobierany domyślnie i dlatego jest dostępny bez konfiguracji:

vnoremap <special> <D-x> "+x vnoremap <special> <D-c> "+y cnoremap <special> <D-c> <C-Y> nnoremap <special> <D-v> "+gP cnoremap <special> <D-v> <C-R>+ execute "vnoremap <script> <special> <D-v>" paste#paste_cmd["v"] execute "inoremap <script> <special> <D-v>" paste#paste_cmd["i"] 

Jednak użycie ich może prowadzić do użytkownika vim, który nie zna vim i są zgubione na obcym komputerze / środowisku.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *