Cara menyalin pilihan ke papan klip OS X

225

Saya memiliki area yang dipilih di Vim. Bagaimana saya bisa menyalinnya ke clipboard OS X?

(Clipboard OS X dapat ditulis melalui pipa ke /usr/bin/pbcopy)

ʞɔıu
sumber
4
pilih saja visual, lalu "+y.
zx1986
2
Vm yang dikirimkan dengan OSX tidak memiliki +clipboardatau +xterm-clipboard. Anda dapat memverifikasi ini dengan vim --version | grep clipboard. Mungkin untuk menyelesaikan ini dengan brew install vim --with-client-server.
LondonRob
1
Atau gunakan MacVim, yang menawarkan versi baris perintah yang dapat disinkronkan dengan Anda ~/bindan kemudian ~/bindapat dimasukkan ke jalur Anda di depan vim dan sinonim yang dipasang sistem normal.
the Tin Man
Membangun berdasarkan apa yang ditulis @ zx1986, saya melakukan tiga hal: 1) Menambahkan yang berikut ke ~ / .bashrc saya untuk alias vi / vim ke mode terminal MacVim: alias vi='mvim -v'2) Menambahkan yang berikut ke ~ / .vimrc, yang memetakan Ctrl + c (bukan Cmd + c): vnoremap <C-c> "+y3) Keyboard Maestro yang Dikonfigurasi untuk mengetik urutan kunci ^c(Ctrl + C) saat berjalan di terminal (dalam kasus saya iTerm2) Ini memungkinkan untuk menggunakan Cmd + c untuk menyalin teks ke papan klip OSX sehingga bisa di-paste di aplikasi OSX lainnya.
Neil Griffin

Jawaban:

79

Bergantung pada versi Vim yang saya gunakan, saya dapat menggunakan +register untuk mengakses clipboard.

" Berbagi clipboard Mac OS X " mungkin memiliki beberapa ide yang cocok untuk Anda juga.

Chris AtLee
sumber
5
Untuk orang-orang dengan VIM dikompilasi tanpa + clipboard, tautan di atas adalah sumber yang bagus untuk memberikan solusi tanpa harus mengkompilasi ulang VIM
sdjuan
DETAIL SANGAT PENTING !!! Jika Anda memiliki Vim-versi 7.3 maka ini mungkin tidak bekerja untuk Anda, tetapi jika Anda memiliki Vim-versi 7.4 maka itu benar (dan kadang-kadang Anda bahkan tidak perlu melakukan keseluruhan "+ y). Dan Anda memeriksanya dengan hanya menulis> vim di terminal dan kemudian nomor versi adalah ketika Anda memulainya
Zeth
jawaban ini sama dengan stackoverflow.com/a/680271/2652524
Gujarat Santana
1
The "+mendaftar ada hanya untuk X11 (kecuali Anda membangun vim dengan dukungan + X11, yang akan menginstal server X11 XQuartz di OS X), sementara OS X tidak menggunakan X11 sebagai sistem windows nya.
nn0p
Apa yang harus dilakukan, jika keduanya - vimdan macvimmemiliki + clipboard. Dan clipboard=unnamedditambahkan ~/.vimrc? Sepertinya sangat menyakitkan, mencoba semua solusi dan saat ini harus menggunakan spacemacs, ketika saya tahu, bahwa saya harus menggunakan clipboard global :)
Nikolay Fominyh
240

Untuk MacVim dan Windows Gvim, cukup tambahkan yang berikut ini ke ~/.vimrc:

set clipboard=unnamed

Sekarang semua operasi seperti yy, D, dan Pbekerja dengan clipboard. Tidak perlu awalan dengan "*atau "+.

