Saya memiliki dua file dibuka di vim, masing-masing dalam satu panel tmux. Saya ingin menyalin, katakanlah 10 baris dari satu file ke file lainnya.
Bagaimana saya bisa melakukan ini dengan tidak menggunakan mouse Copy
-> Paste
?
vim
tmux
copy-paste
Patryk
sumber
sumber
:w /tmp/lines
,, lalu:r /tmp/lines
dalam contoh lain). Atau, jika Vim Anda tahu cara berbicara dengan clipboard sistem Anda, Anda bisa menggunakan+
atau*
mendaftar untuk menghindari file sementara.Jawaban:
Anda harus menggunakan pintasan tmux. Dengan asumsi pintasan perintah tmux Anda adalah default: Ctrl+ b, lalu:
Ctrl+ b, [Masuk ke mode salin (?).
Pindah ke mulai / akhir teks untuk menyorot.
Ctrlspace
Mulai menyorot teks (di Arch Linux). Ketika saya telah mengkompilasi tmux dari sumber di OSX dan Linux lain, Spacebiasanya dengan sendirinya berfungsi. Teks yang dipilih mengubah warna, jadi Anda akan tahu jika perintahnya berhasil.
Pindah ke ujung teks yang akan disalin.
Alt+ wMenyalin teks yang dipilih ke tmux clipboard. (Di Mac gunakan Esc+ w.)
Pindahkan kursor ke panel tmux yang berlawanan, atau jendela tmux yang sama sekali berbeda. Letakkan kursor di tempat Anda ingin menempelkan teks yang baru saja Anda salin.
Ctrl+ b, ]Tempel teks yang disalin dari clipboard tmux.
tmux cukup baik dalam memetakan perintah ke pintasan keyboard khusus.
Lihat Ctrl+ b, ?untuk daftar lengkap pintasan keyboard yang ditetapkan.
sumber
screen
pintasan:Ctrl + A [
(masukkan mode salin),Space
(mulai sorot),Enter
(sorot akhir),Ctrl + A ]
(tempel).Enter
kunci.Sayangnya, saya belum bisa menambahkan komentar pada jawaban Alex Leach jadi saya akan memasukkan addendum di sini untuk pengguna Mac OS X:
sumber
byobu
/tmux
dengan semua pengaturan default, ini berfungsi, Alt + w tidak.Jika Anda menggunakan vim dan tmux pada macOS (Diuji pada macOS 10.12.2, tmux 2.3):
(Asumsikan bahwa kombinasi kunci awalan dari tmux adalah prefix. Awalan adalah ctrl+ bsecara default.)
sumber
Saya terhubung ke server CentOS saya pada mesin Windows menggunakan klien ssh terminal ZOC . Inilah yang bekerja untuk saya:
<prefix>
+[
<Space>
<Enter>
<prefix>
+]
sumber
Anda dapat menggunakan papan klip sistem dengan "* y dan" * p alih-alih y dan p normal.
sumber
"+2yy
- salin dua baris ke papan klip X11"+dd
- potong baris ke papan klip X11"+p
- tempel papan klip X11h,j,k,l
untuk Saya juga kadang melihat di VM ubuntu saya, register "+" menghilang, untuk alasan yang tidak diketahui. Untuk memverifikasi bahwa Anda memiliki+
register, Anda dapat mengetik:reg
dan memeriksa apakah ada string"+
di kolom pertama.y
danp
ke"+y
dan"+p
?Jika sudah
vim
terbuka, lebih baik menggunakan vim copy paste untuk menyalin teks.Tmux copy paste akan berfungsi, namun ada beberapa kelemahan.
Pertama, ketika menyalin beberapa baris teks, Anda harus memilih beberapa baris. Tmux copy paste biasanya tidak mengerti yang
vim
memiliki nomor baris atau ada tanda di selokan vim (seperti angka relatif / angka absolut). Akibatnya, itu akan menyalinnya juga.Kedua, saya telah menemukan bahwa jika teks memiliki format bahasa tertentu, dan Anda langsung mencoba menyalin paste menggunakan tmux ke vim, itu akan mengacaukan format. Ini bisa dihindari dengan menggunakan
set paste!
. Namun, ini membutuhkan lebih banyak pekerjaan.Gunakan
"+y
untuk menyalin dan"+p
menempelVim
native menyediakan metode untuk menyalin tempel antara buffer vim dan clipboard sistem, menggunakan salah satu"+y
atau"*y
. Kemudian menempel menggunakan"+p
atau"*p
. Ini akan menghindari menyalin nomor relatif di selokan atau tanda acak lainnya yang tidak relevan dengan vimsumber
Beberapa opsi untuk penggunaan vim karena urutan pintasan tmux agak panjang dan saya merasa sulit untuk diingat
Seperti jawaban di atas, Anda dapat menggunakan
"+y
dan"*y
menyalin dan kemudian"+p
dan"*p
masing - masing untuk menempel. Jika Anda ingin vim menggunakan clipboard secara default sehingga Anda bisay/p
langsung menggunakannya .sumber untuk perintah clipboard: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim
sumber