Menyalin teks di luar Vim dengan set mouse = a diaktifkan

232

Setelah diaktifkan set mouse=a , teks yang disalin di dalam Vim tidak akan menempel di luar Vim. Adakah yang tahu cara untuk memperbaikinya?

Di sini, memilih teks dengan mouse mengaktifkan mode visual dan menonaktifkan Copyopsi di menu popup:

masukkan deskripsi gambar di sini

lyuba
sumber
2
Jika vim Anda dikompilasi dengan +clipboarddan mouse=a, Anda akan dapat menyalin / menempel dari / ke vim tanpa menggunakan menu popup terminal. Anda dapat memeriksa apakah clipboarddiaktifkan menggunakan vim --version.
Jérôme Pouiller
@Jezz Layak mengklarifikasi bahwa A) mouse=abukan opsi kompilasi itu adalah sesuatu di vimrc B) Ketika vim dikompilasi dengan +clipboarditu memungkinkan Anda untuk menyalin / menempel ketika :set numbersedang aktif, dan tanpa menyalin / menempelkan angka, meskipun mungkin Anda masih harus melakukan beberapa pemetaan C) Seseorang tidak perlu mengkompilasi ulang VIM sendiri, mungkin ada di vim pada beberapa manajer paket yang didukung oleh OS mana pun .. Pada osx, vim brew memilikinya meskipun vix default osx tidak. Jawaban saya menyebutkan osx ini.
barlop
Mungkin menginstal xselberfungsi untuk Anda juga, Anda dapat memilih teks dengan editor atau dengan mouse dan tekan ctrl+cuntuk menyalin teks, dengan cara itu untuk neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi

Jawaban:

426

Tekan shiftsambil memilih dengan mouse. Ini akan membuat seleksi mouse berperilaku seolah-olah mouse=atidak diaktifkan.

Catatan: trik ini juga berlaku untuk "tempel tombol tengah": jika Anda ingin menempelkan teks vim yang dipilih di luar, tekan shiftsambil mengklik tombol tengah. Pastikan saja bahwa mode penyisipan diaktifkan ketika Anda melakukan itu (Anda mungkin juga menginginkannya:set paste menghindari efek yang tidak terduga).

OS X (mac): tahan alt / opsi saat memilih ( sumber )

François
sumber
2
OKE, ini memang solusinya. Tetapi bagaimana jika Anda ingin memilih banyak kode yang lebih dari pada layar Anda? (maka Anda harus menggulir dan memilih pada saat yang sama)
Ozkan
3
Ada juga opsi untuk menggunakan blok pilih dengan menekan <kbd> ctrl </kbd> + <kbd> shift </kbd> + tombol kiri mouse untuk memulai pemilihan blok. Pasta tombol tengah mouse menyalin konten ke jendela lain.
micrub
6
Jika Anda memiliki nomor baris (seperti yang ditunjukkan tangkapan layar) maka ketika memilih menggunakan ALT pada Mac OS X maka nomor baris juga disalin. Dalam hal ini lebih baik menggunakan ALT + CMD ketika memilih untuk mode Block Selection sehingga Anda dapat menghindari memilih angka.
Aaron
16
Untuk Terminal Mac, setelah OS X 10.11 El Capitan , Fnkunci adalah cara yang tepat untuk digunakan. Yaitu, (denganmouse=a mengaktifkan) memilih teks sambil menekan Fntombol, kemudian gunakan CMD + C untuk menyalin dan menempel ke mana saja yang Anda inginkan.
YaOzI
1
Saya tidak tahu bagaimana jawaban itu memiliki begitu banyak upvotes. Jika Anda mengaktifkan dukungan mouse untuk menghindari menyalin nomor baris maka saran ini sama sekali tidak berguna.
Stelios Adamantidis
49

Gunakan ", +, ysetelah membuat pilihan visual. Anda seharusnya tidak menggunakan perintah salin terminal, karena itu menyalin apa yang dilihat terminal alih-alih konten yang sebenarnya. Inilah yang dilakukan:

  • ", +memberi tahu Vim untuk menggunakan register yang bernama +untuk penghapusan berikutnya, mencabut atau menempatkan. Register bernama +adalah register khusus, itu adalah register clipboard X11. (Pada sistem lain, Anda akan menggunakan *, saya pikir, lihat :help clipboarddan:help x11-selection )
  • y adalah perintah yank, yang memberi tahu Vim untuk menempatkan pilihan dalam register yang sebelumnya disebut.