George V. Reilly
sumber
2
Saya telah menghabiskan sepanjang pagi mencari tahu bagaimana memisahkan perintah y, d dan P dari ⌘-C dan ⌘-V yang memungkinkan MacVim untuk Anda dan akhirnya menemukan ini. Benar saja, saya telah menambahkan ini ke vimrc saya ketika saya masih remaja dan itu membuat saya frustrasi sejak saat itu.
Jonathan Dumaine
2
Bagi mereka yang baru menggunakan MacVim, ini dapat digunakan dari terminal dengan -vflag ( mvim -v). Saya punya milik saya alias vim dan mvim.
pk-nb
3
Seperti yang disebutkan oleh @VincentG dalam komentarnya di atas, ini memang bekerja dengan versi Vim berbasis terminal, tetapi mereka yang menggunakan tmux dalam terminal harus mengikuti salah satu solusi yang dirinci di sini: stackoverflow.com/a/11421329/456584
user456584
3
ini harus menjadi jawaban yang diterima - selama :echo has("clipboard")kata 1, yang merupakan kasus untuk MacVim, dan saya memiliki vialias yang berjalan mvim -vsebagai gantinya
jdsumsion
1
@ Joseph, jika :versionmenunjukkan Anda -clipboardmaka build Vim tidak mendukung fitur clipboard. Saya berbicara tentang MacVim, yang merupakan aplikasi GUI.
George V. Reilly
136

Jika clipboard diaktifkan, Anda dapat menyalin wilayah yang dipilih ke clipboard dengan menekan "*y

Untuk melihat apakah itu diaktifkan, jalankan vim --versiondan cari +clipboardatau -clipboard. Misalnya, ini tidak diaktifkan secara default di kotak 10.5.6 saya:

% yang vim
/ usr / bin / vim
% vim --versi
VIM - Vi IMproved 7.2 (2008 9 Agustus, disusun 11 Nov 2008 17:20:43)
Tambalan yang disertakan: 1-22
Disusun oleh [email protected]
Versi normal tanpa GUI.  Termasuk fitur (+) atau tidak (-): 
... 
-clientserver -clipboard + cmdline_compl + cmdline_hist + cmdline_info + komentar
 ...

Jika sudah dikompilasi +clipboard, saya bisa menggunakan "*register untuk mengakses clipboard sistem.

Saya mengunduh sumber 7.2 dan mengkompilasinya (semudah tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install), dan clipboard diaktifkan:

% yang vim
/ usr / local / bin / vim
% vim --versi
VIM - Vi IMproved 7.2 (2008 9 Agustus, disusun 24 Mar 2009 17:31:52)
Disusun oleh [email protected]
Versi normal dengan GUI GTK2.  Termasuk fitur (+) atau tidak (-): 
... 
+ klien + papan klip + cmdline_compl + cmdline_hist + cmdline_info + komentar
 ...

Namun, bahkan setelah kompilasi, saya tidak dapat menyalin ke clipboard ketika menjalankan vim di Terminal.app, hanya di X11.app.

rampion
sumber
3
Saya mengkompilasi versi terbaru dengan + clipboard dan sekarang clipboard asli berfungsi dengannya sebagai * register. Selain itu, pengaturan "set clipboard = tidak bernama" di file .vimrc Anda menjadikan clipboard sistem seperti biasa. Saya sebenarnya menggunakan github.com/adamv/homebrew/blob/duplicates/Library/Formula/… formula homebrew ini untuk membangun dan mengompilasinya.
rado
Hmm, tidak yakin mengapa Vim tidak muncul di Homebrew saya, tetapi saya menyalinnya ke / usr / local / Library / Formula, menjalankan brew install vim, dan gagal dengan "ld: library tidak ditemukan untuk -lruby-static ". Saya menggunakan RVM dan menggunakan 1.8.7. Ketika saya beralih ke 1.9.2 kesalahannya adalah "ld: library tidak ditemukan untuk -lruby.1.9.1". Solusinya adalah menggunakan sistem Ruby dengan terlebih dahulu menjalankan sistem penggunaan rvm.
justsee
9
Sedikit lebih mudah daripada mencari kata "clipboard" di apa yang biasanya daftar panjang fitur: lakukan :echo has("clipboard"). Jika itu menunjukkan 0, itu tidak dikompilasi. Jika itu menunjukkan 1, itu.
ravron
3
Anda juga bisa mendapatkan vim dikompilasi dengan clipboard menggunakan homebrew: brew install vim
Anton Koval '
4
Awas! Saya memiliki +clipboardversi, tetapi telah menginstal --with-client-serveryang memungkinkan +x11, dan mencoba untuk menyalin / menempel ke x11 di terminal vim di macOS tidak berfungsi :) Saya harus menginstal ulang tanpa +clientserver.
jacwah
96

