vô hiệu hóa hỗ trợ chuột trong `vim` trong môi trường` gnome-terminal`


47

Chỉnh sửa: Vấn đề của một con chuột được kích hoạt vimdường như là dành riêng cho gnome-terminal(phiên bản 3.4.1.1-1; Tôi đang sử dụng chế độ dự phòng gnome 3). Nếu tôi chạy xterm, hỗ trợ chuột trong vimbị tắt theo mặc định và tôi có tùy chọn để bật nó ( :set mouse=ađiều mà tôi không bao giờ làm) và vô hiệu hóa nó ( :set mouse=). Ngược lại, khi tôi chạy vimvào gnome-terminal, hỗ trợ chuột được bật theo mặc định và không thể tắt nó ( :set mouse=không có hiệu lực). Có một giải pháp ngắn thay đổi trình giả lập thiết bị đầu cuối?


Tôi muốn tắt hoàn toàn hỗ trợ chuột trong vim. Tôi đang chạy vimphiên bản 2: 7.3.547-3 đến gnome-terminalphiên bản 3.4.1.1-1. Các lệnh sau, cho dù được thực thi trực tiếp trong vim hoặc được thêm vào .vimrctệp của tôi , đều không thể tắt hỗ trợ chuột:

set mouse =
set mouse =""

Dựa trên việc đọc hướng dẫn vim và đăng bài trực tuyến, một hoặc cả hai lệnh này sẽ hoạt động. Cụ thể, hướng dẫn sử dụng vim nêu sau đây

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

Tôi đang sử dụng máy tính xách tay và mỗi lần tay tôi chạm vào bàn di chuột, vị trí con trỏ của tôi trong vim di chuyển đột ngột.

Câu trả lời:


29

Tôi đã tìm thấy nguyên nhân gây ra hành vi xấu này với nhiều hương vị linux:

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

đó là 'nguồn gốc' nếu không có ~/.vimrcnhưng ngay cả khi bạn có một tệp /etc/vimrcnhư vậy /etc, vì vậy nếu bạn không có một tệp nào, hãy tạo một tệp trống theo đề xuất của @lgpasquale:

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

Nếu bạn thích các tính năng khác (như tô sáng cú pháp) mà bạn nhận được từ defaults.vim, bạn có thể sử dụng lệnh này thay vì lệnh trước đó:

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

2
Cảm ơn bạn! Nhận xét dòng "mouse -a" trong tệp đó đã giải quyết vấn đề cho tôi (trên Archlinux)
luckyrumo

1
Bạn không cần phải chỉnh sửa tệp đó (là một phần của vim-runtime trên archlinux). Như đã nêu trong tệp đó, nó chỉ được tải nếu không tìm thấy vimrc. Điều đó có nghĩa là việc đặt một .vimrctập tin trong nhà của bạn sẽ giải quyết vấn đề (nó đã làm cho tôi). Nó không cần phải chứa bất cứ thứ gì, nó thậm chí có thể là một tập tin trống.
lgpasquale

Đây là giải pháp thực sự cho Fedora 25.
KamikazeCZ

Tôi xác nhận điều này hiệu quả với tôi trong Debian 8 vào cuối năm 2017.
Criggie

1
@rlf Theo tôi, chỉnh sửa một tệp theo /usr/share/đó được quản lý bởi trình quản lý gói của bạn là một ý tưởng tồi. Nếu bạn muốn giữ một số tùy chọn defaults.vim, tôi sẽ sao chép chúng vào ~/.vimrc.
lgpasquale

24

hỗ trợ chuột bị tắt theo mặc định, vì vậy một cái gì đó đang bật nó. Có khả năng lý do khiến bạn set mouse=thất bại là vì nó chạy trước khi bật bất cứ thứ gì. Tôi sẽ xem qua phần còn lại của vimrc của bạn và có thể là vimrc trên toàn hệ thống ( /etc/vim/vimrclà một vị trí tiêu chuẩn).

Như một phương sách cuối cùng, bạn có thể thực hiện bản hack thực sự xấu xí này, điều này sẽ khiến lệnh chạy như một trong những điều cuối cùng được thực hiện trước khi cho bạn quyền kiểm soát trình soạn thảo.

autocmd BufEnter * set mouse=

2
/etc/vim/vimrcTập tin của tôi khá trống ( runtime! debian.vimvà có điều kiện if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). Các /etc/vim/vimrc.localtập tin không tồn tại trên hệ thống của tôi. ~/.vimrcTập tin của tôi chỉ có một vài dòng mà tôi đã thêm bằng tay. Một stracesố vimtiết lộ rằng nó sẽ kiểm tra các địa điểm sau cho các tập tin cấu hình: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), và /home/user/.vimrc. (Tại sao tôi nhận được lỗi ENOENT; ifcâu lệnh không ngăn các nỗ lực mở tệp không tồn tại này?).
dùng001

Ngoài ra, nếu tôi nhập :set mouse=trực tiếp vào vim, không nên ghi đè bất kỳ cài đặt nào từ các tệp cấu hình? Tại sao thực hiện trực tiếp tuyên bố này trong khi vimkhông vô hiệu hóa điều khiển chuột?
dùng001

1
@ user001 Bạn thấy ENOENTvim phải kiểm tra xem tập tin có tồn tại không. Điều này thường được thực hiện bằng cách gọi stattrả về ENOENTnếu tệp không tồn tại.
Ulrich Dangel

