menonaktifkan dukungan mouse di `vim` di lingkungan` gnome-terminal`


47

Sunting: Masalah mouse yang diaktifkan di vimtampaknya khusus untuk gnome-terminal(versi 3.4.1.1-1; Saya menggunakan mode fallback gnome 3). Jika saya menjalankan xterm, dukungan mouse dalam vimdinonaktifkan secara default, dan saya memiliki opsi untuk mengaktifkannya ( :set mouse=a, yang tidak pernah saya lakukan) dan menonaktifkannya ( :set mouse=). Sebaliknya, ketika saya menjalankan vimdi gnome-terminal, dukungan mouse diaktifkan secara default dan tidak mungkin untuk menonaktifkannya ( :set mouse=tidak berpengaruh). Apakah ada solusi untuk mengganti emulator terminal?


Saya ingin sepenuhnya menonaktifkan dukungan mouse di vim. Saya menjalankan vimversi 2: 7.3.547-3 hingga gnome-terminalversi 3.4.1.1-1. Perintah-perintah berikut, apakah dijalankan secara langsung dalam vim atau ditambahkan ke .vimrcfile saya , gagal menonaktifkan dukungan mouse:

set mouse =
set mouse =""

Berdasarkan membaca manual vim dan posting online, satu atau kedua perintah ini harus berfungsi. Secara khusus, manual vim menyatakan yang berikut ini

'mouse'                 string  (default "", "a" for GUI, MS-DOS and Win32)
    The mouse can be enabled for different modes:
            n       Normal mode
            v       Visual mode
            i       Insert mode
            c       Command-line mode
            h       all previous modes when editing a help file
            a       all previous modes
            r       for |hit-enter| and |more-prompt| prompt 
    Normally you would enable the mouse in all four modes with: >
            :set mouse=a
    When the mouse is not enabled, the GUI will still use the mouse for
    modeless selection.  This doesn't move the text cursor.

Saya menggunakan laptop dan setiap kali tangan saya menyentuh trackpad, posisi kursor saya dalam gerakan tiba-tiba bergerak.

Jawaban:


29

Saya telah menemukan apa yang menyebabkan perilaku buruk ini dengan banyak rasa linux:

/usr/share/vim/vim80/defaults.vim # may be "vim81" depending on your vim version

itu 'bersumber' jika tidak ada ~/.vimrctetapi bahkan jika Anda memiliki file /etc/vimrcatau itu /etc, jadi jika Anda tidak punya, cukup buat yang kosong seperti yang disarankan oleh @lgpasquale:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || :> ~/.vim/vimrc

Jika Anda menyukai fitur lain (seperti penyorotan sintaks) yang Anda dapatkan dari defaults.vim, Anda dapat menggunakan perintah ini daripada yang sebelumnya:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || echo -e "source /usr/share/vim/vim80/defaults.vim\nset mouse=" > ~/.vim/vimrc

2
Terima kasih! Mengomentari baris "mouse -a" di file itu memecahkan masalah bagi saya (di Archlinux)
luckyrumo

1
Anda tidak perlu mengedit file itu (yang merupakan bagian dari vim-runtime di archlinux). Seperti yang dinyatakan dalam file itu, hanya dimuat jika tidak ditemukan vimrc. Itu berarti menempatkan .vimrcfile di rumah Anda harus menyelesaikan masalah (itu bagi saya). Tidak perlu mengandung apa pun, bahkan bisa berupa file kosong.
lgpasquale

Ini adalah solusi nyata untuk Fedora 25.
KamikazeCZ

Saya mengkonfirmasi ini bekerja untuk saya di Debian 8 pada akhir 2017.
Criggie

1
@rlf Menurut pendapat saya, mengedit file /usr/share/yang dikelola oleh manajer paket Anda adalah ide yang buruk. Jika Anda ingin menyimpan beberapa opsi defaults.vim, saya akan menyalinnya ~/.vimrc.
lgpasquale

24

dukungan mouse dinonaktifkan secara default, jadi ada sesuatu yang menyalakannya. Kemungkinan alasan Anda set mouse=gagal adalah karena itu berjalan sebelum apa pun yang menyalakannya. Saya akan melihat-lihat sisa vimrc Anda, dan mungkin vimrc lebar sistem ( /etc/vim/vimrcadalah lokasi standar).

Sebagai upaya terakhir, Anda dapat melakukan peretasan yang sangat buruk ini yang akan menyebabkan perintah dijalankan sebagai salah satu hal terakhir yang dilakukan sebelum memberi Anda kendali atas editor.

autocmd BufEnter * set mouse=

2
/etc/vim/vimrcFile saya cukup telanjang ( runtime! debian.vimdan kondisional if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). The /etc/vim/vimrc.localfile tidak ada pada sistem saya. ~/.vimrcFile saya hanya memiliki beberapa baris yang telah saya tambahkan secara manual. Sebuah straceof vimmengungkapkan bahwa itu memeriksa lokasi berikut untuk file konfigurasi: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), dan /home/user/.vimrc. (Mengapa saya menerima kesalahan ENOENT; bukankah ifpernyataan itu mencegah upaya untuk membuka file yang tidak ada ini?).
user001

Juga, jika saya mengetik :set mouse=langsung dalam vim, tidakkah ini mengesampingkan pengaturan apa pun dari file konfigurasi? Mengapa eksekusi langsung pernyataan ini vimtidak menonaktifkan kontrol mouse?
user001

1
@ user001 Anda melihat ENOENTvim harus memeriksa apakah file ada. Ini biasanya dilakukan dengan memanggil statyang mengembalikan ENOENTjika file tidak ada.
Ulrich Dangel