Anda dapat memilih teks dan jenis secara visual :w !pbcopy<CR>

Atau Anda dapat memasukkan pemetaan kunci di bawah ini dalam ~/.vimrcfile Anda . Mereka memotong / menyalin teks dalam mode visual ke papan klip sistem operasi.

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

sumber: http://drydevelopment.com/blog/vim-pbcopy-on-os-x

pengguna242065
sumber
6
Anda juga dapat memilih teks dari baris perintah seperti: 1,10w! Pbcopy untuk menyalin baris 1-10 ke clipboard. W adalah penting bersama dengan ruang setelahnya untuk menjaga teks asli tetap di tempatnya. Tautan sumber di atas sekarang rusak tetapi ada diskusi di sini: vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing
sdjuan
Saya mengikuti ini untuk membuatnya bekerja di tmux: superuser.com/questions/231130/…
Wex
@Wex Link telah diperbaiki
SnoringFrog
2
Catatan ini sepertinya hanya berfungsi untuk memilih seluruh baris. Tampaknya tidak berfungsi jika Anda hanya ingin memilih bagian dari suatu baris. stackoverflow.com/questions/16196826/…
Kevin Wheeler
1
@Kevin Wheeler: Anda dapat mencoba dengan perintah berikut yang dapat menyelesaikan salin non-linewise salin <silent> <leader> y: <CR>: let @ a = @ "\ | execute" normal! vgvy "\ | let res = system (" pbcopy ", @") \ | let @ "= @ a <CR>
dragonxlwang
38

double-quote asterisk ( "*) sebelum perintah yank apa pun akan menarik hasilnya ke dalam buffer copy. Itu bekerja untuk Windows dan Linux juga.

Paul Tomblin
sumber
11
sepertinya memancarkan karakter bel dan tidak ada efek lain bagi saya
ʞɔıu
3
Di X11, "* adalah PRIMARY" dari Vim, + adalah CLIPBOARD, dan SECONDARY tidak mendapatkan register bernama. (Bukan berarti siapa pun menggunakannya ...)
ephemient
Sempurna. Sangat membantu, terutama dengan pemilihan blok (ctrl-v).
Sonique
Karena pertanyaannya khusus tentang Mac OS X, menambahkan bahwa ia berfungsi untuk Mac "juga" tidak perlu.
Paul Tomblin
@PaulTomblin oke, cukup adil :-)
apprenticeDev
26

Di macos 10.8, vim dikompilasi -clipboardjadi untuk menggunakannya "*yAnda harus melakukan kompilasi ulang. Untungnya brew install vimakan mengkompilasi versi baru dengan mudah untuk Anda dan itu akan terjadi +clipboard.

nikola
sumber
1
Sesuatu yang perlu diingat - cukup aneh, brew install vimdengan pembaruan vi, dan tidak vim . Jadi, Anda mungkin harus membuat alias berbeda setelah menginstal vim dengan homebrew.
shridharama
18

Pilih teks dan jenis secara visual:

ggVG
!tee >(pbcopy)

Yang menurut saya lebih bagus daripada:

ggVG
:w !pbcopy

Karena itu tidak muncul prompt: "Tekan ENTER atau ketik perintah untuk melanjutkan"

James Scriven
sumber
Masih menyalin seluruh baris
Karl Pokus
11

Jika Anda menggunakan MacPorts, Anda dapat meningkatkan VIM Anda untuk menyertakan dukungan clipboard melalui:

