Jak skopiować zaznaczenie do schowka OS X


225

Mam wybrany obszar w Vimie. Jak mogę skopiować go do schowka OS X?

(Do schowka OS X można zapisać za pomocą potoku do /usr/bin/pbcopy)


4
wybierz tylko wizualnie "+y.
zx1986

2
Vim dostarczany z OSX nie ma +clipboardlub +xterm-clipboard. Możesz to sprawdzić za pomocą vim --version | grep clipboard. Można to rozwiązać za pomocą brew install vim --with-client-server.
LondonRob

1
Lub użyj MacVima, który oferuje wersję wiersza polecenia, która może być dowiązana symbolicznie w twoim, ~/bina następnie ~/binmoże zostać wstawiona na twoją ścieżkę przed normalnie zainstalowanym systemem vim i synonimami.
Tin Man,

Opierając się na tym, co napisał @ zx1986, zrobiłem trzy rzeczy: 1) Dodałem następujące do mojego ~ / .bashrc w celu aliasu vi / vim do trybu terminala MacVima: alias vi='mvim -v'2) Dodałem następujące do ~ / .vimrc, który mapuje Ctrl + c (nie Cmd + c): vnoremap <C-c> "+y3) Skonfigurowana klawiatura Maestro do wpisywania sekwencji ^cklawiszy (Ctrl + C) podczas działania w terminalu (w moim przypadku iTerm2) Umożliwia to użycie Cmd + c do kopiowania tekstu do schowka OSX dzięki czemu można go wkleić w innych aplikacjach OSX.
Neil Griffin

Odpowiedzi:


79

W zależności od używanej wersji Vima, mogę użyć +rejestru, aby uzyskać dostęp do schowka.

Udostępnianie schowka w systemie Mac OS X ” może również mieć dla Ciebie kilka pomysłów.


5
Dla osób z VIM skompilowanym bez + schowka powyższy link jest doskonałym źródłem do obejścia obejścia bez ponownej kompilacji VIM
sdjuan

BARDZO WAŻNE DANE !!! Jeśli masz Vima w wersji 7.3, może to nie działać, ale jeśli masz Vima w wersji 7.4, to działa (a czasem nawet nie musisz robić całego „+ y). pisanie> vim w terminalu, a następnie numer wersji jest po uruchomieniu
Zeth

ta odpowiedź jest taka sama jak ta stackoverflow.com/a/680271/2652524
Gujarat Santana,

1
"+Rejestr istnieje tylko dla X11 (chyba, że można zbudować vim ze wsparciem + X11, który będzie zainstalować serwer X11 XQuartz w OS X), podczas gdy OS X nie korzysta X11 jako swojego systemu Windows.
nn0p

Co robić, jeśli oba - vimi macvimmają + schowek. I clipboard=unnameddodane do ~/.vimrc? Wygląda jak prawdziwy ból, próbowałem wszystkich obejść i obecnie muszę używać znaków kosmicznych, kiedy wiem, że będę musiał używać globalnego schowka :)
Nikolay Fominyh

240

W przypadku MacVim i Windows Gvim po prostu dodaj następujące elementy do ~/.vimrc:

set clipboard=unnamed

Teraz wszystkie operacje takie jak yy, Di Ppracy z schowka. Nie trzeba poprzedzać ich znakiem "*lub "+.


2
Spędziłem cały ranek, zastanawiając się, jak oddzielić polecenia y, d i P od ⌘-C i ⌘-V, które MacVim dla ciebie umożliwia, i w końcu to odkryłem. Rzeczywiście, dodałem to do mojego vimrc, gdy byłem młodym vimem i od tego czasu mnie to frustrowało.
Jonathan Dumaine

2
Dla nowych użytkowników MacVima można go używać z terminala z -vflagą ( mvim -v). Mam mój pseudonim do vim i mvim.
pk-nb

3
Jak wspomniano powyżej w komentarzu @VincentG, to rzeczywiście działa z wersjami Vima opartymi na terminalach, ale ci, którzy używają tmux w terminalu, będą musieli zastosować jedno z rozwiązań opisanych tutaj: stackoverflow.com/a/11421329/456584
user456584

3
to powinna być zaakceptowana odpowiedź - tak długo, jak :echo has("clipboard")mówi 1, co ma miejsce w przypadku MacVima, a zamiast tego mam vialiasmvim -v
jdsumsion

1
@Joseph, jeśli :versionpokazuje, -clipboardto kompilacja Vima nie obsługuje funkcji schowka. Mówiłem o MacVimie, który jest aplikacją GUI.
George V. Reilly,

136