Anda bisa memetakannya seperti ini:

:vmap <C-C> "+y

Dan kemudian sorot sesuatu dengan mouse dan tekan Control-C untuk menyalinnya.

Fitur ini hanya berfungsi ketika Vim telah dikompilasi dengan +xterm_clipboardopsi. Larivim --version untuk mencari tahu apakah itu.

Josh Lee
sumber
4
Atau mungkin "*ytergantung pada OS.
frabjous
Itu berhasil! Namun, kombinasinya cukup kompleks, 4 tombol sebenarnya .. Mungkin saya perlu memetakan yang lain saat menggunakan "shift" dari jawaban yang lain.
lyuba
Pemetaan juga berfungsi dengan baik :) Sekarang saya tidak tahu jawaban mana dari saya yang harus saya tandai diterima
lyuba
2
Bagi saya ini adalah solusi yang lebih baik daripada jawaban yang diterima karena dengan metode ini, nomor baris tidak disalin.
Saulo Silva
Bagaimana dengan +clipboard? Dan bagaimana +clipboarddengan xterm_clipboardoff?
barlop
18

Alih-alih set mouse=adigunakan set mouse=rdalam .vimrc

Nefeline
sumber
1
Tapi itu menonaktifkan bergulir
Makesh
3
Tolong katakan mengapa. Sekilas, ini pada dasarnya sama dengan menonaktifkan sepenuhnya mode mouse, yang bukan merupakan inti dari pertanyaan.
Mikel
@Mikel benar, lihat jawaban saya juga. Jawaban Josh Lee dapat membantu
barlop
Sayangnya, ini juga akan menyalin nomor baris jika diaktifkan.
vikin9
17

Di OSX digunakan fnsebagai ganti shift.

ssasa
sumber
bekerja untuk saya dengan optionkunci yang altsetara kunci pada host MacOS. Itu terminal jarak jauh di debian9. tidak berfungsi dengan menambahkan salah satu set mouse=a/ set mouse=rdi /etc/vim/vimrcpada remote.
mrtipale
5

Di Ubuntu, dimungkinkan untuk menggunakan bindings copy & paste X-Term di dalam VIM (Ctrl-Shift-C & Ctrl-Shift-V) pada teks yang telah diputar menggunakan tombol Shift.

Marc Gibbons
sumber
4

Opsi OSX-Mac lainnya adalah untuk tidak mencentang View->Allow Mouse Reporting (atau tekan ⌘-R untuk mengaktifkannya.) Ini memungkinkan Anda untuk beralih antara interaksi mouse dan memilih mouse, yang mungkin berguna saat memilih dan menyalin / menempelkan beberapa bit karena Anda tidak memiliki untuk menahan kunci pengubah untuk melakukannya.

Catatan untuk Multiline dengan nomor baris:

Saya biasanya memiliki nomor baris yang diaktifkan sehingga ini juga akan menyalin nomor baris jika Anda memilih beberapa baris. Jika Anda ingin menyalin beberapa baris tanpa nomor baris, nonaktifkan nomornya :set nonudan kemudian Anda dapat :set numengaktifkannya kembali setelah Anda selesai menyalin.

reor
sumber
1

Anda dapat menggunakan :set mouse&baris perintah vim untuk mengaktifkan copy / paste teks yang dipilih menggunakan mouse. Anda kemudian dapat menggunakan tombol tengah mouse atau shiftinsertmenempelkannya.

Madhu
sumber
Kemudian ketika Anda memilikinya :set number, sorot angka. Jadi tidak terlalu bagus. Jadi, Anda membatalkan yang dilakukan olehset mouse=a
barlop
1

Pengaturan kompilasi yang vim dikompilasi dengan, adalah bagian dari masalah. vim --versionmenunjukkan ini.

Di OSX, vim default memiliki -clipboard But you need+clipboard

Pada osx Anda dapat dan tampaknya seharusnya secara umum, menggunakan macvim. Anda dapat melakukan brew cask install macvim itu satu memiliki +clipboard.