port install vim +x +x11

Sekarang Anda menggunakan "+register untuk menarik teks Anda langsung ke clipboard Mac Anda. Bekerja seperti pesona.

Matt Hughes
sumber
1
Inilah yang saya butuhkan. Satu hanya perlu memastikan bahwa $ PATH benar dan Anda mendapatkan / opt / local / bin / vim bukan vim Apple.
Gareth
8

Jika Anda menggunakan MacOS X:

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

Kemudian, tambahkan ke .vimrc Anda:

set clipboard=unnamed

Sekarang Anda hanya perlu vim dan lakukan :%y, agar semua konten disalin ke clipboard Anda.

Jose Alban
sumber
konten ditarik tetapi saya tidak bisa menempel di luar VIM.
prayagupd
5

Gunakan vim Homebrew :brew install vim

Mac (per 10.10.3 Yosemite) datang pra-instal dengan sistem vim yang tidak tidak memiliki clipboardbendera diaktifkan.

Anda dapat mengkompilasi vim untuk diri sendiri dan mengaktifkan flag itu, atau cukup menggunakan vim Homebrew yang telah diatur dengan benar.

Untuk melihatnya sendiri, lihat sistem persediaan dengan /usr/bin/vim --version

Anda akan melihat sesuatu seperti:

$ /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 ...

Perhatikan -clipboard

Dengan vim homebrew yang Anda dapatkan

$ /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 ...

Perhatikan +clipboard

Evan
sumber
1
Lalu bagaimana cara membuat salinannya?
Api Beku
dengan versi vim dari brew, saya dapat melakukan apa yang saya inginkan: Saya menyoroti garis-garis Vsaat :w !pbcopyitu dan berhasil
davidpm4
5

Jika Vim Anda tidak dikompilasi dengan clipboard, Anda ingin menyalin teks yang dipilih dan bukan seluruh baris, Anda tidak ingin menginstal MacVim atau GUI lainnya, solusi paling sederhana adalah menambahkan baris ini ke .vimrc Anda:

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

Untuk menggunakannya, cukup pilih secara visual teks yang ingin Anda salin, dan kemudian Control- C. Jika Anda ingin penjelasan lengkap tentang baris ini, baca " Cara Menyalin ke clipboard di vim ".

songz
sumber
tetapi itu juga memberi saya 2 garis hitam setelah teks disalin
Nic Wanavit
4

Saya menggunakan:

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

Itu bekerja dengan sangat baik.

pengguna3133576
sumber
3

Anda dapat menggunakan MacVim saat menggunakan Mac untuk mengakses clipboard dengan mudah menggunakan tombol OS standar.

Ini juga sepenuhnya kompatibel dengan Vim normal, jadi saya bahkan tidak perlu memiliki yang terpisah .vimrc.

matpie
sumber
Saya menggunakan MacVim dan kemudian menyinkronkan sinonim vim command-line ke saya ~/binuntuk menimpa default.
the Tin Man
2

perintah-C? Setidaknya ini berfungsi untuk vim yang diluncurkan dari dalam Terminal.app untuk teks yang dipilih dengan mouse.

mouviciel
sumber
6
jawaban naif yang baik tetapi istirahat output jika Anda menggunakan subwindows vertikal-split di vim (yang sebenarnya adalah kasus yang ada dalam pikiran saya), atau jika hasilnya lebih lama dari satu layar terminal
24ıu
3
Anda benar, saya tidak memikirkan kasus-kasus ini. Saya meninggalkan jawaban saya hanya untuk mencegah orang lain memberikan jawaban serupa yang tidak membantu.
mouviciel
2

Fakeclip mengimplementasikan +dan *buffer jika mereka tidak didukung secara asli.

dihapus
sumber
2

Masalah utama saya adalah Vim versi OSX default. Menginstalnya melalui homebrew ditambahkan +clipboardke build.

Anda dapat memeriksa dengan:

vim --version

untuk melihat apakah dikatakan -clipboardatau +clipboard.