Jeśli schowek jest włączony, możesz skopiować wybrany region do schowka, naciskając "*y

Aby sprawdzić, czy jest włączony, uruchom vim --versioni poszukaj +clipboardlub -clipboard. Na przykład nie jest domyślnie włączony w moim polu 10.5.6:

% które vim
/ usr / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9 sierpnia 2008, opracowano 11 listopada 2008 17:20:43)
Zawarte łaty: 1-22
Opracowano przez _www@b77.apple.com
Wersja normalna bez GUI.  Funkcje zawarte (+) lub nie (-): 
... 
-clientserver -clipboard + cmdline_compl + cmdline_hist + cmdline_info + komentarze
 ...

Gdyby został skompilowany +clipboard, mógłbym użyć "*rejestru, aby uzyskać dostęp do schowka systemowego.

Pobrałem źródła 7.2 i skompilowane go (proste jak tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install) i schowek została włączona:

% które vim
/ usr / local / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9 sierpnia 2008, opracowano 24 marca 2009 17:31:52)
Opracowano przez rampion@Myrrhy.local
Wersja normalna z graficznym interfejsem GTK2.  Funkcje zawarte (+) lub nie (-): 
... 
+ klient serwer + schowek + cmdline_compl + cmdline_hist + cmdline_info + komentarze
 ...

Jednak nawet po kompilacji nie mogłem skopiować do schowka podczas uruchamiania vima w Terminal.app, tylko w X11.app.


3
Kompilowałem najnowszą wersję ze schowkiem +, a teraz macierzysty schowek działa z nim jako rejestr *. Ponadto ustawienie „set clipboard = unnamed” w pliku .vimrc powoduje, że schowek systemowy jest typowy. Właściwie użyłem github.com/adamv/homebrew/blob/duplicates/Library/Formula/... tę formułę homebrew do jej zbudowania i skompilowania.
rado

Hmm, nie jestem pewien, dlaczego Vim nie pojawił się w moim Homebrew, ale skopiowałem go do / usr / local / Library / Formula, uruchomiłem brew install vim i nie powiodło się z "ld: biblioteka nie została znaleziona dla -lruby-static „. Używam RVM i był na 1.8.7. Kiedy przełączyłem się na 1.9.2, błąd brzmiał: „Nie znaleziono biblioteki dla -lruby.1.9.1”. Rozwiązaniem było użycie systemu Ruby poprzez uruchomienie systemu użytkowania rvm.
justsee

9
Nieco łatwiejsze niż szukanie słowa „schowek” na zwykle długiej liście funkcji: do :echo has("clipboard"). Jeśli pokazuje 0, nie jest wkompilowane. Jeśli pokazuje 1, to znaczy, że jest.
ravron

3
vim można również skompilować ze schowkiem za pomocą homebrew: brew install vim
Anton Koval '28

4
Strzec się! Miałem +clipboardwersję, ale nie zainstalowany --with-client-server, który umożliwia +x11i próbuje skopiować / wkleić do zacisku X11 w vim na MacOS nie działa :) musiałem przeinstalować bez +clientserver.
jacwah

96

Możesz wizualnie zaznaczyć tekst i pisać :w !pbcopy<CR>

Lub możesz dołączyć poniższe kluczowe mapowania do swojego ~/.vimrcpliku. Wycinają / kopiują tekst w trybie wizualnym do schowka systemu operacyjnego.

vmap <C-x> :!pbcopy<CR>  
vmap <C-c> :w !pbcopy<CR><CR> 

źródło: http://drydevelopment.com/blog/vim-pbcopy-on-os-x


6
Możesz także wybrać tekst z wiersza poleceń, np .: 1,10w! Pbcopy, aby skopiować linie 1-10 do schowka. W jest ważne wraz z odstępem po nim, aby zachować oryginalny tekst na miejscu. Powyższy link źródłowy jest teraz zepsuty, ale tutaj jest dyskusja: vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing
sdjuan

Śledziłem to, aby uruchomić to w tmux: superuser.com/questions/231130/...
Wex

@Wex Link został naprawiony
SnoringFrog

2
Uwaga: wydaje się, że działa to tylko w przypadku zaznaczania całych linii. Wydaje się, że to nie działa, jeśli chcesz tylko zaznaczyć część linii. stackoverflow.com/questions/16196826/…
Kevin Wheeler

1
@Kevin Wheeler: możesz spróbować użyć następującego polecenia, które może rozwiązać nie-liniowe kopiowanie noremap <silent> <leader> y: <CR>: pozwól @ a = @ "\ | wykonać" normalne! vgvy "\ | let res = system (" pbcopy ", @") \ | let @ "= @ a <CR>
dragonxlwang

