Czy istnieje sposób na skopiowanie bloku tekstu do schowka systemowego, aby można go było wkleić w innym programie?
cpip
, cpi{
.
Czy istnieje sposób na skopiowanie bloku tekstu do schowka systemowego, aby można go było wkleić w innym programie?
cpip
, cpi{
.
Odpowiedzi:
W przypadku systemów opartych na X11 (tj. Linux i większość innych systemów podobnych do UNIX ) istnieją dwa schowki, które są od siebie niezależne:
^C
i wklejane ^V
(To jest jak MS Windows).Systemy OS X i Windows mają tylko jeden schowek.
W systemach X11 dostępnych jest również wiele narzędzi, które synchronizują te schowki; więc jeśli wydają się być takie same, być może jeden z nich działa.
Vim ma dwa specjalne rejestry odpowiadające tym schowkom:
*
używa PODSTAWOWY; pamięciowy: S TAR S elekt (na kopię-on- a elekt)+
używa SCHOWKA; mnemonic: CTRL PLUS C (dla wspólnego skrótu klawiszowego)W systemach Windows i OS X nie ma różnicy między +
i *
, ponieważ systemy te mają tylko jeden schowek, a oba rejestry odnoszą się do tej samej rzeczy (nie ma znaczenia, którego używasz).
Możesz używać tych rejestrów jako dowolnego rejestru. Na przykład za pomocą schowka PODSTAWOWEGO *
z poleceniami y
i p
:
"*yy
"*p
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” łączyć się ze schowkiem systemu zamiast odwoływać się do niego ręcznie przez cały czas, możesz ustawić clipboard
zmienną:
unnamed
na użycie *
(PODSTAWOWE, po wybraniu)unnamedplus
użyć +
(SCHOWEK, ^C
)Teraz wystarczy użyć yy
spowoduje przejście do schowka systemu, zamiast nienazwanego rejestru Vima i p
wklei schowek systemu.
Możesz także przypisać do tych rejestrów, tak jak każdy rejestr z let
:
:let @+=42
:let @*=42
To clipboard
ustawienie ma kilka dodatkowych opcji (takich jak filtry wykluczania); ale to są podstawy. Zobacz :help 'clipboard'
całą historię ;-)
Jeśli używasz gVim, możesz uzyskać zachowanie kopiowania przy wybieraniu podczas korzystania
:set guioptions+=a
.
Jest to domyślnie włączone w systemach X11 (kopiowanie do PODSTAWOWEJ), ale nie w MS Windows i OSX (ponieważ zaznaczenie dowolnego tekstu zastąpiłoby Twój schowek).
+clipboard
?Aby Vim +clipboard
działał, Vim wymaga flagi funkcji; można sprawdzić, czy Vim ma to za pomocą :echo has('clipboard')
od wewnątrz vim (jeśli wyjście jest 0
, to nie występuje, jeśli jest 1
, to jest), lub sprawdzając dane wyjściowe
vim --version
dla +clipboard
.
Większość dystrybucji Linuksa jest domyślnie dostarczana z „minimalną” kompilacją Vima, której nie ma +clipboard
, ale zazwyczaj można ją zainstalować:
vim-gtk
lub vim-gnome
.vim-X11
i uruchom vimx
zamiast vim
( więcej informacji ).gvim
(pozwoli to również +clipboard
na normalne vim
).Możesz także użyć xclip
, xcopy
lub, xsel
aby skopiować tekst do schowka; zobacz następujące pytania dotyczące rozwiązań:
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żna następnie użyć
xclip
do uzyskania dostępu do schowka na pulpicie. Vim na maszynie, do której śpiewasz, nadal będzie potrzebował tej +clipboard
funkcji.
Wymaga to ForwardX11Trusted
ustawienia i powinno być wykonywane tylko z zaufanymi serwerami , ponieważ daje to serwerowi prawie całkowitą kontrolę nad twoją sesją X11:
$ ssh -XY myhost
Aby te ustawienia były trwałe (więc nie trzeba ich dodawać za -XY
każdym razem), możesz zrobić coś takiego ~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim odnowił obsługę schowka. Wbudowany w interfejs został usunięty i zastąpiony przez system, który nazywają narzędzia zewnętrznego, takiego jak xclip
, xsel
lub
pbcopy
/ pbpaste
.
Powinien automatycznie podnieść te narzędzia i z nich korzystać. W systemie OS X pbcopy
i pbpaste
powinien być domyślnie dostępny, w systemie Linux prawdopodobnie chcesz go zainstalować xclip
, ponieważ jest on najbardziej dostępny (w rzeczywistości istnieją dwie
wersje xsel
z niezgodnymi flagami . To naprawdę głupie).
Zobacz także :help clipboard
w Neovim.
"<Space>
aby uzyskać "
. W takim przypadku należy nacisnąć "<Space>+y
lub "<Space>*y
skopiować.
"
może wybrać wiele nazwanych rejestrów. "+
to nie magia, to tylko rejestracja +
. Tak na przykład, jeśli chcesz skopiować trzy rzeczy jednocześnie i wkleić każdy z nich, jeden po drugim, można "1y
, "2y
a "3y
później "1p
, "2p
i "3p
. Jest to 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 za pomocą qq
, ale zdajesz sobie sprawę, że musisz to naprawić, możesz: w linii tymczasowej "qp
naprawić to i "qd
.
Pozostałe odpowiedzi dotyczą sposobu kopiowania tekstu z bufora do schowka systemowego. Inną częstą operacją jest kopiowanie tekstu z innego rejestru do schowka. Na przykład, jeśli szarpnąłeś już jakiś tekst "
(rejestr domyślny), możesz chcieć załadować ten rejestr do schowka.
Możesz to zrobić za pomocą :let
:
let @+=@"
- kopiuje domyślny rejestr do schowkalet @*=@"
- kopiuje domyślny rejestr do podstawowego wyboru X11 („schowek myszy”)let @+=@a
- skopiuj z rejestru a
do schowkaZauważ, że działa to ogólnie dla rejestrów: let @a=@b
kopie rejestrują się w b
celu rejestracji a
.
Ze strony 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')
:version
w Vimie, aby sprawdzić, czy + X11 pojawia się na liście zawartych funkcji. Możesz również sprawdzić, czy funkcja „unnamedplus” jest dostępna za pomocą :if has('unnamedplus')⏎ echo 'yes'⏎ endif
Jeśli nie używasz Linuksa, powinieneś użyć unnamedplus zamiast unnamedplus.
W kompilacjach, które go obsługują, nazwanym rejestrem *
jest schowek systemowy. Aby skopiować tekst z Vima do schowka systemowego, możesz zaznaczyć tekst w trybie wizualnym, a następnie nacisnąć, "*yaby skopiować go do schowka systemowego.
I odwrotnie, użyj, "*paby wkleić tekst ze schowka systemowego do Vima.
Polecam używać Gvim i dodać to do .vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
Umożliwia to obsługę CtrlC, CtrlX, CtrlVjak notatnika w systemie Windows.
Pamiętaj, że spowoduje to również dodanie innych typowych skrótów systemu Windows, takich jak CtrlSdla :w
, CtrlAdla zaznaczania wszystkich itp.
Każda inna odpowiedź obejmowała 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 zaznaczonego tekstu do schowka. Po prostu umieść to w swoim pliku vimrc :
set guioptions+=a
Dzięki temu za każdym razem, gdy wizualnie wybierzesz jakiś tekst, zostanie on skopiowany do schowka. Aby uzyskać więcej informacji na ten temat,:help guioptions
BTW, to jest tylko dla gVim.
guioptions+=a
jest również wspomniany w odpowiedzi Carpetsmoker.
Możesz także użyć polecenia globalnego, aby umieścić określony wzór w schowku. Może być przydatny w sytuacjach, w których informacje są rozproszone w pliku, a ręczne kopiowanie jest podatne na błędy i męczenie.
Najpierw wyczyść rejestr, który otrzyma informacje
:let @a=""
Następnie skopiuj do niego wszystkie linie zawierające wzór
:g/pattern/yank A
Wreszcie przeniesienie (skopiowanie) informacji do schowka systemowego
:let @+=@a
jeśli spróbujesz skopiować każdą linię zawierającą „wzór” bezpośrednio do schowka, to nie zadziała, ponieważ schowek nie ma możliwości dodania nowej zawartości, dlatego używamy tutaj normalnego rejestru vim do przechowywania wszystkich linii zawierających wzór od razu, a następnie umieszczenie go w schowku.
OBS: Konieczne jest wyczyszczenie rejestru przed jego użyciem, a użycie wersji UPPERCASE rejestru pozwala nam na dołączanie treści, w przeciwnym razie też nie będzie działać.
Jeśli nie możesz wymyślić, jak dostać się +clipboard
do pracy, czego z jakiegoś powodu nie mogłem, możesz to zrobić.
Zakładając, że chcesz tylko skopiować sekcję pliku, robię shift
+, v
aby przejść do trybu wizualnego i zaznaczać tylko linie, które chcę skopiować. Potem to robię.
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
Wyjaśnienie
'<,'>
- oznacza, że użyłeś trybu wizualnego, aby wybrać zakres (nie wpisujesz tego)w !{cmd}
- zapisz zakres na standardowe wejście cmd
, patrz więcej na:help w_c
wl-copy
i xclip
są programami, do których możesz przeciągać tekst i dodają go do schowka systemowegoPonadto, gdy znajdzie się to w twojej historii, nie musisz ponownie wpisywać całego tekstu. Po prostu wybierz w trybie wizualnym, wpisz, w
a następnie naciśnij w górę, a polecenie powinno się automatycznie uzupełniać. Ponadto nie musisz używać trybu wizualnego. Możesz ustawić dowolny zakres.