Bagaimana membuat cut / copy / paste di GVim di Ubuntu berfungsi dengan Ctrl + X, Ctrl + C, Ctrl + V?

54

Secara default, pintasan cut / copy / paste di GVim di Ubuntu adalah:

 Potong "+ x
 Salin "+ y
 Tempel "+ gP

Saya ingin menggunakan kombo tombol kontrol di GVim, seperti yang saya gunakan di Firefox dan aplikasi gnome lainnya. Bagaimana cara mengkonfigurasi GVim agar berfungsi seperti aplikasi Gnome lainnya?

pcapademic
sumber
Untuk menghindari konflik dengan kunci vim default,
pilih

Jawaban:

50

Tambahkan baris berikut ke _vimrcatau.vimrc

source $VIMRUNTIME/mswin.vim
behave mswin

Namun berhati-hatilah, mode visual CTRL-Q bukan CTRL-V.

Untuk tinjauan umum apa yang dilakukan mswin.vim melihat kode sumber mswin.vim . Ini dikomentari dengan sangat baik dan jika beberapa perintah tidak jelas Anda dapat dengan mudah mencarinya dalam bantuan vim.

Berikut ini adalah ikhtisar singkat yang disusun dari sumber:

  • spasi mundur dan tombol kursor membungkus ke baris sebelumnya / berikutnya
  • CTRL-X dan SHIFT-Del adalah Cut
  • CTRL-C dan CTRL-Insert adalah Copy
  • CTRL-V dan SHIFT-Insert adalah Tempel
  • Gunakan CTRL-Q untuk melakukan apa yang digunakan CTRL-V
  • Gunakan CTRL-S untuk menyimpan, juga dalam mode Sisipkan
  • CTRL-Z adalah Undo; tidak dalam cmdline
  • CTRL-Y adalah Redo (meskipun tidak diulang); tidak dalam cmdline
  • Alt-Space adalah menu Sistem
  • CTRL-A adalah Select all
  • CTRL-Tab adalah jendela Berikutnya
  • CTRL-F4 adalah Tutup jendela

Atas permintaan Nippysaurus: Saya menaruh berikut ini di .gvimrc saya untuk memperlihatkan Ctrl-V di samping Tempel di menu:

unmenu! Edit.Paste
aunmenu Edit.Paste
nnoremenu 20.360 &Edit.&Paste<Tab>Ctrl-V        "+gP
cnoremenu    &Edit.&Paste<Tab>Ctrl-V        <C-R>+

Saya tidak mengujinya secara menyeluruh, hanya memeriksa cepat apakah itu sesuai dengan yang saya harapkan. Bekerja untuk saya, semoga berhasil untuk Anda ;-)

Ludwig Weinzierl
sumber
1
Saya memahami dan menghargai poin-poin yang Manni dan Peter Thorin berikan dalam komentar-komentar jawaban Peter Thorin. Menurut saya, saya mempelajari GVim di Windows, sebagai pengganti notepad, dan saya ingin lebih sedikit gesekan. Terima kasih Ludwig
pcapademic
2
Apakah ada cara untuk mengubah teks pintas menu agar cocok dengan tombol pintas baru?
Nippysaurus
@Nippysaurus: Saya sudah mencobanya dengan menutrans di .gvimrc. Tidak berhasil, akan melihat lagi di malam hari ...
Ludwig Weinzierl
2
Sepertinya mswin.vimsudah ada behave mswinpanggilan. Apakah perlu untuk memanggil ini lagi di saya sendiri _vimrc?
Nathan Friend
1
@NathanFriend Ditto. Ia bekerja bahkan tanpa behave mswin, setidaknya pada sistem saya dengan Vim 8.0.
Mikel
46

Jika Anda ingin Cut / Salin / Tempel berfungsi menggunakan tombol pintas "standar", tetapi Anda tidak ingin mengubah opsi konfigurasi lainnya di gvim, coba tambahkan yang berikut ini ke ~/.vimrc.

vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