38

podwójną cudzysłów gwiazdka ( "*), zanim jakiekolwiek polecenie yank spowoduje przeciągnięcie wyników do bufora kopiowania. Działa to również w systemach Windows i Linux.


11
tylko wydaje się emitować postać dzwonu i żadnego innego efektu dla mnie
ʞɔıu

3
W X11 Vim „* jest PODSTAWOWY”, „+ to SCHOWEK, a WTÓRNY nie otrzymuje rejestru nazwanego. (Nie żeby nikt tego nie używał ...)
efemeryczny

Doskonale. Naprawdę pomaga, szczególnie przy wyborze bloku (ctrl-v).
Sonique

Ponieważ pytanie dotyczyło konkretnie Mac OS X, dodanie, że to działa na Macu „zbyt”, nie jest konieczne.
Paul Tomblin,

@PaulTomblin w porządku, wystarczy :-)
apprenticeDev

26

Na Macach 10.8 kompiluje się vim, -clipboardwięc aby go użyć "*y, musisz go ponownie skompilować. Na szczęście brew install vimskompiluje dla ciebie nową wersję i tak właśnie będzie +clipboard.


1
O czym należy pamiętać - dość dziwnie, brew install vimz aktualizacjami vii nie vim . Może więc być konieczne aliasowanie rzeczy po zainstalowaniu vima z homebrew.
shridharama

18

Wybierz wizualnie tekst i wpisz:

ggVG
!tee >(pbcopy)

Które uważam za ładniejsze niż:

ggVG
:w !pbcopy

Ponieważ nie miga monit: „Naciśnij ENTER lub wpisz polecenie, aby kontynuować”


Nadal kopiuje całą linię
Karl Pokus


11

Jeśli korzystasz z MacPorts, możesz zaktualizować VIM, aby zawierał obsługę schowka poprzez:

port install vim +x +x11

Teraz używasz "+rejestru, aby szarpać tekst bezpośrednio do schowka na komputerze Mac. Działa jak marzenie.


1
Właśnie tego potrzebowałem. Trzeba tylko upewnić się, że $ PATH jest poprawny i że otrzymujesz / opt / local / bin / vim, a nie vim firmy Apple.
Gareth

8

Jeśli korzystasz z systemu MacOS X:

$ brew install vim
$ vim --version
VIM - Vi IMproved 7.4 [...]

Następnie dodaj do .vimrc:

set clipboard=unnamed

Teraz musisz być w vimie i zrobić :%y, aby cała zawartość została skopiowana do schowka.


treść jest szarpana, ale nie mogę wkleić jej poza VIM.
prayagupd

5

Użyj vim Homebrew :brew install vim

Mac (od 10.10.3 Yosemite) jest fabrycznie zainstalowany z systemem vim, który nie ma clipboardwłączonej flagi.

Możesz albo skompilować vim dla siebie i włączyć tę flagę, albo po prostu użyć vim Homebrew, który jest poprawnie skonfigurowany.

Aby zobaczyć to na własne oczy, sprawdź vim systemu stock z /usr/bin/vim --version

Zobaczysz coś takiego:

$ /usr/bin/vim --version

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

Zanotuj -clipboard

Z vimem homebrew dostajesz zamiast tego

$ /usr/local/bin/vim --version

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 10 2015 14:04:42)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
... +clipboard ...

Zanotuj +clipboard


1
Więc jak zrobić kopię?
Frozen Flame

z wersji napar z dnia vim udało mi się zrobić to, co chciałem: I podkreślił linie używając Vwtedy :w !pbcopyi to działało
davidpm4

5

Jeśli twój Vim nie jest skompilowany ze schowkami, chcesz skopiować zaznaczony tekst zamiast całych linii, nie chcesz instalować MacVima ani innego GUI, najprostszym rozwiązaniem jest dodanie tej linii do .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Aby z niego skorzystać, wystarczy wizualnie zaznaczyć tekst, który chcesz skopiować, a następnie Control- C. Jeśli chcesz uzyskać pełne wyjaśnienie tego wiersza, przeczytaj „ Jak skopiować do schowka na vimie ”.


ale daje mi również 2 czarne linie po skopiowaniu tekstu
Nic Wanavit


3

Możesz korzystać z MacVim, gdy jesteś na komputerze Mac, aby łatwo uzyskać dostęp do schowka za pomocą standardowych klawiszy systemu operacyjnego.

Jest również w pełni kompatybilny wstecz z normalnym Vimem, więc nawet nie muszę mieć osobnego .vimrc.


Używam MacVima, a następnie symlinizuję synonimy wiersza poleceń do mojego, ~/binaby zastąpić wartości domyślne.
Tin Man,

