bir gnome-terminal `ortamında vim`de fare desteğini devre dışı bırakma


47

Düzenleme: Etkin bir farenin sorunu vimkendine özgü görünüyor gnome-terminal(sürüm 3.4.1.1-1; gnome 3 geri dönüş modu kullanıyorum). Çalıştırırsam xterm, fare desteği vimvarsayılan olarak devre dışı bırakılır ve etkinleştirme ( :set mouse=ahiçbir zaman yapmadığım) ve devre dışı bırakma ( :set mouse=) özelliğini devre dışı bırakma seçeneğim vardır . Ben çalıştırdığınızda aksine, vimiçinde gnome-terminal, (fare desteği varsayılan olarak etkindir ve devre dışı bırakmak mümkün değildir :set mouse=herhangi bir etkisi yoktur). Terminal emülatörünü değiştirmenin bir çözümü yok mu?


Fare desteğini tamamen devre dışı bırakmak istiyorum vim. Ben koşuyorum vimaracılığıyla 7.3.547-3: sürüm 2 gnome-terminalsürümü 3.4.1.1-1. Aşağıdaki komutlar, doğrudan vim ile çalıştırılmış veya dosyama eklenmiş olsun .vimrc, fare desteğini devre dışı bırakmaz:

set mouse =
set mouse =""

Jant kılavuzunu ve çevrimiçi yayınları okumaya dayanarak, bu komutlardan birinin veya her ikisinin çalışması gerekir. Özellikle, vim el kitabı aşağıdakileri belirtir

'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.

Bir dizüstü bilgisayar kullanıyorum ve elim hareket tuşunu her fırçaladığında, vim'deki imleç konumum aniden hareket ediyor.

Yanıtlar:


29

Bu kötü davranışa neyin sebep olduğunu birçok linux lezzetinde buldum:

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

~/.vimrceğer /etc/vimrcböyle bir /etcdosyaya sahip olmasanız bile, hiçbiri yoksa 'kaynaklı' dır, bu nedenle bir tane yoksa, @lgpasquale tarafından önerilen şekilde boş bir dosya oluşturun:

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

Defaults.vim'den aldığınız diğer özellikleri (sözdizimi vurgulama gibi) beğendiyseniz, öncekinden çok bu komutu kullanabilirsiniz:

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

2
Teşekkür ederim! Bu dosyadaki "mouse -a" satırını yorumlamak benim için sorunu çözdü (
Archlinux'da

1
Bu dosyayı düzenlemeniz gerekmez (bu, archlinux'daki vim-runtime'ın bir parçasıdır). Bu dosyada belirtildiği gibi, sadece vimrc bulunmadığında yüklenir. Bu .vimrc, evinize bir dosya yerleştirmenin sorunu çözmesi gerektiği anlamına gelir (benim için yaptım). Hiçbir şey içermesi gerekmez, hatta boş bir dosya olabilir.
lgpasquale

Bu, Fedora 25 için gerçek bir çözümdür.
KamikazeCZ

Bunun benim için 2017 yılının sonlarında Debian 8'de çalıştığını onaylıyorum.
Criggie

1
@ rlf Bence /usr/share/paket yöneticiniz tarafından yönetilen bir dosyayı düzenlemek kötü bir fikir. Bazı seçeneklerin içeride kalmasını istiyorsanız defaults.vimbunları kopyalarım ~/.vimrc.
lgpasquale

24

fare desteği varsayılan olarak devre dışıdır, bu nedenle bir şey açmaktadır. Muhtemelen set mouse=başarısız olmanızın sebebi , açmadan önce çalışıyor olması. Vimrc'nizin geri kalanını ve muhtemelen sistem çapında vimrc'yi ( /etc/vim/vimrcstandart bir konumdur) bakardım .

Son çare olarak, bu gerçekten çirkin kesmeyi yapabilirsiniz, bu da komutun editörün kontrolünü size vermeden önce yapılan son şeylerden biri olarak çalışmasını sağlar.

autocmd BufEnter * set mouse=

2
Benim /etc/vim/vimrcdosya oldukça çıplak (olduğunu runtime! debian.vimve şartlı if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). /etc/vim/vimrc.localDosya sistemimde yok. Dosyamda ~/.vimrcyalnızca el ile eklediğim birkaç satır var. Bir straceof vim: config dosyaları için aşağıdaki konumları denetler ortaya koymaktadır /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ) ve /home/user/.vimrc. (ENOENT hatasını neden alıyorum; ififadesi var olmayan bu dosyayı açma girişimlerini engellemiyor mu?).
user001,

Ayrıca, :set mouse=doğrudan vim yazarsanız, bu, config dosyalarından herhangi bir ayarı geçersiz kılmamalı mı? Neden bu ifadenin yürütülmesini doğrudan vimfare kontrolünü devre dışı bırakmıyorsunuz ?
user001, 02

1
@ user001 As vim'in ENOENTdosyanın olup olmadığını kontrol etmesi gerektiğini görürsünüz . Bu genellikle dosya yoksa statdöndüren çağrının yapılmasıyla yapılır ENOENT.
Ulrich Dangel

