отключение поддержки мыши в `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
Спасибо! Комментирование строки "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 в прокрутке моего терминала с помощью мыши.


Настоятельно рекомендуется создать 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

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/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.