एक `सूक्ति-टर्मिनल` वातावरण में` vim` में माउस समर्थन को अक्षम करना


47

संपादित करें: सक्षम माउस की समस्या vimविशिष्ट प्रतीत होती है gnome-terminal(संस्करण 3.4.1.1-1; मैं gnome 3 फ़ॉलबैक मोड का उपयोग कर रहा हूं)। यदि मैं चलाता हूं xterm, तो vimडिफ़ॉल्ट रूप से माउस समर्थन अक्षम है, और मेरे पास इसे सक्षम करने का विकल्प है ( :set mouse=a,, जो मैं कभी नहीं करता) और इसे अक्षम करता हूं ( :set mouse=)। इसके विपरीत, जब मैं चलाने vimमें gnome-terminal, माउस समर्थन डिफ़ॉल्ट रूप से सक्षम है और यह उसे निष्क्रिय करने के लिए संभव नहीं है ( :set mouse=कोई प्रभाव नहीं है)। क्या टर्मिनल एमुलेटर बदलने का समाधान कम है?


मैं माउस समर्थन को पूरी तरह से अक्षम करना चाहता हूं vim। मैं vimसंस्करण 3.4.1.1-1 के माध्यम से gnome-terminalसंस्करण 2: 7.3.547-3 चला रहा हूं। निम्नलिखित आदेश, चाहे वह सीधे vim में निष्पादित हो या मेरी .vimrcफ़ाइल में जोड़ा गया हो , माउस समर्थन को अक्षम करने में विफल:

set mouse =
set mouse =""

विम मैनुअल और पदों को ऑनलाइन पढ़ने के आधार पर, इनमें से एक या दोनों कमांड को काम करना चाहिए। विशेष रूप से, विम मैनुअल निम्नलिखित बताता है

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

मैं एक लैपटॉप का उपयोग कर रहा हूं और हर बार जब मेरा हाथ ट्रैकपैड को ब्रश करता है, तो मेरे कर्सर की स्थिति अचानक बढ़ जाती है।

जवाबों:


29

मैंने पाया है कि कई लिनक्स स्वादों के साथ यह बुरा व्यवहार क्या है:

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

~/.vimrcयदि आपके पास /etc/vimrcया ऐसी कोई /etcफ़ाइल है, तो भी यह 'खट्टा' है , इसलिए यदि आपके पास कोई खाली जगह नहीं है जैसा कि @lgpasquale द्वारा सुझाया गया है:

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

यदि आपको अन्य विशेषताएं पसंद हैं (जैसे सिंटैक्स हाइलाइटिंग) जो आपको डिफॉल्ट्स से मिली है। तो, आप पिछले एक के बजाय इस कमांड का उपयोग कर सकते हैं:

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

2
धन्यवाद! उस फाइल में लाइन "माउस-ए" पर टिप्पणी करते हुए मेरे लिए (आर्कलिनक्स पर) समस्या हल हो गई
भाग्य

1
आपको उस फ़ाइल को संपादित करने की आवश्यकता नहीं है (जो आर्चलिनक्स पर vim-runtime का हिस्सा है)। जैसा कि उस फ़ाइल में बताया गया है, यह केवल तभी लोड होता है जब कोई vimrc नहीं मिलता है। इसका मतलब है कि .vimrcआपके घर में एक फ़ाइल रखने से समस्या का समाधान होना चाहिए (यह मेरे लिए था)। इसमें कुछ भी शामिल करने की आवश्यकता नहीं है, यह एक खाली फ़ाइल भी हो सकती है।
lgpasquale

यह फेडोरा 25 के लिए वास्तविक समाधान है
KamikazeCZ

मैं इस बात की पुष्टि करता हूं कि 2017 के अंत में डेबियन 8 में मेरे लिए काम किया।
क्रैगी

1
@ मेरे विचार में एक फ़ाइल संपादित करना /usr/share/जिसके तहत आपके पैकेज मैनेजर द्वारा प्रबंधित किया जाता है एक बुरा विचार है। यदि आप कुछ विकल्प रखना चाहते हैं defaults.vim, तो मैं उन्हें कॉपी करूंगा ~/.vimrc
lgpasquale

24