2
@ user001 ah, şu anki oturuma yazıldığında çalışmadığı gerçeği kritik bilgidir. Buna dayanarak, sorunun vim olduğundan emin değilim. Belki GNOME terminalinde korkunç bir şey var. Farklı bir terminal emülatörü deneyebilir misiniz?
Patrick

Merhaba, iyi öneri. Denedim xtermve fare aktivasyonu ile ilgili herhangi bir sorun yaşamadım. Ben yazarak sorunu yeniden olabilir :set mouse=ade vimçalışan xterm(ve yazarak bunu tersine :set mouse=). gnome-terminalAksaklığı gidermek için herhangi bir fikir ? Yeni bir konu başlatmalı mıyım? Teşekkürler.
user001,

9

Fedora Server 25 ana bilgisayarındaki OS X "Terminal" uygulamasında bununla karşılaştım. .Vimrc ile bununla kalıcı olarak çözdüm:

set mouse=
set ttymouse=

Artık terminalimdeki geri farede önceki bash geçmişime kadar faremle ilerleyebilirim.


Aynı katalogda bir vimrc.local oluşturulması şiddetle tavsiye edilir, çünkü vim güncellemeleri alırsa vimrc.local güncellenmeyecektir
Yetimler

Benim için Raspbian 9.4'te çalıştı. PUTTY üzerinden oturum açtığımda diğer cevaplar istenmeyen fare davranışlarını çözmedi.
Dmitry

Kesme ve yapıştırma işleminde başkası için notun set ttymouse=benim için tuhaf davranışı vardı, örneğin ok tuşlarının davranışına, kaçış anahtarının değişmesine neden oldu.
mozboz

4

Yeni Vim'in fareye duyarlılığı hakkında seninle aynı şikayetlerim vardı. Kullanmak set mouse=""da benim için yapmadı.

set mouse=cDosyamın altına yakın (tırnak yok) var .vimrc. Bu, işimdeki (Windows) makinemden ssh için "PuTTY" kullanılmasının haricinde, Vim'in fareyi kullanmasını engelliyor gibiydi. PuTTY'ye yapıştırmak için shift-orta düğmesini kullanmam gerekiyor.

2018-03-30 Düzenleme: :mouse=İstenmeyen fare etkilerinden kurtulmak için bazı uzaktan kumandalarda (CentOS 6.7) vim örnekleri kullanmaya başladım (tırnak işaretleri veya herhangi bir şey).


Merhaba, öneri için teşekkürler. Bunu dosyama ekledim .vimrcve etkileşimli olarak çalıştırmayı denedim ( :set mouse=c), ancak benim durumumda hiçbir etkisi olmadı.
user001,

3

Şunu da ekle .vimrc:

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

1
Bu sorulan soru ile alakası yok.
GKFX

@GKFX Emin misiniz? Benimle alakalı görünüyor. has("gui_running")Terminal ortamında 0 olduğunu unutmayın . Bu cevap, diğerlerinden farklı olarak , fareyi yalnızca soruyu sorarken, gvim'de etkin halde bırakarak bir uçbirim ortamında devre dışı bırakmak için ekstra çaba gösterir .
hvd

@hvd Yorumumu biraz sert anlattım; Özür dilerim. Bununla birlikte, bu cevap sadece OP'nin daha önce denemiş olduğu şeyin etrafına bir if blok koyuyor, bu yüzden yardımcı olması mümkün değil.
GKFX

1
@GKFX Adil nokta ve diğer cevaplar için de geçerlidir.
hvd

3

Debian stretch'de bazı merkezi ayarlar yüklendikten sonra yüklenir /etc/vim/vimrcve /etc/vim/vimrc.local. Bakınız /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
...

Bu dosya varsayılan olarak /usr/share/vim/vim80/defaults.vim. Şimdi altında merkezi bir dosya değiştirerek /usr/share/...DİR

  • kötülük
  • kalıcı değildir, güncellemeden sonra geri döndürülür

Ayar skip_defaults_vimyukarıdaki çizgiyi uncommentig tarafından bu dosya tarafından belirlenen diğer bütün seçenekleri kaldırır. İstenmeyen seçenekleri sadece kaldırmak için aşağıdakileri yapın /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
"...

Bu, defaults.vimmanuel olarak yüklenir ve otomatik yüklemeyi kapatır, böylece .vimrcher kullanıcı hesabı için bir tane oluşturmanıza gerek kalmadan, istenmeyen ayarları geri alma şansı verir .


Cevabınız nihayet bana Debian 10 "Buster" konusundaki problemlerime gerçek bir çözüm getirdi. Çok teşekkürler.
aef

0

Bir miktar soru ile ilgili olarak, neovim (nvim) kullanıyorsanız set mouse=, ~/.config/nvim/init.vimyapılandırma dosyanıza eklemelisiniz .

Dizin yoksa, ile oluşturun. mkdir -p ~/.config/nvim/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.