Bagaimana cara menyalin antar terminal?

11

Saya menggunakan sistem Linux. Dua vim dibuka di dua terminal. Sekarang saya ingin menyalin teks dari A ke B. Salah satu cara untuk melakukannya adalah dengan memilih teks dalam A, gunakan mouse untuk menyalin, lalu beralih ke B, dalam mode insert, perintah <c-r>+akan menempelkan teks.

Apakah ada cara melakukannya tanpa menggunakan mouse? seperti "+yydi A, ketika beralih ke B o<c-r>+,? Saya menjelajahi beberapa kombinasi dengan sia-sia. Dan saya mencari "copy di terminal", tetapi tidak menemukan apa pun.

pengguna @statox menyarankan satu solusi menggunakan mode visual, yaitu v$"+ydi A, ketika beralih ke B o<c-r>+,.

Apakah ada cara sederhana yang dapat menyalin teks dalam A tanpa masuk ke mode v? Harus diakui masuk ke mode-v tidak melibatkan terlalu banyak pemogokan kunci, hanya ingin tahu apakah ada cara yang lebih baik. Misalnya. jika kursor berada di tengah garis, yysalin seluruh baris (untuk mendaftar "), sementara 0v$ymelakukan hal yang sama dengan stroke tombol tambahan.

Atau, pertanyaan saya dapat dikurangi menjadi jika ada cara dengan stroke tombol yang lebih sedikit daripada 0v$"+yuntuk menyalin sehingga saya dapat menggunakan <alt-tab>o<c-r>+untuk menempel.

pengguna3813057
sumber
Apa masalah sebenarnya Anda? Anda tampaknya memiliki solusinya: pilih teks Anda dengan mode visual (mengapa menggunakan mouse?) Letakkan di register clipboard dengan "+ydan di contoh vim lain masukkan register clipboard "+p. Atau duplikat dari ini ?
statox
Anda tidak harus masuk ke mode visual untuk menarik sesuatu. Anda dapat mengikuti ydengan gerakan ( :help motion.txt) atau objek ( :help object-select). Jika Anda sering menarik dan menyisipkan di seluruh instance Vim, Anda mungkin menemukan pengaturan itu clipboarduntuk dimasukkan unnamedatau unnamedplusberguna. Lihat :help 'clipboard'. Maka menyalin di antara instance seharusnya hanya berfungsi.
garyjohn
1
Inti dari komentar saya bukanlah mode visual, sebenarnya saya memiliki kesulitan untuk memahami masalah Anda: pada awalnya saya pikir itu adalah fakta untuk menyalin beberapa teks dari satu terminal ke yang lain, sekarang sepertinya itu tentang menggunakan penekanan tombol sesedikit mungkin. mungkin untuk menarik ke register clipboard. Jika itu adalah kasus kedua, komentar Garyjohn relevan.
statox
1
0v$sama dengan V. Dan sangat mudah untuk membuat mapping untuk "+y: :nnoremap <Leader>y "+y. Sehingga mengurangi itu menjadi V\y.
Martin Tournoij
@Carpetsmoker solusi Anda baik. Saya ingin menjadikannya sebagai solusi optimal jika Anda menempelkannya ke wilayah jawaban. Tampaknya tanpa peta kunci, yang terbaik yang bisa kita lakukan untuk salinan dalam pertanyaan saya adalah V"+y, 4 penekanan tombol.
user3813057

Jawaban:

9

Anda dapat memeriksa apakah Vim dibangun dengan dukungan clipboard dengan:

:echo has('clipboard')

Jika outputnya adalah 1, berikut ini harus cukup untuk mencapai tujuan Anda:

"*y    in source Vim
"*p    in destination Vim

Anda dapat membuatnya jauh lebih mulus dengan menyinkronkan register clipboard dan register default dengan pengaturan ini di vimrc:

set clipboard^=unnamed

Jika outputnya :echo has('clipboard')adalah 0, pertimbangkan untuk menginstal Vim like vim-gtkatau vim-gnome(nama paket mungkin berbeda dari distro ke distro).

romainl
sumber
1

Saya pikir solusi yang sudah Anda sebutkan dalam pertanyaan Anda adalah yang benar. Jika Anda ingin mengurangi jumlah penekanan tombol, Anda cukup membuat peta, misalnya

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Lihat entri kedua di sini .

Karl Yngve Lervåg
sumber
1

Untuk memperluas jawaban @ romainl, (dengan dukungan clipboard) Anda dapat menggunakan register yang dibagikan dengan clipboard lebar sistem.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

Dengan menjalankan perintah ini, Anda y Anking / menyalin / menyimpan isi yang dipilih dalam register, dan p asting mereka ke tujuan Vim-terminal. Dua register khusus ini +dan *dibagi dengan clipboard lebar sistem (dan karenanya banyak program lain seperti browser web, gedit dll). Register +dikaitkan dengan copy / paste buffer dan *dikaitkan dengan buffer seleksi (yang memasukkan salinan seleksi dengan klik tengah pada bidang teks di, katakanlah, Ubuntu) dan dapat ditempel menggunakan ctrl + v( ctrl + shift + vpada gnome-terminal).

0xc0de
sumber
1

1) Di Fedora saya menggunakan pengaturan berikut:

dnf install vim-X11

vim-X11 hadir dengan dukungan clipboard - mungkin di distro lain mirip.

2) Tetapkan alias di .bashrc saya

alias vim="vimx"

3) Dalam .vimrc:

set clipboard=unnamedplus

Sekarang tarik yang biasa di Vim masuk ke clipboard sistem dan setiap Ctrl-C di luar vim dapat ditempelkan di vim.

Neaţu Ovidiu Gabriel
sumber
0

Jika Anda menggunakan Mac (OSX), Anda dapat menginstal bpcopy (menggunakan brew install pbcopy - lihat http://brew.sh/ untuk lebih jelasnya). Kemudian jalankan perintah berikut (perintah bentuk lurus) tanpa menyentuh mouse:

CONTOH:

1) Dalam TERMINAL # 001 :

cat /tmp/stuff.txt | pbcopy

2) Anda dapat beralih ke terminal # 002 (tanpa menggunakan mouse) dengan menggunakan tombol pintas bawaan di aplikasi terminal OSX: command+i

3) Dalam TERMINAL # 002 : Buka file baru dalam vim

vi newfile

4) Masukkan vim dalam mode insert dengani

5) Masukkan teks dari clipboard dengan command+ V(untuk menempelkan dari clipboard pada Mac)

6) Nikmati sisa harimu!

Joe Choosakul
sumber