Bagaimana cara menyalin teks dari vim ke program eksternal?

84

Saya mencoba menyalin-menempelkan beberapa teks dari vim. Aku melakukan v untuk memasuki modus visual, maka y setelah saya dipilih blok saya.

Tampaknya menyalin teks ke clipboard vim, karena p akan menempelkannya. Tetapi di program lain (misalnya Chrome), klik kanan-> tempel tidak menempelkan teks yang benar. Bagaimana cara menyalin teks ke papan klip yang benar?

ripper234
sumber

Jawaban:

63

Berikut ini hanya akan berfungsi jika vim --versionmenunjukkan bahwa Anda memiliki +xterm_clipboardfitur. Jika tidak, Anda harus menginstal paket tambahan atau mengkompilasi ulang vim dengan fitur yang ditambahkan.


Sebenarnya ada dua opsi untuk ini:

"+y

salinan ke buffer clipboard "biasa" (sehingga Anda dapat menempel menggunakan Ctrl + V, klik kanan dan pilih "Tempel" dll), sementara

"*y

salinan ke pilihan X11 - Anda dapat menempelkan dari buffer ini menggunakan klik tengah.

Catat itu "*dan "+bekerja dua arah. Jadi jika Anda telah memilih beberapa teks di aplikasi lain, Anda dapat menempelkannya ke vim menggunakan "*pdan jika Anda telah menyalin beberapa teks (menggunakan, katakanlah, Ctrl-C) maka Anda dapat menempelkannya ke vim menggunakan "+p.

Hamish Downer
sumber
@ Teripang itu tidak bekerja dari dempul. apa yang harus saya lakukan ?
Rahul Patil
@RahulPatil saya tidak tahu; mungkin mengajukan pertanyaan terpisah, mungkin pada Pengguna Super (karena ini adalah alat Windows, akan lebih diterima di sana).
tshepang
@RahulPatil - jika Anda menggunakan dempul maka Anda mengedit file pada server jauh, bukan pada mesin lokal Anda. Umumnya server jarak jauh tidak akan tahu tentang clipboard di mesin lokal Anda. Jika Anda menggunakan desktop Linux maka Anda dapat ssh dengan penerusan X (asalkan Anda telah menginstal pustaka X di server), tetapi sebagai dempul berjalan di windows Anda tidak memiliki X berjalan sehingga Anda tidak dapat meneruskannya.
Hamish Downer
1
Halo semuanya, Bagaimana cara mengetik "+ y? Haruskah saya mengetiknya dalam mode Visual atau dalam mode perintah? Hal yang konyol, tetapi saya tidak dapat mengetahuinya.
Alind Billore
@AlindBillore: Dalam mode perintah. Secara harfiah, tekan tombol shift'maka shift=kemudian y(tidak sekaligus, satu demi satu, kecuali pergeseran tentu saja).
Reid
31

Jika Anda menggunakan vim> = 7.3.74, maka Anda dapat benar-benar meletakkan ini di vimrc Anda:

set clipboard=unnamedplus

Yang secara otomatis akan menggunakan +buffer (clipboard sistem) secara default. Kemudian untuk menarik (copy), Anda cukup menggunakan yperintah biasa , dll.

Saya menemukan perilaku ini cukup mengganggu, karena perintah seperti dmenempatkan teks yang mereka operasikan ke buffer default, yang berarti saya tidak bisa melakukan puasa dddan menempelkan baris dari internet, misalnya.

Reid
sumber
2
+ adalah pembuat clipboard
Kit Ho
1
Mengenai poin terakhir Anda, ddberarti "potong satu baris", sehingga itu akan menjadi perilaku yang diharapkan. Dalam kasus yang jarang terjadi ketika Anda ingin benar-benar menghapus sebuah garis terlupakan, "_ddakan melakukan trik.
user7089
@HamishDowner juga mencatat dalam jawabannya: Berikut ini hanya akan berfungsi jika vim --versionmenunjukkan bahwa Anda memiliki +xterm_clipboardfitur. Jika tidak, Anda harus menginstal paket tambahan atau mengkompilasi ulang vim dengan fitur yang ditambahkan.
rudolph9
24

Tahan tombol shift dan pilih teks dengan kursor mouse.
Teks akan disalin ke clipboard.

Ini juga berfungsi untuk menempelkan dari clipboard ke vim.

Agar jelas, ini berfungsi untuk vimberjalan di terminal seperti xterm.