2
@ user001 ah, fakta bahwa itu tidak berfungsi ketika diketik ke dalam sesi saat ini adalah info penting. Berdasarkan ini, saya tidak yakin itu masalahnya. Mungkin gnome-terminal melakukan sesuatu yang mengerikan. Bisakah Anda mencoba emulator terminal yang berbeda?
Patrick

Hai, saran yang bagus. Saya mencoba xtermdan tidak punya masalah dengan aktivasi mouse. Saya bisa mereproduksi masalah dengan mengetik :set mouse=adalam vimmenjalankan xterm(dan membalikkannya dengan mengetik :set mouse=). Ada yang tahu bagaimana cara mengatasi masalah gnome-terminal? Haruskah saya memulai utas baru? Terima kasih.
user001

9

Saya mengalami ini pada aplikasi OS X "Terminal" pada host Fedora Server 25. Saya telah menyelesaikannya secara permanen dengan ini di .vimrc saya dengan:

set mouse=
set ttymouse=

Sekarang saya dapat menggulir ke riwayat bash saya sebelumnya di scrollback terminal saya dengan mouse saya.


Sangat disarankan untuk membuat vimrc.local di katalog yang sama, karena vimrc.local tidak akan diperbarui jika vim mendapatkan pembaruan
Anak Yatim

Ini bekerja untuk saya di Raspbian 9.4. Jawaban lain tidak menyelesaikan perilaku mouse yang tidak diinginkan ketika saya masuk melalui PUTTY.
Dmitry

Untuk orang lain yang memotong dan menempel, note set ttymouse=memiliki perilaku aneh untuk saya, misalnya perilaku yang disebabkan tombol panah, tombol escape untuk berubah.
mozboz

4

Saya memiliki keluhan yang hampir sama dengan Anda tentang sensitivitas Vim yang lebih baru terhadap mouse. Menggunakan set mouse=""juga tidak melakukannya untuk saya.

Saya memiliki set mouse=c(tanpa tanda kutip) dekat dengan bagian bawah .vimrcfile saya . Itu sepertinya membuat Vim tidak menggunakan mouse, kecuali saat menggunakan "Putty" untuk ssh in dari (Windows) mesin Windows saya di tempat kerja. Saya harus menggunakan shift-tombol tengah untuk menempelkan di Putty.

Sunting 2018-03-30: Saya sekarang sudah mulai menggunakan: :mouse=(tidak ada tanda kutip atau apa pun) pada beberapa contoh remote (CentOS 6.7) vim untuk menghilangkan efek mouse yang tidak diinginkan.


Hai, terima kasih atas sarannya. Saya menambahkan ini ke .vimrcfile saya dan mencoba menjalankannya secara interaktif ( :set mouse=c), tetapi tidak ada yang berpengaruh dalam kasus saya.
user001

3

Tambahkan ini ke Anda .vimrc:

if has("gui_running")
    "echo "yes, we have a GUI"
    set mouse=a
else
    "echo "Boring old console"
    set mouse=
endif

1
Ini tidak ada hubungannya dengan pertanyaan yang diajukan.
GKFX

@GKFX Anda yakin? Itu terlihat relevan bagi saya. Perhatikan bahwa has("gui_running")0 di lingkungan terminal. Jawaban ini, tidak seperti yang lain, membutuhkan usaha ekstra untuk hanya menonaktifkan mouse di lingkungan terminal, yang ditanyakan, sambil membiarkannya diaktifkan di gvim.
hvd

@ hvd Saya mengucapkan komentar saya agak kasar; Saya minta maaf. Namun, jawaban ini hanya menempatkan blok if di sekitar apa yang sudah dicoba OP, jadi sepertinya tidak akan membantu.
GKFX

1
@GKFX Fair point, dan berlaku untuk jawaban lain juga.
hvd

3

Pada debian stretch, beberapa pengaturan pusat dimuat setelah memuat /etc/vim/vimrcdan /etc/vim/vimrc.local. Lihat /etc/vim/vimrc:

...
" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc.
" This happens after /etc/vim/vimrc(.local) are loaded, so it will override
" any settings in these files.
" If you don't want that to happen, uncomment the below line to prevent
" defaults.vim from being loaded.
"let g:skip_defaults_vim = 1
...

File ini default ke /usr/share/vim/vim80/defaults.vim. Sekarang mengubah file sentral bawah /usr/share/...yaitu

  • jahat
  • tidak permanen, itu akan dikembalikan setelah pembaruan

Pengaturan skip_defaults_vimdengan menghapus komentar pada baris di atas menghapus semua opsi lain yang ditetapkan oleh file itu. Untuk hanya menghapus opsi yang tidak diinginkan masukkan yang berikut ini ke /etc/vimrc.local:

" /etc/vim/vimrc.local
" honor skip_defaults_vim from the master /etc/vim/vimrc file
if ! exists('skip_defaults_vim')
  " Source the defaults file manually from here
  source $VIMRUNTIME/defaults.vim
endif

" avoid loading the defaults twice
let g:skip_defaults_vim = 1

" revert any unwanted changes the defaults file introduced
set mouse=

" set any other options you want centrally on your system
"set paste " uncomment if you want paste insert enabled
"...

Ini memuat defaults.vimsecara manual dan mematikan pemuatan otomatis, sehingga memberi Anda kesempatan untuk mengembalikan pengaturan yang tidak diinginkan, tanpa harus membuat .vimrcuntuk setiap akun pengguna.


Jawaban Anda akhirnya memberi saya solusi nyata untuk masalah saya di Debian 10 "Buster". Terima kasih banyak.
aef

0

Agak terkait dengan pertanyaan, jika Anda menggunakan neovim (nvim) Anda harus memasukkan file konfigurasi set mouse=Anda ~/.config/nvim/init.vim.

Jika direktori tidak ada, buat dengan mkdir -p ~/.config/nvim/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.