माउस का समर्थन डिफ़ॉल्ट रूप से अक्षम है, इसलिए कुछ इसे चालू कर रहा है। संभवत: आपके set mouse=असफल होने का कारण यह है कि जो भी इसे चालू कर रहा है उससे पहले यह चल रहा है। मैं आपके बाकी vimrc के माध्यम से देखूंगा, और संभवत: सिस्टम वाइड vimrc ( /etc/vim/vimrcयह एक मानक स्थान है)।

अंतिम उपाय के रूप में, आप यह वास्तव में बदसूरत हैक कर सकते हैं, जो आपको संपादक को नियंत्रण देने से पहले किए गए अंतिम चीजों में से एक के रूप में चलाने का आदेश देगा।

autocmd BufEnter * set mouse=

2
मेरी /etc/vim/vimrcफ़ाइल बहुत नंगे ( runtime! debian.vimऔर एक सशर्त if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif) है। /etc/vim/vimrc.localफ़ाइल अपने सिस्टम पर मौजूद नहीं है। मेरी ~/.vimrcफ़ाइल में केवल कुछ पंक्तियाँ हैं जिन्हें मैंने मैन्युअल रूप से जोड़ा है। एक straceका vimपता चलता है कि यह config फ़ाइलों के लिए निम्न स्थानों की जाँच करता है: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), और /home/user/.vimrc। (मैं ENOENT त्रुटि क्यों प्राप्त करूं? क्या यह ifकथन इस गैर-मौजूद फ़ाइल को खोलने के प्रयासों को नहीं रोकता है?)।
user001

इसके अलावा, अगर मैं :set mouse=सीधे विम में टाइप करता हूं, तो क्या यह कॉन्फिग फाइल से किसी भी सेटिंग को ओवरराइड नहीं करना चाहिए? vimमाउस नियंत्रण को अक्षम नहीं करने के भीतर इस कथन का प्रत्यक्ष निष्पादन क्यों होगा ?
user001

1
@ user001 यदि आप देखें ENOENTकि फ़ाइल मौजूद है तो vim को जांचना होगा। यह आम तौर पर कॉल करके किया जाता है statजो ENOENTफ़ाइल मौजूद नहीं होने पर वापस लौटता है।
उलरिच डैंगेल

2
@ user001 आह, तथ्य यह है कि यह काम नहीं करता है जब मौजूदा सत्र में टाइप किया महत्वपूर्ण जानकारी है। इसके आधार पर, मुझे यकीन नहीं है कि यह समस्या है। शायद सूक्ति-टर्मिनल कुछ भयानक कर रहा है। क्या आप एक अलग टर्मिनल एमुलेटर की कोशिश कर सकते हैं?
पैट्रिक

नमस्ते, अच्छा सुझाव। मैंने कोशिश की xtermऔर माउस सक्रियण में कोई समस्या नहीं थी। मैं टाइपिंग द्वारा समस्या को पुन: हो सकता है :set mouse=aमें vimमें चल रहा xtermहै (और टाइपिंग द्वारा यह रिवर्स :set mouse=)। किसी भी विचार कैसे gnome-terminalगड़बड़ का निवारण करने के लिए ? क्या मुझे एक नया सूत्र शुरू करना चाहिए? धन्यवाद।
12001 पर user001

9

मैंने फेडोरा सर्वर 25 होस्ट पर अपने ओएस एक्स "टर्मिनल" ऐप पर इसे चलाया। मैंने इसे अपने .vimrc के साथ स्थायी रूप से हल कर लिया है:

set mouse=
set ttymouse=

अब मैं अपने पिछले बैश इतिहास को अपने माउस के साथ अपने टर्मिनल के स्क्रॉलबैक में स्क्रॉल कर सकता हूं।


यह एक ही सूची में एक vimrc.local बनाने के लिए दृढ़ता से अनुशंसा की जाती है, क्योंकि vimrc.local अभ्यस्त अद्यतन नहीं किया जाता है अगर vim अपडेट प्राप्त होता है
Orphans

इसने मेरे लिए रास्पियन 9.4 पर काम किया। जब मैं PUTTY से लॉग इन करता हूं, तो अन्य उत्तरों ने अवांछित माउस व्यवहार को हल नहीं किया।
दिमित्री

किसी और को काटने और चिपकाने के लिए, नोट set ttymouse=में मेरे लिए अजीब व्यवहार था, उदाहरण के लिए तीर कुंजी का व्यवहार, बदलने के लिए भागने की कुंजी।
मौजबोझ