Loop Space
sumber
Apakah maksud Anda menahan tombol shift saat memilih teks? Begitulah cara saya melakukannya xterm.
nozimica
@nozimica: Ya.
Loop Space
Jawaban ini seharusnya memiliki lebih banyak
suara positif
@LoopSpace untuk pilihan multiline ini juga akan menyalin nomor baris juga ketika set nudiaktifkan. Jadi, Anda mungkin ingin beralih nomor baris dengan beberapa cara pintas atau menjalankan :set nonuperintah sebelum setiap pilihan
Steven Pribilinskiy
Pada MAC tahan tombol opsi dan pilih teks dengan kursor mouse
abreschi
10

Saya menemukan standar "+gPdan "+yperintah sangat sulit digunakan. Jadi saya telah memetakan kembali Ctrl-Yuntuk menarik ke clipboard dan Ctrl-Pmenempel dari clipboard. Tambahkan ini ke.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP
Bernhard Heijstek
sumber
6

Sudahlah, saya menemukan jawabannya - itu tertulis di menu vim.

"+y

Sangat intuitif.

ripper234
sumber
Apakah Anda menggunakan gvim?
nozimica
@ nozimica- yeah
ripper234
1
Itu juga tersedia dalam vim yang berjalan di xterm atau terminal emulator serupa di bawah X (jika vim dikompilasi dengan +xterm_clipboardfitur).
Gilles
3

Hanya untuk menambahkan jawaban non-vim-spesifik: Anda dapat menggunakan Ctrl+Shift+Cuntuk menyalin ke clipboard sistem di Ubuntu (jika fungsionalitas disediakan oleh emulator terminal Anda, gnome-terminal untuk satu menyediakannya). Ctrl+Shift+Vpasta ke jendela terminal lain, Ctrl+Vpasta reguler ke aplikasi GUI.

Selain itu, jika Anda memilih teks di terminal, lalu klik tengah, itu akan ditempelkan dari papan klip X11.

crazy2be
sumber
Untuk beberapa alasan itu tidak berfungsi. Cukup pilih dengan mode visual, salin dengan ctrl-shift-C, lalu tempel di aplikasi lain menggunakan Ctrl-shift-V? Teks tidak bisa disalin untuk saya.
ripper234
2
@ ripper234: ini tidak berfungsi jika Anda menggunakan gvim. Seperti kata crazy2be, fungsi ini dari emulator terminal Anda.
Reid
@ ripper234: 1) Ini adalah fungsi yang disediakan oleh emulator terminal Anda (gnome-terminal untuk satu menyediakannya), 2) Ctrl + Shift + V adalah untuk menempel ke terminal , aplikasi GUI masih menggunakan Ctrl + V seperti biasa. Saya akan mengedit jawaban untuk membuatnya lebih jelas.
crazy2be
jika Anda menggunakan mousedrag kontrol-geser - pilih teks, salin tempel dari satu jendela buffer menjadi mudah.
Stephan
2

Secara default, jika Anda menginstal versi ringan vim, maka Anda tidak akan memiliki +xterm_clipboardfitur on ( vim --version | grep xterm), yang diperlukan untuk menggunakan *dan +mendaftar di luar vim.

Untuk mengaktifkannya, Anda harus mengkompilasi vim sendiri, atau menginstal versi vim yang menyertainya. Saya menggunakan vim-gnome: sudo apt-get install vim-gnome. Jika Anda melakukan vim --version | grep xterm, Anda akan melihat sekarang +xterm_clipboard.

Sekarang, coba salin ke +dan *dan itu akan berhasil.

laughing_man
sumber
2

Ketika saya memeriksa vim saya tidak mendukung clipboard:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Saya menginstal vim-gnome dan kemudian memeriksa lagi

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Sekarang saya dapat menyalin dan menempel menggunakan "+ y dan" + p masing-masing.

Tripati Ashutosh
sumber
1

Tahan tombol SHIFT dan mouse pilih teks untuk menyalinnya.

Kemudian rekatkan di program lain dengan CTRL + v.

Bekerja di terminal di Ubuntu 16.04 saya. Tidak yakin tentang gvimdan sistem lainnya.

masukkan deskripsi gambar di sini

Andrzej Rehmann
sumber
Itu tidak bekerja.
Astrid
jawaban kreatif
vidur punj
0

Hanya untuk menambahkan, jika ada yang berhasil mencoba untuk mengganti terminal yang membungkus vim (jika Anda menggunakan vim dari terminal). Saya menemukan bahwa, misalnya, clipboard tidak dapat diakses oleh guake ketika dapat diakses dari terminal gnome.

gc5
sumber