Tidak seperti editor lain, vim menyimpan teks yang disalin dalam clipboardnya sendiri. Jadi, sangat sulit bagi saya untuk menyalin beberapa teks dari halaman web dan menempelkannya ke file yang sedang aktif. Kebetulan saya harus membuka gedit atau mengetik secara manual.
Bisakah saya membuat vim paste dari dan ke clipboard sistem?
sudo apt-get install vim-gnome
yang akan menambahkan fungsionalitas itu ke inbuilt vim menggunakan clipboard sistem.vim-gnome
mungkin berlebihan atau tidak tersedia di OS / distro mereka, sedangkan saya curigavim-gtk
dan lebih disukaivim-gtk3
lebih mungkin ada dan menarik lebih sedikit ketergantungan, sambil tetap menyediakan integrasi clipboard (setidaknya untuk mereka yang masih menggunakan X11; Saya tidak yakin bagaimana ini semua berinteraksi dengan Wayland).Jawaban:
The
"*
dan"+
register adalah untuk clipboard sistem (:help registers
). Tergantung pada sistem Anda, mereka dapat melakukan hal yang berbeda. Misalnya, pada sistem yang tidak menggunakan X11 seperti OSX atau Windows,"*
register digunakan untuk membaca dan menulis ke clipboard sistem. Pada sistem X11 kedua register dapat digunakan. Lihat:help x11-selection
untuk lebih jelasnya, tetapi pada dasarnya"*
analog dengan pemilihan PRIMARY X11 (yang biasanya menyalin hal-hal yang Anda pilih dengan mouse dan pasta dengan tombol tengah mouse) dan"+
analog dengan pemilihan CLIPBOARD X11 (yang merupakan papan klip yang tepat).Jika semua itu melampaui kepala Anda, coba gunakan
"*yy
atau"+yy
salin baris ke papan klip sistem Anda. Dengan asumsi Anda memiliki opsi kompilasi yang sesuai, satu atau yang lain akan berfungsi. Anda mungkin ingin memetakan ulang ini untuk sesuatu yang lebih nyaman bagi Anda. Sebagai contoh, Anda dapat memasukkanvnoremap <C-c> "*y
~ / .vimrc Anda sehingga Anda dapat memilih secara visual dan menekan Ctrl+ cuntuk menarik ke clipboard sistem Anda.Perlu diketahui bahwa menyalin / menempel dari clipboard sistem tidak akan berfungsi jika
:echo has('clipboard')
mengembalikan 0. Dalam hal ini, vim tidak dikompilasi dengan+clipboard
fitur dan Anda harus menginstal versi yang berbeda atau mengkompilasi ulang. Beberapa distro linux secara default menyediakan instalasi vim minimal, tetapi umumnya jika Anda menginstal paketvim-gtk
atauvim-gtk3
Anda bisa mendapatkan fitur tambahan.Anda juga mungkin ingin melihat
'clipboard'
opsi yang dijelaskan di:help cb
. Dalam hal ini Anda dapat:set clipboard=unnamed
atau:set clipboard=unnamedplus
untuk membuat semua operasi menarik / menghapus secara otomatis menyalin ke clipboard sistem. Ini bisa menjadi ketidaknyamanan dalam beberapa kasus di mana Anda menyimpan sesuatu yang lain di clipboard karena akan menimpanya.Untuk menempelkan Anda dapat menggunakan
"+p
atau"*p
(lagi, tergantung pada sistem Anda dan / atau pilihan yang diinginkan) atau Anda dapat memetakan ini ke sesuatu yang lain. Saya mengetiknya secara eksplisit, tetapi saya sering menemukan diri saya dalam mode insert. Jika Anda dalam mode sisipkan, Anda masih dapat menempelkannya dengan lekukan yang tepat dengan menggunakan<C-r><C-p>*
atau<C-r><C-p>+
. Lihat:help i_CTRL-R_CTRL-P
.Ini juga layak menyebutkan
paste
opsi vim (:help paste
). Ini menempatkan vim ke dalam "mode tempel" khusus yang menonaktifkan beberapa opsi lain, memungkinkan Anda untuk dengan mudah menempel ke vim menggunakan emulator terminal Anda atau pintasan tempel multiplexer yang sudah dikenal. Cukup ketik:set paste
untuk mengaktifkannya, rekatkan konten Anda dan kemudian ketik:set nopaste
untuk menonaktifkannya. Atau, Anda dapat menggunakanpastetoggle
opsi untuk mengatur kode kunci yang mengaktifkan mode (:help pastetoggle
). Saya sarankan menggunakan register daripada opsi ini, tetapi jika mereka masih terlalu menakutkan ini bisa menjadi solusi yang nyaman saat Anda menyempurnakan vim chops Anda.Lihat
:help clipboard
untuk informasi lebih rinci.sumber
"*p
? Apakah saya menekan Shift- ', lalu Shift-8, lalu p, dll?dd
contoh. Yang pertamad
memasuki mode pending operator, kemudian yang keduad
menyelesaikan perintah dan menghapus garis. Jika Anda mengetikdG
, bagaimanapun,G
membuatnya menghapus ke akhir file, bukan hanya menghapus baris. Register menggunakan prinsipal yang sama ini untuk memungkinkan berbagai perintah untuk menggunakannya.vim-gtk
paket (setidaknya di bawah Debian), untuk mendapatkan vim yang dikompilasi+xterm_clipboard
. Butuh 40mn untuk mencari tahu, dan hanya beberapa detik untuksudo apt-get install vim-gtk
.vim-gnome
juga berfungsi dan telah+xterm_clipboard
diaktifkan.Anda dapat menyalin ke vim dengan cara pintas gnome-terminal untuk menempel. Buat file dalam mode sisipkan dan gunakan
Ctrl+ Shift+ v.
Ingat sebelumnya untuk
untuk menghindari mengacaukan lekukan.
sumber
Linux
Di sistem Linux saya,
+
dan*
mendaftar peta ke pilihan X11, yang dapat ditempelkan dengan tombol tengah mouse. Kapan:set clipboard=unnamed
dan:set clipboard=unnamedplus
digunakan, maka register memetakan ke clipboard, dan dapat ditempel dengan CTRL-V.Spesifikasinya tampaknya agak konfigurasi dan bergantung pada sistem, sehingga jarak tempuh Anda pasti akan bervariasi. Ini pasti membuat Anda menunjuk ke arah yang benar.
Lihat juga
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
sumber
*
peta ke register utama X11 (yang biasanya ditempel dengan mouse).+
peta ke register clipboard X11 yang biasanya disisipkan oleh pintasan.*
untuk+
register X11 primer dan untuk clipboard, Anda dapat melihat ini di sumber vim: nilai - nilai ini diatur di sana dan tidak pernah dimodifikasi, danclip_star
danclip_plus
selalu digunakan untuk*
dan+
register masing-masing.Bagi saya konfigurasi itu berfungsi untuk menyalin dan menempel
sumber
Ini akan menjadi baris yang Anda butuhkan di vimrc Anda untuk tujuan ini:
sumber
Saya percaya bahwa pertanyaan ini layak mendapatkan jawaban yang lebih objektif dan grafis:
Memasuki Mode Tempel
Meninggalkan Mode Tempel
Anda menempelkan teks dan Anda bisa mengetik lagi.
sumber
:set nopaste
tidak melakukan apa-apa. Apa yang seharusnya dilakukan? Mengapa saya membutuhkannya?:set nopaste
, Anda memberi tahu editor bahwa Anda tidak ingin menempel lagi. Dan ketika Anda menekani
, Anda kembali ke mode edit :).papan klip
Ada register khusus untuk menyimpan pilihan ini, ini adalah register "*. Tidak ada yang dimasukkan di sini kecuali informasi tentang teks apa yang akan diubah (mis. Dengan klik kiri mouse di suatu tempat), atau ketika aplikasi lain ingin rekatkan teks yang dipilih. Kemudian teks dimasukkan ke dalam register "*. Misalnya, untuk memotong garis dan menjadikannya pilihan saat ini / letakkan di CLIPBOARD:
Demikian pula, ketika Anda ingin menempelkan pilihan dari aplikasi lain, misalnya, dengan mengklik tombol tengah mouse, pilihan dimasukkan ke dalam "* daftar terlebih dahulu, dan kemudian 'masukkan' seperti daftar lainnya. Misalnya, untuk meletakkan pilihan (isi CLIPBOARD):
register E354
Tempel dari clipboard
Periksa dukungan X11-clipboard di terminal
Ketika Anda ingin menjalankan Vim di terminal, Anda perlu mencari versi Vim yang dikompilasi dengan dukungan clipboard. Periksa dukungan X11-clipboard, dari konsol, ketik:
Jika Anda melihat "+ xterm_clipboard", Anda dapat melakukannya.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
http://linux.die.net/man/1/xsel
sumber
Saya mencoba saran di atas dan tidak ada yang bekerja di lingkungan saya. (Windows Putty mengkloning lebih dari ssh)
Beberapa googling tambahan muncul: /unix/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
Salah satu komentar yang disarankan menggunakan
SHIFT+INSERT
yang melakukan trik untuk menempelkan dari clipboard desktop saya ke buffer Vim.Ctrl-C
sudah bekerja untuk menyalin ke papan klip desktop dari Vim.sumber
SHIFT+INSERT
berfungsi karena ini adalah opsi tempel untuk terminal Anda (atau dalam kasus Anda Putty); Namun, indentasi kemungkinan akan salah. Lihat paragraf terakhir jawaban saya tentangpaste
opsi untuk memperbaikinya.SHIFT+INS
bekerja dari host linux ke ssh vim dan juga klik ketiga mouse.Tidak punya + clipboard jadi saya datang dengan solusi alternatif ini menggunakan xsel:
Tambahkan ke ~ / .vimrc Anda:
vnoremap <C-C> :w !xsel -b<CR><CR>
sumber
vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
Catatan cepat untuk orang-orang yang pemasangan vim-nya tidak mendukung register * dan +. Tidak perlu mengunduh instalasi vim baru untuk menempel dari clipboard. Berikut adalah metode alternatif:
1) Instal parcellite (pengelola clipboard dengan jejak memori rendah);
2) Dalam file .vimrc Anda, tambahkan berikut ini:
3) Mulai ulang vim.
Sekarang ketika Anda mengetik: Klip sebagai perintah ex, konten clipboard akan disisipkan di kursor. Anda juga dapat memetakan perintah baru ke tombol fungsi agar dapat melakukan ini dengan satu penekanan tombol.
sumber
Ini berfungsi untuk saya: Ctrl+ Shift+V
sumber
Solusi paling sederhana untuk ini, yang juga berfungsi di antara berbagai mesin Linux
ssh
adalah:Periksa apakah mendukung vim X-11 clipboard:
vim --version | grep clipboard
. Jika ia melaporkan kembali-clipboard
dan-xterm_clipboard
Anda harus menginstal salah satuvim-gtk
atauvim-gnome
(gvim di arch linux)Tambahkan baris berikut ke
.vimrc
:ssh -Y machine
Sekarang menyalin dan menempel harus bekerja persis seperti yang diharapkan pada satu, dan di berbagai mesin dengan hanya menggunakan
y
untuk menarik danp
untuk menempel. NB memodifikasi.vimrc
semua mesin tempat Anda ingin menggunakan fitur ini.sumber
Saya mengalami masalah ini pada pertengahan 2017 Macbook Pro berjalan di
vim
dalamiTerm2
sebagai lingkungan pengembangan utama saya.Seperti jawaban lain yang disarankan, saya berlari
vim --version
dan memperhatikan bahwa itu kembali-clipboard
, yang berarti bahwa versivim
yang dikirimkan dengan mesin saya belum dikompilasi dengan opsi clipboard.The
homebrew
paket untukvim
muncul untuk mengkompilasi denganclipboard
pilihan, sehingga memperbaiki bagi saya adalah untuk:brew install vim
set clipboard+=unnamed
ke~/.vimrc
file sayaiTerm2
sumber
Salin Ke Papan Klip OS
Pilih teks dalam mode visual, tekan
"*y
Tempel Dari OS Clipboard
tekan
"*p
sumber
Menyusul dari jawaban Conner, yang hebat, tetapi
C-R C-p +
danC-R C-p *
dalam mode insert agak merepotkan. Ditto"*p
dan"+p
dari mode perintah.seorang guru VIM menyarankan yang berikut untuk memetakan
C-v
apa yangC-r C-p +
dilakukannya.sumber
Jika Anda menggunakan vim di MAC OSX, sayangnya itu datang dengan versi yang lebih lama, dan tidak mematuhi opsi clipboard. Untungnya, homebrew dapat dengan mudah menyelesaikan masalah ini.
instal vim:
brew install vim --with-lua --with-override-system-vim
pasang gui verion of vim:
brew install macvim --with-lua --with-override-system-vim
restart terminal untuk mulai berlaku.
tambahkan baris berikut ke
~/.vimrc
set clipboard=unnamed
sekarang Anda dapat menyalin baris dalam vim dengan
yy
dan menempelkannya di seluruh sistem.sumber
Jika Anda menggunakan mouse, lakukan dulu
Kemudian
right click mouse
dan konten dalam buffer akan ditempelkansumber
Di atas pengaturan
:set clipboard=unnamed
, Anda harus menggunakanmvim -v
yang bisa Anda dapatkanbrew install macvim
jika Anda menggunakan vim di Terminal.app di Mac OS X 10.9. Vim default tidak mendukung opsi clipboard.sumber
Mungkin juga layak disebutkan, pada OSX menggunakan Vim, Anda dapat memilih teks dengan mouse, Cmd-C untuk menyalin ke clipboard sistem OSX, dan teks yang disalin akan tersedia di clipboard di luar Vim.
Dengan kata lain, OSX memperlakukannya seperti jendela biasa, dan di sinilah tombol "Command" Apple yang banyak difitnah berguna.
B-30
sumber
Berdasarkan jawaban @ lis2, saya menggunakan konfigurasi yang lebih sederhana yang tidak akan memaksa mode Insert di akhir:
Harap diingat bahwa semua ini menimpa pemetaan Vim default:
v_CTRL-C
: hentikan mode Visualv_CTRL-X
: kurangi [hitung] dari angkav_CTRL-V
: mode Visual blockwisei_CTRL-V
: masukkan non-digit berikutnya secara harfiah, yang juga dipetakan kei_CTRL-Q
Sebagai alternatif, kita dapat menggunakan tombol terinspirasi dalam "yank", "delete" dan "menempatkan" Vim kata kerja:
<C-y>
,<C-d>
dan<C-p>
masing-masing. Ini hanya akan menimpa satu pemetaan default:i_CTRL-P
: mundur mencari kata kunci untuk penyelesaiansumber
Solusi lain baik jika Anda ingin mengubah vimrc Anda, dll ... Namun saya ingin cara sederhana untuk menyalin dari vim ke keyboard sistem saya. Inilah yang saya pikirkan.
v
:
(ini akan secara otomatis diperluas untuk menampilkan:'<,'>
)y *
atauy +
(tergantung pada sistem Anda) untuk menarik teks yang dipilih ke clipboard sistemsumber
Yang benar-benar Anda butuhkan adalah EasyClip . Itu akan melakukan hal itu dan banyak lagi ...
sumber
Sejak vim 8 klik kanan memungkinkan mode visual secara default. Ini mencegah copy & paste "normal" (menyebutnya "cacat oleh desain" https://github.com/vim/vim/issues/1326 ). Perbaiki dengan melakukan:
echo "set mouse-=a" >> ~/.vimrc
.Keluar dan mulai ulang vim.
sumber
Dengan Vim 8+ di Linux atau Mac, Anda sekarang bisa menggunakan pasta asli OS (
ctrl+shift+V
di Linux,cmd+V
di Mac). Jangan menekani
untuk Mode Sisipkan.Ini akan menempelkan isi clipboard OS Anda, menjaga spasi dan tab tanpa menambahkan autoindenting. Ini setara dengan tua
:set paste
,i
,ctrl+shift+V
,esc
,:set nopaste
metode.Anda bahkan tidak perlu menginstal fitur
+clipboard
atau+xterm_clipboard
vim lagi. Fitur ini disebut "braket tempel". Untuk detail lebih lanjut, lihat Mematikan indentasi otomatis ketika menempelkan teks ke vimsumber
Ketika saya menggunakan vim Debian saya yang tidak terintegrasi dengan Gnome (vim --versi | grep clip # tidak menunjukkan dukungan clipboard), saya dapat menyalin ke clipboard setelah memegang tombol Shift dan memilih teks dengan mouse, sama seperti dengan program kutukan lainnya. Seperti yang saya ketahui dari komentar oleh @Conner, itu adalah terminal (gnome-terminal dalam kasus saya) yang mematikan event mouse-nya yang melaporkan ketika merasakan Shift saya. Saya kira program berbasis kutukan dapat menerima acara mouse setelah mengirim urutan Escape tertentu ke terminal.
sumber
Jika Anda berada di windows dan Anda ingin menempelkan isi clipboard sistem menggunakan
p
kemudian ketik perintah ini.Ini menyelesaikan masalah saya.
sumber
Ada dua cara sederhana untuk melakukan ini. Jadikan file Anda dalam mode sisipkan dan 1) tekan tombol tengah (roda gulir) di mouse Anda, atau 2) Ctrl + Shift + V
sumber
Untuk beberapa keyboard internasional, Anda mungkin perlu menekan "+ Spaceuntuk mendapatkan
"
.Jadi dalam hal ini Anda harus menekan "Space+yatau "Space*ymenyalin.
Dan "Space+patau " Space*pmenempel.
sumber
Saya menggunakan jawaban NM Pennypacker dan menginstal vim via homebrew untuk awal 2011 MacBook Pro:
Sekarang saya juga dapat menggunakan "* register untuk menyalin dan menempelkan teks dalam vim. Saya bahkan tidak perlu mengubah sesuatu di dalam file ~ / .vimrc saya atau $ PATH. Homebrew menambahkan symlink di / usr / local / bin, mis. vim -> ../Cellar/vim/8.1.2350/bin/vim.
Alternatif, yang berfungsi sebelumnya, adalah menyalin beberapa baris teks dalam vim dengan menandainya dengan mouse dan menggunakan salin dan tempel (cmd + c, cmd + v) pada mac. Opsi ini hanya berfungsi jika teks yang ingin Anda salin dan tempel memiliki ukuran kurang dari ukuran jendela vim. Jika Anda ingin menyalin semua teks dalam vim dengan menandai seluruh jendela atau menggunakan cmd + a, ini akan menyalin bagian lain dari konsol, ditulis sebelum memulai vim, yang sangat menjengkelkan.
Jadi, saya senang menemukan metode baru menggunakan daftar kliping.
sumber