4

मेरे पास माउस की नई विम की संवेदनशीलता के बारे में बहुत अधिक शिकायतें थीं। का उपयोग करना set mouse=""मेरे लिए, या तो नहीं किया।

मेरे पास set mouse=c(कोई उद्धरण नहीं) मेरी .vimrcफ़ाइल के नीचे है । ऐसा लगता है कि विम का उपयोग माउस से करने के लिए किया गया था, सिवाय इसके जब मेरे (उघ!) विंडोज मशीन में काम करने के लिए "पुटी" का उपयोग किया गया था। मुझे PuTTY में पेस्ट करने के लिए शिफ्ट-मिडिल-बटन का उपयोग करना होगा।

2018-03-30 संपादित करें: मैंने अब उपयोग करना शुरू कर दिया है: :mouse=(कुछ उद्धरण या कुछ भी नहीं) कुछ रिमोट (CentOS 6.7) उदाहरणों पर अवांछित माउस प्रभाव से छुटकारा पाने के लिए।


नमस्ते, सुझाव के लिए धन्यवाद। मैंने इसे अपनी .vimrcफ़ाइल में जोड़ा और इसे संवादात्मक रूप से निष्पादित करने की कोशिश की ( :set mouse=c), लेकिन न तो मेरे मामले में कोई प्रभाव पड़ा।
user001

3

इसे अपने में जोड़ें .vimrc:

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

1
यह पूछे गए प्रश्न की कोई प्रासंगिकता नहीं है।
GKFX

@GKFX क्या आपको यकीन है? यह मेरे लिए प्रासंगिक लगता है। ध्यान दें कि has("gui_running")एक टर्मिनल वातावरण में 0 है। यह उत्तर, दूसरों के विपरीत, केवल टर्मिनल वातावरण में माउस को अक्षम करने के लिए अतिरिक्त प्रयास करता है, जो कि सवाल पूछता है, जबकि इसे छोड़ना सक्षम है।
hvd

@hvd मैंने अपनी टिप्पणी को थोड़ा कठोर बताया; मैं क्षमाप्रार्थी हूं। हालाँकि, यह जवाब सिर्फ एक अगर ब्लॉक के आसपास डालता है जो ओपी ने पहले से ही कोशिश की थी, तो यह मददगार होने की संभावना नहीं है।
GKFX

1
@GKFX फेयर पॉइंट, और अन्य उत्तरों पर भी लागू होता है।
hvd

3

डेबियन खिंचाव पर कुछ केंद्रीय सेटिंग्स लोड होने के बाद लोड होती हैं /etc/vim/vimrcऔर /etc/vim/vimrc.local। देखें /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
...

यह फाइल डिफॉल्ट करती है /usr/share/vim/vim80/defaults.vim। अब के तहत एक केंद्रीय फ़ाइल को बदलना /usr/share/...है

  • बुराई
  • गैर-स्थायी, यह एक अद्यतन के बाद वापस हो जाता है

skip_defaults_vimउपरोक्त लाइन को अनकम्प्रेनिग करके सेटिंग उस फाइल के द्वारा सेट किए गए अन्य सभी विकल्पों को हटा देती है। अनचाहे विकल्पों को हटाने के लिए निम्नलिखित बातों पर ध्यान दें /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
"...

यह defaults.vimमैन्युअल रूप से लोड होता है और स्वचालित लोडिंग को बंद कर देता है, इस प्रकार आपको .vimrcप्रत्येक उपयोगकर्ता खाते के लिए बनाए बिना, किसी भी अवांछित सेटिंग्स को वापस करने का मौका देता है ।


आपके जवाब ने आखिरकार मुझे डेबियन 10 "बस्टर" में मेरी समस्याओं का वास्तविक समाधान दिया। बहुत बहुत धन्यवाद।
अनफ

0

कुछ हद तक सवाल से संबंधित है, यदि आप neovim (nvim) का उपयोग कर रहे हैं, तो आपको set mouse=अपनी ~/.config/nvim/init.vimकॉन्फ़िगरेशन फ़ाइल में रखना चाहिए ।

यदि निर्देशिका मौजूद नहीं है, तो इसे बनाएं mkdir -p ~/.config/nvim/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.