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)

.ıu
źródło
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.

Chris AtLee
źródło
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 "+.

George V. Reilly
źródło
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 [email protected]
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 [email protected]
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.

szaleństwo
źródło
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

użytkownik242065
źródło
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.

Paul Tomblin
źródło
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.

nikola
źródło
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ć”

James Scriven
źródło
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.

Matt Hughes
źródło
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.

Jose Alban
źródło
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 [email protected]
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

Evan
źródło
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 ”.

songz
źródło
ale daje mi również 2 czarne linie po skopiowaniu tekstu
Nic Wanavit
4

Użyłem:

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

Działa naprawdę dobrze.

użytkownik3133576
źródło
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.

matpie
źródło
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ą.

mouviciel
źródło
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

Fakeclip implementuje bufory +i, *jeśli nie są natywnie obsługiwane.

zredagowane
źródło
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.

frbl
źródło
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ę.

Andrés Hazard
źródło
0

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

Tomek
źródło
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.

Jarosław Melnichuk
źródło
0

Co w moim przypadku działało .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif
maged
źródło
0

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

markroxor
źródło
0

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

użytkownik518066
źródło
-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.


źródło
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)

VineetChirania
źródło
-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

Bruce
źródło
-2

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

Matt Williamson
źródło
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