ปิดใช้งานการสนับสนุนเมาส์ใน `vim 'ในสภาพแวดล้อม' gnome-terminal`


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รุ่น 2: 7.3.547-3 ถึงgnome-terminalเวอร์ชัน 3.4.1.1-1 คำสั่งต่อไปนี้ไม่ว่าจะดำเนินการโดยตรงในกลุ่มหรือเพิ่มลงใน.vimrcไฟล์ของฉันล้มเหลวในการปิดใช้งานการสนับสนุนเมาส์:

set mouse =
set mouse =""

จากการอ่านคู่มือ vim และโพสต์ออนไลน์คำสั่งเหล่านี้อย่างใดอย่างหนึ่งหรือทั้งสองควรทำงานได้ โดยเฉพาะอย่างยิ่งคู่มือ vim ระบุดังต่อไปนี้

'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

หากคุณชอบคุณสมบัติอื่น ๆ (เช่นการเน้นไวยากรณ์) ที่คุณได้รับจาก defaults.vim คุณสามารถใช้คำสั่งนี้แทนคำสั่งก่อนหน้านี้:

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

2
ขอขอบคุณ! แสดงความคิดเห็นออกบรรทัด "mouse -a" ในไฟล์ที่แก้ไขปัญหาสำหรับฉัน (บน
Archlinux

1
คุณไม่จำเป็นต้องแก้ไขไฟล์นั้น (ซึ่งเป็นส่วนหนึ่งของ vim-runtime บน archlinux) ตามที่ระบุไว้ในไฟล์นั้นจะถูกโหลดก็ต่อเมื่อไม่พบ vimrc นั่นหมายความว่าการวาง.vimrcไฟล์ในบ้านของคุณควรแก้ปัญหาได้ (สำหรับฉัน) มันไม่จำเป็นต้องมีอะไรเลยมันสามารถเป็นไฟล์เปล่าได้
lgpasquale

นี่เป็นทางออกที่แท้จริงสำหรับ Fedora 25
KamikazeCZ

ฉันยืนยันว่าสิ่งนี้ใช้ได้กับฉันใน Debian 8 ในช่วงปลายปี 2560
Criggie

1
@rlf ในความเห็นของฉันการแก้ไขไฟล์/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หากไม่มีไฟล์อยู่
Ulrich Dangel

2
@ user001 ah ความจริงที่ว่ามันไม่ทำงานเมื่อพิมพ์ลงในเซสชันปัจจุบันเป็นข้อมูลที่สำคัญ จากนี้ฉันไม่แน่ใจว่าเป็นกลุ่มที่เป็นปัญหา บางทีคำพังเพยอาจทำสิ่งที่น่ากลัว คุณลองใช้เครื่องจำลองเทอร์มินัลเครื่องอื่นได้หรือไม่?
แพทริค

สวัสดีคำแนะนำที่ดี ฉันลองxtermและไม่มีปัญหากับการเปิดใช้งานเมาส์ ฉันสามารถทำให้เกิดปัญหาอีกครั้งโดยการพิมพ์:set mouse=aในการvimทำงานในxterm(และย้อนกลับได้โดยการพิมพ์:set mouse=) ความคิดวิธีการแก้ไขปัญหาความgnome-terminalผิดพลาดใด ๆ ? ฉันควรเริ่มหัวข้อใหม่หรือไม่ ขอบคุณ
user001

9

ฉันพบสิ่งนี้ในแอพ "Terminal" ของฉันบนโฮสต์ Fedora Server 25 ฉันได้แก้ไขอย่างถาวรด้วยสิ่งนี้ใน. vimrc ของฉันด้วย:

set mouse=
set ttymouse=

ตอนนี้ฉันสามารถเลื่อนขึ้นไปถึงประวัติทุบตีก่อนหน้าของฉันใน scrollback ของเทอร์มินัลด้วยเมาส์ของฉัน


ขอแนะนำอย่างยิ่งให้สร้าง vimrc.local ในแคตตาล็อกเดียวกันเพราะ vimrc.local จะไม่ได้รับการอัปเดตหาก vim รับการอัปเดต
Orphans

มันใช้งานได้สำหรับฉันใน Raspbian 9.4 คำตอบอื่น ๆ ไม่ได้แก้ปัญหาพฤติกรรมของเมาส์ที่ไม่พึงประสงค์เมื่อฉันเข้าสู่ระบบผ่านทางพุตตี้
Dmitry

สำหรับคนอื่นที่กำลังตัดและวางโน้ต set ttymouse=มีพฤติกรรมที่แปลกสำหรับฉันเช่นทำให้เกิดพฤติกรรมของปุ่มลูกศร, ปุ่ม Escape เพื่อเปลี่ยน
mozboz

4

ฉันมีข้อร้องเรียนเหมือนกันกับคุณเกี่ยวกับความไวของ Vim ที่ใหม่กว่าต่อเมาส์ การใช้set mouse=""ไม่ได้ทำเพื่อฉันเช่นกัน

ฉันมีset mouse=c(ไม่มีเครื่องหมายคำพูด) ใกล้กับด้านล่างของ.vimrcไฟล์ ดูเหมือนว่าจะทำให้ Vim ไม่สามารถใช้เมาส์ยกเว้นเมื่อใช้ "PuTTY" เพื่อ ssh จากเครื่อง Windows ของฉัน (ugh!) ในที่ทำงาน ฉันต้องใช้ปุ่ม Shift-middle-button เพื่อวางใน PuTTY

2018-03-30 แก้ไข: ตอนนี้ฉันได้เริ่มใช้งาน: :mouse=(ไม่มีเครื่องหมายอัญประกาศหรืออะไร) ในอินสแตนซ์ของ vim (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 ในสภาพแวดล้อมที่ขั้ว คำตอบนี้แตกต่างจากคนอื่น ๆ ที่ต้องใช้ความพยายามเป็นพิเศษในการเพียงปิดการใช้งานเมาส์ในสภาพแวดล้อมที่ขั้วซึ่งคำถามที่ถามในขณะที่ปล่อยให้มันเปิดใช้งานใน gvim
hvd

@hvd ฉันพูดความคิดเห็นของฉันเล็กน้อยอย่างรุนแรง; ฉันขอโทษ. อย่างไรก็ตามคำตอบนี้จะทำให้บล็อกถ้าสิ่งที่ OP ได้พยายามแล้วดังนั้นจึงไม่น่าจะมีประโยชน์
GKFX

1
@GKFX Fair point และนำไปใช้กับคำตอบอื่นเช่นกัน
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โดย uncomment เส้นด้านบนลบตัวเลือกอื่น ๆ ทั้งหมดที่กำหนดโดยไฟล์นั้น ในการลบตัวเลือกที่ไม่ต้องการออกให้ใส่สิ่งต่อไปนี้/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บัญชีผู้ใช้ทุกบัญชี


ในที่สุดคำตอบของคุณก็ช่วยฉันแก้ปัญหาของฉันใน Debian 10 "Buster" ขอบคุณมาก.
aef

0

ค่อนข้างเกี่ยวข้องกับคำถามหากคุณใช้ neovim (nvim) คุณควรใส่ไฟล์กำหนดค่าset mouse=ของคุณ~/.config/nvim/init.vim

หากไม่มีไดเรกทอรีให้สร้างขึ้นด้วย mkdir -p ~/.config/nvim/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.