Bagaimana cara menyalin data di antara berbagai instance vim?

41

Jika saya menggunakan vim pertama untuk menyalin baris (dengan yy), bagaimana cara saya tempel ke vim terminal lain (dengan p)? Apakah ada perintah atau pengaturan yang bisa melakukannya? Bisakah saya menyalin dan menempel ke clipboard sistem global?

Saya tahu cara-cara berikut ini mungkin, tetapi saya ingin yang lebih sederhana:

  1. Saya tidak ingin keluar dari vim pertama dan membuka kembali vim kedua.

  2. Saya tidak ingin menggunakan jendela terpisah (dengan :sp).

sam
sumber

Jawaban:

49

Pertama, Anda harus menginstal versi vim yang diaktifkan clipboard. Untuk mengakomodasi pengguna dengan lingkungan non-grafis (misalnya pengguna Ubuntu Server), vimdan vim-tinyjangan menghubungkan ke kemampuan ini. Anda ingin menginstal GVim Instal GVim , yang diluncurkan baik secara grafis atau di terminal Anda. GVim akan mengganti vimperintah.

Anda dapat menarik teks ke dalam 'cut buffer' dari vim pertama, dan kemudian menempelkan teks ke vim kedua. Untuk menyalin ke global cut buffer, gunakan +register. The "kunci memungkinkan Anda untuk menentukan mendaftar untuk digunakan ketika melakukan yank atau sisipkan operasi.

Di vim pertama, tarik garis ke +register:

"+yy

kemudian, untuk menempelkan dari +register di vim kedua:

"+p

Untuk informasi lebih lanjut tentang register yang tersedia, periksa :help registers. Anda juga dapat menggunakan "+puntuk menempelkan teks yang disalin dari sumber lain di sistem Anda.

Jeremy Kerr
sumber
Untuk apa pun nilainya, jika Anda menginstal GVim (paket mungkin disebut sesuatu seperti vim-gnome), entri menu akan sangat sering memberi Anda cara pintas kunci yang akan mereka gunakan.
zpletan
1
Saya tidak ingin menginstal Gvim. Bagaimana saya melakukan ini di vim?
trusktr
1
@trusktr sebenarnya ini bekerja di vim juga. Dalam T&J ini dikatakan Anda membutuhkan setidaknya vim 7.3.74 (yang berarti Ubuntu 11.10 atau lebih baru).
lumbric
ini entah bagaimana tidak berfungsi jika Anda memiliki vim yang mulai di dalam tmux dan vim lain mulai secara normal di luar - ada kemungkinan Anda tahu bagaimana cara mengatasi masalah ini?
serup
"*yy, "*pjuga berfungsi. jika Anda menekan :reg, Anda akan melihat bintang pendaftaran
elquimista
20

Solusi terbaik yang bekerja untuk saya (yang tidak mengharuskan saya mengubah kebiasaan mengikat kunci saya) ada di sini: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- vim

cukup cantumkan:

set clipboard=unnamedplus

di Anda .vimrc.

bhh1988
sumber
Saya sebenarnya perlu menambahkan set clipboard=unnamedplusdalam kombinasi dengan menginstal GVim. Namun, saya dapat menggunakan terminal xfce4 untuk Vim daripada program GVim yang sebenarnya.
jbrock
9

Saya suka solusi Bill, dan saya telah membuat pemetaan:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

yang pertama dalam mode visual salin semua di / tmp / vitmp dan yang kedua salin konten dari / tmp / vitmp di file

Samir Sadek
sumber
solusi sederhana sederhana - cara mode lama - terima kasih ini melakukannya untuk saya
serup
Apa yang perlu saya ketik Vim setelah menambahkan ini ke .vimrc?
Vitaly Zdanevich
Anda harus mengatur vim sehingga Anda dapat menggunakan kunci pemimpin diikuti oleh y untuk menyalin, kunci pemimpin diikuti oleh p untuk menempel.
Samir Sadek
1
Ini yang berhasil. menggunakan "*ytampaknya rusak di server
ospider
Astaga. Saya sudah mencari berjam-jam tentang masalah ini dengan menggunakan vim di tmux di buruh pelabuhan. Vmrc normal saya yang sudah memiliki nama / unnamedplus, TIDAK bekerja di vim di tmux di buruh pelabuhan. Juga tidak melakukan apa pun yang saya temukan di internet. Namun INI tampaknya bekerja pada SEMUA mesin! Di buruh pelabuhan, di Mac, dan di Arch secara asli. Terima kasih!!
Tommy
5

Saya berpindah-pindah di antara berbagai mesin Unix-family dan menemukan bahwa urutan berikut selalu bekerja untuk saya:

Dalam sesi vi sumber:

  1. Gunakan ESC m auntuk menandai baris pertama
  2. Gunakan ESC m buntuk menandai baris terakhir
  3. Gunakan :'a,'b w! xferuntuk menulis rentang ke file awal

Di sesi tujuan:

  1. Pindahkan kursor ke baris penyisipan
  2. Gunakan ESC :r xferuntuk membaca dalam teks

Saya tahu itu tidak cantik tetapi selalu berhasil bagi saya!

Tagihan
sumber
2

Sebenarnya cukup sederhana: instal versi vimyang mendukung clipboard. jika vimtidak, dapatkan salah satu dari yang berikut ini:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Setelah terinstal, jalankan saja vim. Anda juga dapat memverifikasi bahwa clipboard diaktifkan dengan menjalankan:

 vim --version|grep clipboard

kamu harus melihat +xterm_clipboard.

FuzzyAmi
sumber
Jawaban ini sampai pada inti masalahnya, apakah versi Vim Anda mengaktifkan fitur clipboard? Jika tidak, tidak ada jawaban lain yang akan membuat perbedaan. Lakukan "vim --versi" dan cari "+ clipboard". Saya pikir + xterm_clipboard hanya berlaku jika Anda menginginkan dukungan clipboard X11 tetapi jika Anda menggunakan Ubuntu Anda akan menginginkan ini juga.
Ray
2

Anda mungkin semua akan membenci jawaban ini. Saya dulu bekerja di vi kembali di 80-an di berbagai komputer Unix dan memiliki kesempatan baru-baru ini untuk bermain-main di Linux.

Solusi saya untuk memotong dan menempel menggunakan Putty yang berjalan di Windows untuk mengakses kotak Linux saya.

Putty memungkinkan Anda menyalin txt apa pun di jendela itu hanya dengan menyorotnya. Anda kemudian dapat pergi ke jendela / sesi Putty lain dan klik kanan untuk menempel.

tidak bisa lebih mudah. dan sekarang ada vim. Sayang sekali tidak ada di masa lalu, itu akan membantu saya melawan mafia emacs.

srtour2011
sumber
1

Ini tidak persis menggunakan yy, tetapi jika Anda memilih teks yang ingin Anda salin dengan mouse (kadang-kadang Anda mungkin perlu menggunakan Shift- [seret]), pindah ke jendela terminal lain dan lakukan [klik tengah] atau Shift- [tengah klik] di sana, teks akan dimasukkan pada titik penyisipan Anda saat ini.

Ini berfungsi untuk sebagian besar program baris perintah dan GUI, tidak hanya untuk vim.

Sergey
sumber