Apakah ada cara untuk menyalin blok teks ke clipboard sistem, jadi saya bisa menempelkannya di program lain?
cpip
, cpi{
.
Apakah ada cara untuk menyalin blok teks ke clipboard sistem, jadi saya bisa menempelkannya di program lain?
cpip
, cpi{
.
Jawaban:
Untuk sistem berbasis X11 (mis. Linux dan sebagian besar sistem mirip UNIX lainnya ) ada dua clipboard yang tidak tergantung satu sama lain:
^C
, dan ditempel dengan ^V
(Ini seperti MS Windows).Sistem OS X dan Windows hanya memiliki satu clipboard.
Untuk sistem X11 ada juga sejumlah alat yang menyinkronkan clipboard ini untuk Anda; jadi jika mereka tampak sama, Anda mungkin memiliki salah satunya berjalan.
Vim memiliki dua register khusus yang sesuai dengan clipboard ini:
*
menggunakan PRIMARY; mnemonic: S tar adalah S terpilih (untuk copy-on s terpilih)+
menggunakan CLIPBOARD; mnemonic: CTRL PLUS C (untuk keybind umum)Pada Windows & OS X tidak ada perbedaan antara +
dan *
, karena sistem ini hanya memiliki satu clipboard, dan kedua register merujuk pada hal yang sama (tidak masalah yang mana yang Anda gunakan).
Anda dapat menggunakan register ini sebagai register apa pun. Misalnya, menggunakan clipboard UTAMA *
dengan y
dan p
perintah:
"*yy
"*p
Anda mungkin bisa menggunakan ini sebagai gantungan kunci yang lebih nyaman:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
Jika Anda ingin "secara otomatis" berinteraksi dengan clipboard sistem alih-alih merujuk secara manual setiap saat, Anda dapat mengatur clipboard
variabel:
unnamed
untuk menggunakan *
(PRIMARY, saat pilih)unnamedplus
untuk menggunakan +
(CLIPBOARD, ^C
)Sekarang, hanya menggunakan yy
akan pergi ke clipboard sistem, bukan register Vim yang tidak disebutkan namanya, dan p
akan menempelkan clipboard sistem.
Anda juga dapat menetapkan untuk register ini seperti halnya register dengan let
:
:let @+=42
:let @*=42
The clipboard
Pengaturan memiliki beberapa pilihan (seperti mengecualikan filter); tetapi ini adalah dasar-dasarnya. Lihat :help 'clipboard'
cerita lengkapnya ;-)
Jika Anda menggunakan gVim, Anda bisa mendapatkan perilaku copy-on-pilih saat menggunakan
:set guioptions+=a
.
Ini diaktifkan secara default pada sistem X11 (salinan ke PRIMARY), tetapi tidak pada MS Windows & OSX (karena memilih teks apa pun akan menggantikan papan klip Anda).
+clipboard
?Vim membutuhkan tanda +clipboard
fitur agar semua ini berfungsi; Anda dapat memeriksa apakah Vim Anda memiliki ini dengan menggunakan :echo has('clipboard')
dari dalam Vim (jika output 0
, itu tidak ada, jika itu 1
, itu), atau memeriksa output
vim --version
untuk +clipboard
.
Sebagian besar distribusi Linux dikirimkan dengan build Vim "minimal" secara default, yang tidak ada +clipboard
, tetapi Anda biasanya dapat menginstalnya:
vim-gtk
atau vim-gnome
.vim-X11
, dan jalankan vimx
alih-alih vim
( info lebih lanjut ).gvim
(ini akan memungkinkan +clipboard
untuk yang normal vim
juga).Anda juga dapat menggunakan xclip
,, xcopy
atau xsel
untuk menyalin teks ke clipboard; lihat pertanyaan berikut untuk solusi:
Anda juga dapat menggunakan clipboard pada mesin jarak jauh jika Anda mengaktifkan penerusan X11 melalui SSH. Ini sangat berguna dengan tip di atas karena Anda dapat menggunakannya
xclip
untuk mengakses clipboard desktop Anda. Vim pada mesin yang Anda tuju masih membutuhkan +clipboard
fitur tersebut.
Ini memerlukan ForwardX11Trusted
pengaturan, dan hanya boleh dilakukan dengan server tepercaya , karena ini memberi server kontrol hampir penuh atas sesi X11 Anda:
$ ssh -XY myhost
Untuk membuat pengaturan ini tetap ada (jadi Anda tidak perlu menambahkan -XY
setiap waktu), Anda dapat melakukan sesuatu seperti ini di ~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim mengubah dukungan clipboard. Built-in antarmuka telah dihapus dan diganti dengan sistem yang memanggil utilitas eksternal seperti xclip
, xsel
atau
pbcopy
/ pbpaste
.
Seharusnya secara otomatis mengambil utilitas ini dan menggunakannya. Pada OS X pbcopy
dan pbpaste
harus tersedia secara default, di Linux Anda mungkin ingin menginstal xclip
, karena itulah yang paling banyak tersedia (sebenarnya ada dua
versi xsel
dengan flag yang tidak kompatibel . Ini benar-benar bodoh).
Lihat juga :help clipboard
di Neovim.
"<Space>
untuk mendapatkan "
. Jadi dalam hal ini Anda harus menekan "<Space>+y
atau "<Space>*y
menyalin.
"
dapat memilih banyak register bernama. "+
bukan sihir, hanya mendaftar +
. Jadi misalnya, jika Anda ingin menyalin tiga hal pada saat yang sama dan paste masing-masing satu per satu, Anda bisa "1y
, "2y
dan "3y
dan kemudian "1p
, "2p
dan "3p
. Ini sangat kuat dan tidak ada di hampir semua editor lainnya. Penggunaan lain yang menarik adalah untuk melihat makro yang tersimpan. Misalnya, jika Anda merekam dengan qq
, tetapi Anda menyadari bahwa Anda perlu memperbaikinya, Anda dapat: dalam baris temp "qp
, memperbaikinya, dan "qd
.
Jawaban lainnya mencakup cara menyalin teks dari buffer Anda ke clipboard sistem. Operasi umum lainnya adalah menyalin teks dari register lain ke clipboard. Misalnya, jika Anda sudah menarik beberapa teks ke dalam "
(register default), Anda mungkin ingin memuat register itu ke clipboard.
Anda dapat melakukan ini dengan :let
:
let @+=@"
- menyalin register default ke clipboardlet @*=@"
- menyalin register default ke dalam pemilihan utama X11 ("papan klip mouse")let @+=@a
- salin dari daftar a
ke clipboardPerhatikan bahwa ini berfungsi untuk register secara umum: let @a=@b
salinan mendaftar b
untuk mendaftar a
.
Dari http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
Ini mengubah register Vim default ke +
register, yang ditautkan ke clipboard sistem. Dari :h clipboard-unnamedplus
:
clipboard-unnamedplus
unnamedplus A variant of the "unnamed" flag which uses the
clipboard register '+' (quoteplus) instead of
register '*' for all yank, delete, change and put
operations which would normally go to the unnamed
register. When "unnamed" is also included to the
option, yank operations (but not delete, change or
put) will additionally copy the text into register
'*'.
Only available with the +X11 feature.
Availability can be checked with:
if has('unnamedplus')
:version
dalam Vim untuk melihat apakah + X11 muncul dalam daftar fitur yang disertakan. Anda juga dapat memeriksa apakah fitur 'unnamedplus' tersedia dengan :if has('unnamedplus')⏎ echo 'yes'⏎ endif
Jika Anda tidak di Linux maka Anda harus menggunakan unnamedplus daripada unnamedplus.
Pada build yang mendukungnya, register bernama *
adalah clipboard sistem. Untuk menyalin teks dari Vim ke clipboard sistem, Anda dapat memilih teks menggunakan mode visual, lalu tekan "*yuntuk menyalinnya ke clipboard sistem.
Sebaliknya, gunakan "*puntuk menempelkan teks dari clipboard sistem ke Vim.
Saya sarankan Anda menggunakan Gvim, dan menambahkan ini ke .vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
Hal ini memungkinkan dukungan untuk CtrlC, CtrlX, CtrlVseperti notepad di Windows.
Perhatikan bahwa ini juga akan menambahkan beberapa cara pintas Windows umum lainnya, seperti CtrlSuntuk :w
, CtrlAuntuk pilih semua, dll.
Setiap jawaban lain telah membahas semua hal penting tentang register. Saya ingin menambahkan satu hal lagi yang saya gunakan.
Ada cara di Vim untuk secara langsung menyalin teks yang dipilih secara visual ke clipboard. Masukkan saja ini ke file vimrc Anda :
set guioptions+=a
Dan, dengan ini setiap kali Anda secara visual memilih beberapa teks akan disalin ke clipboard Anda. Untuk informasi lebih lanjut tentang ini,:help guioptions
BTW, ini hanya untuk gVim.
guioptions+=a
juga disebutkan dalam jawaban Carpetsmoker.
Anda juga dapat menggunakan perintah global untuk meletakkan beberapa pola tertentu di clipboard. Ini bisa berguna dalam situasi di mana Anda memiliki informasi yang tersebar di file dan secara manual mengatasi rentan terhadap kesalahan dan melelahkan.
Pertama bersihkan register yang akan menerima informasi
:let @a=""
Kemudian salin semua baris yang berisi pola itu
:g/pattern/yank A
Akhirnya mentransfer (menyalin) informasi ke clipboard sistem
:let @+=@a
jika Anda mencoba menyalin setiap baris yang berisi "pola" langsung ke clipboard, itu tidak akan berfungsi karena clipboard tidak memiliki kemampuan untuk menambahkan konten baru, jadi kami menggunakan di sini register vim normal untuk menyimpan semua baris yang mengandung pola sekaligus dan kemudian meletakkannya di clipboard.
OBS: Kita perlu mengkloning register sebelum menggunakannya, dan penggunaan versi UPPERCASE dari register memungkinkan kita untuk menambahkan konten, jika tidak maka tidak akan berfungsi baik.
Jika Anda tidak dapat menemukan cara untuk +clipboard
bekerja, yang saya tidak dapat karena suatu alasan, maka Anda dapat melakukan ini.
Dengan asumsi Anda hanya ingin menyalin bagian dari file, saya lakukan shift
+ v
untuk masuk ke mode visual dan hanya menyorot garis yang ingin saya salin. Lalu saya melakukan ini.
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
Penjelasan
'<,'>
- berarti Anda menggunakan mode visual untuk memilih rentang (Anda tidak mengetik ini)w !{cmd}
- tulis rentang ke stdin cmd
, lihat lebih lanjut di:help w_c
wl-copy
dan xclip
merupakan program yang dapat Anda gunakan untuk mengirim teks dan mereka akan menambahkannya ke clipboard sistem AndaJuga, sekali ini dalam sejarah Anda, Anda tidak perlu mengetik semuanya lagi. Cukup pilih dengan mode visual, ketik w
kemudian tekan ke atas dan perintah itu harus melengkapi otomatis. Juga, Anda tidak harus menggunakan mode visual. Anda dapat mengatur rentang apa pun yang Anda inginkan.