2
@ user001 ah, thực tế là nó không hoạt động khi gõ vào phiên hiện tại là thông tin quan trọng. Dựa trên điều này, tôi không chắc đó là vấn đề. Có lẽ gnome-terminal đang làm điều gì đó thật kinh khủng. Bạn có thể thử một trình giả lập thiết bị đầu cuối khác nhau?
Patrick

Xin chào, đề nghị tốt. Tôi đã thử xtermvà không có vấn đề với kích hoạt chuột. Tôi có thể tái tạo vấn đề bằng cách gõ :set mouse=avào vimchạy xterm(và đảo ngược nó bằng cách gõ :set mouse=). Bất kỳ ý tưởng làm thế nào để khắc phục sự cố gnome-terminaltrục trặc? Tôi có nên bắt đầu một chủ đề mới? Cảm ơn.
dùng001

9

Tôi đã gặp vấn đề này trên ứng dụng OS X "Terminal" trên máy chủ Fedora Server 25. Tôi đã giải quyết nó vĩnh viễn bằng cái này trong .vimrc của tôi với:

set mouse=
set ttymouse=

Bây giờ tôi có thể cuộn lên lịch sử bash trước đây trong cuộn ngược của thiết bị đầu cuối bằng chuột.


Nó được khuyến khích mạnh mẽ để tạo ra một vimrc.local trong danh mục giống nhau, bởi vì sẽ không vimrc.local được cập nhật nếu vim get cập nhật
Trẻ em mồ côi

Nó làm việc cho tôi trên Raspbian 9.4. Các câu trả lời khác không giải quyết được hành vi chuột không mong muốn khi tôi đăng nhập qua PUTTY.
Dmitry

Đối với bất kỳ ai khác cắt và dán, ghi chú set ttymouse=có hành vi lạ đối với tôi, ví dụ như hành vi của các phím mũi tên, phím thoát để thay đổi.
mozboz

4

Tôi đã có khá nhiều phàn nàn giống như bạn về độ nhạy của Vim mới hơn đối với chuột. Sử dụng set mouse=""cũng không làm điều đó cho tôi.

Tôi có set mouse=c(không có dấu ngoặc kép) ở gần cuối .vimrctập tin của tôi . Điều đó dường như ngăn Vim sử dụng chuột, ngoại trừ khi sử dụng "PuTTY" để ssh in từ máy Windows (ugh!) Của tôi tại nơi làm việc. Tôi phải sử dụng nút shift giữa để dán trong PuTTY.

2018-03-30 Chỉnh sửa: Bây giờ tôi đã bắt đầu sử dụng: :mouse=(không có trích dẫn hoặc bất cứ điều gì) trên một số trường hợp từ xa (CentOS 6.7) của vim để loại bỏ các hiệu ứng chuột không mong muốn.


Xin chào, cảm ơn vì lời đề nghị. Tôi đã thêm nó vào .vimrctập tin của mình và thử thực hiện nó một cách tương tác ( :set mouse=c), nhưng không có ảnh hưởng nào trong trường hợp của tôi.
dùng001

3

Thêm phần này vào .vimrc:

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

1
Điều này không liên quan đến câu hỏi.
GKFX

@GKFX Bạn có chắc không? Có vẻ liên quan đến tôi. Lưu ý rằng has("gui_running")là 0 trong môi trường đầu cuối. Câu trả lời này, không giống như những câu hỏi khác, cần thêm nỗ lực để chỉ vô hiệu hóa chuột trong môi trường đầu cuối, câu hỏi đặt ra, trong khi để nó được kích hoạt trong gvim.
hvd

@hvd Tôi đã bình luận một cách gay gắt; Tôi xin lỗi. Tuy nhiên, câu trả lời này chỉ đặt một khối if xung quanh những gì OP đã thử, vì vậy nó không có ích.
GKFX

1
@GKFX Điểm công bằng và cũng áp dụng cho các câu trả lời khác.
hvd

3

Trên debian kéo dài một số cài đặt trung tâm được tải sau khi tải /etc/vim/vimrc/etc/vim/vimrc.local. Xem /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
...

Tập tin này mặc định /usr/share/vim/vim80/defaults.vim. Bây giờ thay đổi một tập tin trung tâm dưới /usr/share/...

  • Quỷ dữ
  • không cố định, nó được hoàn nguyên sau khi cập nhật

Cài đặt skip_defaults_vimbằng uncommentig dòng trên sẽ xóa tất cả các tùy chọn khác được đặt bởi tệp đó. Để loại bỏ các tùy chọn không mong muốn, hãy đặt như sau /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
"...

Việc này sẽ tải defaults.vimthủ công và tắt tải tự động, do đó cho bạn cơ hội hoàn nguyên mọi cài đặt không mong muốn mà không phải tạo .vimrctài khoản cho mọi tài khoản người dùng.


Câu trả lời của bạn cuối cùng đã cho tôi một giải pháp thực sự cho các vấn đề của tôi trong Debian 10 "Buster". Cảm ơn rất nhiều.
AEF

0

Hơi liên quan đến câu hỏi, nếu bạn đang sử dụng neovim (nvim), bạn nên đặt set mouse=vào ~/.config/nvim/init.vimtệp cấu hình của mình .

Nếu thư mục không tồn tại, hãy tạo nó với mkdir -p ~/.config/nvim/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.