Mereka akan memiliki dua vim.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

menjalankan vim akan menjalankan macvim karena cos /usr/local/binharus ada sebelumnya /usr/bindi path, meskipun Anda dapat memeriksanya which vim.

menjalankan vim (untuk menjalankan macvim), baik-baik saja tetapi Anda mungkin ingin memetakan vi ke macvim karena cos menjalankan vi tetap pada vim default! Anda dapat menulis ulang atau menghapus (dengan rm) dan membuat ulang tautan vi sym, dengan ln. Dan untuk melakukannya tanpa kesalahan 'operasi tidak diizinkan ", Anda harus (untuk sementara) menonaktifkan SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-alias-rootless-on-macos-os-x .

macvim telah +clipboardseperti yang ditunjukkan olehvim --version

Berikut ini adalah bekerja ~/.vim/vimrcdengan hanya garis yang diperlukan.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

Kunci pemimpin default adalah garis miring terbalik.

Saya membaca saran bahwa seseorang harus menggunakan kunci pemimpin .. (tentu saja kontrol memiliki banyak kunci yang sudah digunakan, jadi sarannya adalah untuk tidak menggunakan kontrol. Saya tidak tahu apakah itu berlaku untuk tombol perintah juga, tetapi bagaimanapun juga).

Dengan pemetaan tersebut, \cakan melakukan "+yyang akan menyalin dari register yang dikenal sebagai +, ke clipboard. Dan\v akan menempel dari register yang dikenal sebagai +.

Jadi itu salinan / tempel yang berfungsi di antara windows.

OS lain mungkin membutuhkan "*daripada"+

barlop
sumber
Kedua vim memiliki -xterm_clipboard. Mungkin +xterm_clipboardakan bermanfaat dalam beberapa hal tetapi tidak masalah untuk solusi ini.
barlop
0

Jika Anda menggunakan, sesi Putty, maka secara otomatis akan menyalin seleksi. Jika kita telah menggunakan opsi "set mouse = a" di vim, pilih menggunakan Shift + Seret mouse untuk memilih teks secara otomatis. Perlu memeriksa jangka-X.

Amitesh Anand
sumber
0

em ... Terus menekan Shiftdan kemudian klik tombol mouse kanan

Levit
sumber
0

Saya tidak sengaja menjelaskan cara mematikan set mouse=a, ketika saya membaca kembali pertanyaan dan menemukan bahwa OP tidak ingin mematikannya di tempat pertama. Pokoknya bagi siapa pun yang mencari cara mematikan mouse ( set mouse=) secara terpusat, saya meninggalkan referensi untuk jawaban saya di sini: https://unix.stackexchange.com/a/506723/194822

Holger Böhnke
sumber
0

Memegang shift sambil menyalin dan menempel dengan seleksi bekerja untuk saya

Tito Kipkurgat
sumber
Inilah yang dikatakan jawaban yang diterima . Untuk berterima kasih kepada pengguna - setelah Anda memiliki reputasi seperti itu, Anda akan dapat mengunggah posting mereka.
Wai Ha Lee
0

Tambahkan set clipboard=unnamedke.vimrc . Jadi ia akan menggunakan register clipboard '*' alih-alih register tanpa nama untuk semua yank, hapus, ubah dan letakkan operasi (perhatikan itu tidak hanya mempengaruhi mouse).

Perilaku mendaftar '*' tergantung pada platform Anda dan bagaimana Anda vimtelah dikompilasi (atau jika Anda menggunakannyaneovim ).

Jika tidak berhasil, Anda dapat mencobanya set clipboard=unnamedplus, tetapi opsi ini hanya masuk akal pada sistem X11.

Jérôme Pouiller
sumber
-3

Dalam mode ESC, saat mengatur mouse = a, pilih teks menggunakan mouse. Ini akan mengaktifkan mode visual dalam vim. Kemudian Anda dapat menekan 'y' untuk menarik teks yang dipilih dan 'p' untuk menempelkannya di mana pun Anda inginkan. Ini hanya terjadi dalam vim.

Avishek
sumber
tidak ini tidak akan bekerja ketika Anda menempelkan di luar vim
barlop