відключення підтримки миші у `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. Наступні команди, виконані безпосередньо в vim або додані до мого .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.

Я використовую ноутбук, і кожен раз, коли моя рука чистить трекпад, положення мого курсору у vim різко рухається.

Відповіді:


29

Я виявив, що спричиняє таку погану поведінку у багатьох смаках Linux:

/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
Дякую! Коментуючи рядок "миша -а" у цьому файлі, вирішено проблему для мене (в Archlinux)
luckyrumo

1
Вам не потрібно редагувати цей файл (який є частиною vim-runtime в archlinux). Як зазначено у цьому файлі, він завантажується лише у тому випадку, якщо не знайдено vimrc. Це означає, що розміщення .vimrcфайлу у вашому будинку повинно вирішити проблему (це зробило для мене). Він не повинен містити нічого, це може бути навіть порожній файл.
lgpasquale

Це справжнє рішення для Fedora 25.
KamikazeCZ

Я підтверджую, що це спрацювало для мене в Debian 8 наприкінці 2017 року
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показує , що він перевіряє наступні місця для конфігураційних файлів: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), і /home/user/.vimrc. (Чому я отримую помилку ENOENT; чи не ifзапобігає заяві спроби відкрити цей неіснуючий файл?).
user001

Крім того, якщо я ввожу :set mouse=безпосередньо vim, чи не повинен це змінювати будь-які налаштування з конфігураційних файлів? Чому б пряме виконання цього оператора в межах vimне відключити контроль миші?
user001

1
@ user001 Ви бачите, що ENOENTvim повинен перевірити, чи файл існує. Зазвичай це робиться за допомогою виклику, statякий повертається, ENOENTякщо файл не існує.
Ульріх Дангел

2
@ user001 ах, той факт, що він не працює при введенні в поточний сеанс, є важливою інформацією. Виходячи з цього, я не впевнений, що це проблема vim. Можливо, gnome-terminal робить щось жахливе. Чи можете ви спробувати інший термінальний емулятор?
Патрік

Привіт, гарна пропозиція. Я спробував xtermі не мав проблем з активацією миші. Я міг би відтворити проблему, набравши :set mouse=aпри vimзапуску xterm(і змінити її, ввівши :set mouse=). Будь-яка ідея, як усунути несправності gnome-terminal? Чи варто починати нову нитку? Дякую.
user001

9

Я зіткнувся з цим у своєму додатку OS X "Термінал" на хості Fedora Server 25. Я назавжди вирішив це з цим у своєму .vimrc за допомогою:

set mouse=
set ttymouse=

Тепер я можу прокручувати до своєї попередньої історії баш-файлу в прокрутці мого терміналу мишкою.


Настійно рекомендується створити vimrc.local у тому ж каталозі, оскільки vimrc.local не буде оновлено, якщо vim отримає оновлення
Сиротам

Це працювало для мене на Raspbian 9.4. Інші відповіді не вирішили небажаної поведінки миші, коли я входив через PUTTY.
Дмитро

Для всіх, хто вирізав та вставляв, примітка set ttymouse=мала для мене дивну поведінку, наприклад, викликала поведінку клавіш зі стрілками, клавішу втечі, щоб змінити.
мозбоз

4

У мене були майже такі ж скарги, що і ви щодо нової чутливості Віма до миші. Використання set mouse=""не зробило це і для мене.

У мене set mouse=c(без лапок) близько внизу мого .vimrcфайлу. Це, здавалося, не дозволяє Vim користуватися мишею, за винятком випадків, коли використовується "PuTTY" для втілення з моєї (тфу!) Машини Windows на роботі. Для вставки в PuTTY я повинен використовувати середню кнопку shift.

2018-03-30 Правка: Зараз я почав використовувати: :mouse=(без лапок чи нічого) на деяких віддалених (CentOS 6.7) екземплярах vim, щоб позбутися від небажаних ефектів миші.


Привіт, дякую за пропозицію. Я додав це до свого .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 Я сформулював свій коментар трохи різко; Я прошу вибачення. Однак ця відповідь просто ставить блок if навколо того, що ОП вже намагалася, тому навряд чи буде корисним.
GKFX

1
@GKFX Справедлива точка, і стосується інших відповідей.
hvd

3

На розтягуванні debian деякі центральні настройки завантажуються після завантаження /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/...IS

  • зло
  • непостійний, він повертається після оновлення

Якщо встановити 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для кожного облікового запису користувача.


Ваша відповідь нарешті дала мені реальне вирішення моїх проблем у Debian 10 "Buster". Дуже дякую.
aef

0

Дещо пов'язане з питанням, якщо ви використовуєте neovim (nvim), ви повинні помістити set mouse=у свій ~/.config/nvim/init.vimфайл конфігурації.

Якщо каталог не існує, створіть його mkdir -p ~/.config/nvim/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.