Rekatkan hanya berfungsi dalam mode Visual dan sisipkan, sehingga Anda tidak perlu khawatir tentang konflik dengan Ctrl-V dan Mode Visual blockwise. Ini bukan masalah, karena Salin dan Potong membuat Anda masuk ke mode penyisipan, sehingga Anda dapat segera menempel setelahnya. Jika Anda mencobanya, Anda akan merasakannya benar-benar alami.

Saya datang dengan konfigurasi ini setelah beberapa iterasi tweaking, dan saya pikir itu "sempurna" sekarang. Jika Anda bahkan sedikit tidak puas dengan konfigurasi salin / tempel Anda saat ini, coba ini dan saya yakin Anda akan menyukainya.

Cogan
sumber
Ini persis apa yang saya cari. Terima kasih.
Sean McCleary
2
Setelah beberapa percobaan dan konsultasi :help i_ctrl-r_ctrl-o, saya memutuskan untuk berubah imap <C-v> <ESC>"+pamenjadi imap <C-v> <C-r><C-o>+; ini berfungsi seperti yang diharapkan ketika kursor berada di sebelah kiri karakter pertama dari sebuah garis, dan itu paling dekat meniru perilaku "standar".
Holger
Saya sedang berpikir tentang mengubah <C-v>untuk menggeser + memasukkan yang tampaknya jauh lebih cepat di mesin saya. Tetapi di tengah-tengah proyek dan tidak merasa ingin memulai kembali vim sekarang. Just sharing
Will
Anda luar biasa =)
Yugal Jindle
9

Jika Anda ingin mempertahankan perilaku vim normal tetapi juga memungkinkan penggunaan clipboard sistem yang kurang rumit, lihat Mengakses clipboard sistem . Jika Anda ingin gvim menggunakan clipboard sistem sebagai penyangga default (sehingga setiap x, y, p, dll perintah menggunakan clipboard) kemudian tambahkan baris berikut ke vimrc Anda:

set clipboard=unnamed

Saya pribadi menggunakan buffer jauh lebih dalam vim daripada antara vim dan sistem; jadi saya lebih suka memiliki jalan pintas yang sedikit lebih rumit daripada clipboard sistem saya terus-menerus musnah. Tapi itu bagus bahwa pilihan ada untuk mereka yang lebih suka.

jtb
sumber
2

Saya pikir Anda dapat menambahkan ini dengan perintah: imap (mencobanya hanya dengan Ctrl + X di Windows yang berfungsi, menekan ctrl + c tampaknya membatalkan perintah sehingga Anda mungkin harus melakukannya di vimrc).

:imap <C-X> "+x
:imap <C-C> "+y 
:imap <C-V> "+gP

Jika Anda menambahkannya ke ~ / .vimrc Anda hanya perlu menghapus: di depan imap.

imap hanya menambahkan binding dalam mode insert, jadi Anda mungkin ingin mengubahnya hanya peta atau yang lainnya. Lihatlah ke dalam :help mapmodeuntuk mempelajari lebih lanjut tentang memetakan ulang dan membuka pemetaan barang.

Semoga berhasil!

Peter Thorin
sumber
1
Ini harus melakukan sedikit trik. Tapi itu ide yang buruk untuk melakukan itu. Ctrl-V harus masuk ke mode visual, Ctrl-C akan membatalkan perintah apa pun. Dan triknya hanya akan bekerja pada sistem Anda; pada mesin yang berbeda, Anda akan hilang.
innaM
1
Saya setuju sebagian dengan bahwa itu adalah ide yang buruk, saya tidak ingin menggunakannya sendiri, tetapi jika Anda hanya pengguna gvim biasa, maka Anda mungkin tidak akan melewatkan binding yang Anda hapus.
Peter Thorin
1
Mengapa menggunakan gvim sejak awal? Berapa lama Anda akan tetap menjadi pengguna biasa?
innaM
2
Saya tidak berpikir itu ide yang buruk. Orang-orang terbiasa dengan Ctrl + X dll. Dan ada miliaran alasan lain untuk menggunakan vim.
Ludwig Weinzierl