frbl
sumber
2

jika Anda memiliki +clipboardopsi pada instalasi Vim Anda (Anda dapat memeriksanya :version) dan Anda berada dalam mode visual yang dapat Anda lakukan. "+yIni akan mencabut pilihan ke buffer +yang merupakan clipboard.

Saya telah menambahkan peta berikut ke vimrc saya dan berfungsi dengan baik.

vmap <leader>y "+y : Dengan ini saya bisa melakukan leader keytindak lanjut yuntuk menyalin ke clipboard dalam mode visual.

nmap <leader>p "+p : Dengan ini saya bisa melakukan leader keytindak lanjutp untuk menempelkan dari clipboard pada mode normal.

PD: Di Ubuntu saya harus menginstal vim-gtk untuk mendapatkan +clipboardopsi.

Andrés Hazard
sumber
0

pada mac ketika hal lain tampaknya berfungsi - pilih dengan mouse, klik kanan pilih salin. uff

tom
sumber
0

Saat ini saya menggunakan OS X 10.9 dan upaya saya untuk mengkompilasi vim dengan + xterm_clipboard tidak membawa saya apa-apa. Jadi solusi saya saat ini adalah menggunakan MacVim dalam mode terminal dengan opsi set clipboard=unnameddi file ~ / .vimrc saya. Berfungsi sempurna untuk saya.

Yaroslav Melnichuk
sumber
0

Apa yang berhasil untuk saya di .vimrc

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

Untuk optiontombol Mac - Holding diikuti dengan ctrl Vsaat memilih teks melakukan trik.

markroxor
sumber
0

Geser cmd c - setel mode salin Tarik mouse, pilih teks, cmd c untuk menyalin teks yang dipilih Cmd v untuk menempel

pengguna518066
sumber
-1

Untuk pengguna Ubuntu, paket yang ingin Anda ambil untuk menggunakan clipboard penuh vim. Paket-paket lain (vim-tiny, vim) tidak termasuk fitur clipboard.


sumber
vim-full bukan lagi nama paket ubuntu. paket vim default (7.3.154) memiliki serangkaian fitur minimal, termasuk -clipboard. Menginstal vim-gtk atau vim-nox akan memberikan versi + clipboard.
spazm
-1

Menyalin ke clipboard menggunakan register '+' atau '*' tidak berfungsi?

Alasan: Versi vim khusus Anda dikompilasi tanpa dukungan clipboard. Ketik vim - versi pada konsol dan Anda akan melihat -xterm_clipboard . Menginstal vim dengan paket gui memecahkan masalah ini. Di ubuntu Anda bisa melakukan ini dengan mengetikkan shell:

sudo apt-get install vim-gui-common

Sekarang lagi lakukan vim --versi di konsol. Kemungkinan besar, Anda akan melihat + xterm_clipboard sekarang !!

Jadi, sekarang Anda dapat menyalin apa pun ke papan klip menggunakan register + (seperti "+ yy untuk menyalin garis saat ini ke papan klip)

VineetChirania
sumber
-1

Saya menemui masalah yang sama, setelah menginstal macvim masih tidak berfungsi, akhirnya saya menemukan cara untuk menyelesaikan:

Coba hapus semua vim terlebih dahulu,

brew uninstall macvim

brew uninstall --force vim

dan instal ulang macvim

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

Maka Anda dapat menggunakan "*yatau "+y, tidak harusset clipboard=unnamed

Bruce
sumber
-2

Command-c bekerja untuk saya di MacVim dan di terminal.

Matt Williamson
sumber
Salin dan tempel tradisional tidak berfungsi dengan buffer Vim dan sepenuhnya dapat mengacaukan pemformatan Anda. Misalnya, menyalin 15 baris objek bersarang dengan Cmd + C dan kemudian menempel dengan Cmd + V akan menyebabkannya kehilangan pemahaman tentang sarang. Ini sangat mungkin tergantung pada pengaturan Anda di .vimrc Anda dan bisa sangat khusus
netpoetica