2

Command-C? Działa to przynajmniej w vimie uruchomionym z Terminal.app dla tekstu zaznaczonego myszą.


6
dobra odpowiedź naiwny ale wyjście przerwy jeśli używasz subwindows podzielone pionowo w vim (które jest faktycznie przypadków mam na myśli), lub jeśli wynik jest dłuższy niż jeden terminal ekran
ʞɔıu

3
Masz rację, nie myślałem o tych przypadkach. Zostawiam swoją odpowiedź, aby uniemożliwić innym udzielanie podobnych, nieprzydatnych odpowiedzi.
mouviciel


2

Moim głównym problemem była domyślna wersja Vima dla OSX. Instalowanie go za pomocą homebrew dodano +clipboarddo kompilacji.

Możesz to sprawdzić za pomocą:

vim --version

sprawdzić, czy to mówi -clipboardlub +clipboard.


2

jeśli masz +clipboardopcję instalacji Vima (możesz to sprawdzić :version) i jesteś w trybie wizualnym, możesz to zrobić "+ySzarpnie zaznaczenie do bufora, +którym jest schowek.

Dodałem następujące mapy do mojego vimrc i działa dobrze.

vmap <leader>y "+y : Dzięki temu mogę leader keywykonać ykopiowanie do schowka w trybie wizualnym.

nmap <leader>p "+p : Z tego można zrobić leader keynastępczych przez pwkleić ze schowka w trybie normalnym.

PD: Na Ubuntu musiałem zainstalować vim-gtk, aby uzyskać +clipboardopcję.


0

na komputerze Mac, gdy wydaje się, że działa cokolwiek innego - wybierz myszą, kliknij prawym przyciskiem myszy wybierz kopię. uff


0

Obecnie korzystam z systemu OS X 10.9 i moje starania o kompilację vima z + xterm_clipboard nic mi nie dały . Tak więc moim obecnym rozwiązaniem jest używanie MacVima w trybie terminalowym z opcją set clipboard=unnamedw moim pliku ~ / .vimrc. Działa idealnie dla mnie.


0

Co w moim przypadku działało .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif

0

W przypadku komputerów Mac - przytrzymanie optionklawisza, a następnie ctrl Vzaznaczenie tekstu, załatwiło sprawę.


0

Shift cmd c - ustaw tryb kopiowania Przeciągnij myszą, zaznacz tekst, cmd c, aby skopiować zaznaczony tekst Cmd v, aby wkleić


-1

Dla użytkowników Ubuntu pakiet, który chcesz pobrać za pomocą schowka, jest pełny. Pozostałe pakiety (vim-tiny, vim) nie zawierają funkcji schowka.


vim-full nie jest już nazwą pakietu ubuntu. domyślny pakiet vim (7.3.154) ma minimalny zestaw funkcji, w tym -clipboard. Zainstalowanie vim-gtk lub vim-nox zapewni wersję + schowka.
spazm

-1

Kopiowanie do schowka przy użyciu rejestru „+” lub „*” nie działa?

Powód: Twoja konkretna wersja vima została skompilowana bez obsługi schowka. Wpisz vim --verion na konsoli, a zobaczysz -xterm_clipboard . Instalowanie vima z pakietami GUI rozwiązuje ten problem. W Ubuntu możesz to zrobić, wpisując polecenie shell:

sudo apt-get install vim-gui-common

Teraz ponownie wykonaj vim --version na konsoli. Najprawdopodobniej zobaczysz teraz + xterm_clipboard !!

Teraz możesz skopiować wszystko do schowka za pomocą register + (np. „+ Yy, aby skopiować bieżącą linię do schowka)


-1

Napotykam ten sam problem, po instalacji macvimnadal nie działa, w końcu znalazłem sposób na rozwiązanie:

Najpierw spróbuj odinstalować wszystkie vima,

brew uninstall macvim

brew uninstall --force vim

i ponownie zainstaluj macvim

brew install macvim --with-override-system-vim

Następnie możesz użyć "*ylub "+y, nie musiszset clipboard=unnamed


-2

Command-c działa dla mnie zarówno w MacVimie, jak i terminalu.


Tradycyjne kopiowanie i wklejanie nie działa z buforami Vima i może całkowicie popsuć twoje formatowanie. Na przykład skopiowanie 15 linii zagnieżdżonych obiektów za pomocą Cmd + C, a następnie wklejenie za pomocą Cmd + V spowoduje utratę zrozumienia zagnieżdżenia. To najprawdopodobniej zależy od ustawień w .vimrc i może być bardzo szczególne
netpoetica
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.