отключение поддержки мыши в `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 резко меняется.

user001
источник

Ответы:

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
Спасибо! Комментирование строки "mouse -a" в этом файле решило проблему для меня (на 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 Вы видите, ENOENTкак vim должен проверить, существует ли файл. Обычно это делается путем вызова, statкоторый возвращает, ENOENTесли файл не существует.
Ульрих Дангел
2
@ user001 Ах, тот факт, что он не работает при вводе в текущем сеансе, является важной информацией. Исходя из этого, я не уверен, что это проблема с vim. Возможно, гном-терминал делает что-то ужасное. Можете ли вы попробовать другой эмулятор терминала?
Патрик
Привет, хорошее предложение. Я попытался, xtermи у меня не было проблем с активацией мыши. Я мог воспроизвести проблему, набрав :set mouse=aв vimобкатке xterm(и наоборот, набрав :set mouse=). Есть идеи, как устранить gnome-terminalпроблему? Должен ли я начать новую тему? Благодарю.
user001
9

Я столкнулся с этим в моем приложении OS X «Terminal» на хосте Fedora Server 25. Я навсегда решил это с помощью моего .vimrc с помощью:

set mouse=
set ttymouse=

Теперь я могу прокрутить до моей предыдущей истории bash в прокрутке моего терминала с помощью мыши.

Robpol86
источник
Настоятельно рекомендуется создать vimrc.local в том же каталоге, потому что vimrc.local не будет обновляться, если vim получит обновления
Сироты
У меня сработало на Raspbian 9.4. Другие ответы не помогли устранить нежелательное поведение мыши при входе в систему через PUTTY.
Дмитрий
Для кого-либо еще вырезавшего и вставившего, примечание set ttymouse=имело странное поведение для меня, например, вызвало поведение клавиш со стрелками, escape-клавишу для изменения
Мозбоз
4

У меня были почти те же жалобы, что и у вас, относительно чувствительности новой Vim к мыши. Использование set mouse=""не сделало это для меня, либо.

У меня есть set mouse=c(без кавычек) близко к нижней части моего .vimrcфайла. Это, похоже, удерживало Vim от использования мыши, кроме случаев использования «PuTTY» для ssh-входа с моей (тьфу!) Машины Windows на работе. Я должен использовать shift-middle-button для вставки в PuTTY.

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
ipirlo
источник
1
Это не имеет отношения к заданному вопросу.
GKFX
@GKFX Ты уверен? Это выглядит актуально для меня. Обратите внимание, что has("gui_running")0 в терминальной среде. Ответ на этот вопрос, в отличие от других, требует дополнительных усилий , чтобы только отключить мышь в терминальной среде, которая задает вопрос, оставляя его включен Gvim.
17
@hvd Я сформулировал свой комментарий довольно резко; Я прошу прощения. Тем не менее, этот ответ просто помещает блок if вокруг того, что OP уже пробовал, так что вряд ли он будет полезен.
GKFX
1
@GKFX Справедливая точка зрения, а также относится и к другим ответам.
17
3

На debian stretch некоторые центральные настройки загружаются после загрузки /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_vimuncommentig в приведенной выше строке удаляются все остальные параметры, установленные этим файлом. Чтобы просто удалить ненужные опции, поместите следующее в /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/

Марсело Ласерда
источник