vim cut & paste не работает в Stretch / Debian 9

33

Здесь обновлено несколько виртуальных серверов до Debian 9.

Теперь при использовании sshмы не можем копировать и вставлять между удаленными терминалами.

Кажется, что курсор выполняет движения и отмечает текст, хотя и более смешно / иначе, чем обычно, но ничто не копируется, кроме как в буфер обмена, когда выполняется команда C / command-V или копирование и вставка в соответствующем меню. ,

Мы также пытались выполнять движения мыши с помощью Shift и других комбинаций клавиш, но безрезультатно.

Это происходит в OS / X, а именно в Sierra и El Capitan, а также в Windows, где также используются терминалы mobaXterm.

Ситуация связана с осознанием Vim наличия мыши.

Следуя другим вопросам в Stack Overflow, я создал /etc/vim/vimrc.localс помощью set mouse="r"и set mouse="v; это не сработало хорошо.

Наконец настройте set mouse=""в том же файле, с некоторым умеренным успехом.

Тем не менее, это также не работает хорошо в 100% случаев. Что еще можно сделать?

Руи Ф Рибейро
источник
Почему вы хотите отключить поддержку мыши? В Windows я могу просто скопировать и вставить в замазку; какой эмулятор терминала вы используете на Mac?
Алексей Магура
3
Обычный терминал + двоичный файл ssh, который поставляется по умолчанию; Еще 2 товарища по работе жалуются ... Это виртуальные серверы без головы, все они только в текстовом режиме. Отсутствие правильной работы среза и вставки - большая проблема для нас.
Руи Ф Рибейро
Я бы порекомендовал использовать что-то вроде iTerm2 , я думаю, что это единственный эмулятор терминала, который я использовал, кроме ретро-термина, который вы можете получить в магазине Apple, но я не помню, поддерживал ли он тот, который копирует и вставляет поверх ssh. Вы все еще должны быть в состоянии скопировать выбор экрана, все же. Однако я слабо помню, что у меня возникли проблемы при попытке скопировать дерьмо из терминала в систему, я написал несколько функций в своем .zshrc, чтобы помочь облегчить его, но я не уверен, действительно ли это то, что вы ищете для.
Алексей Магура
2
Может быть, кто-то может подать запрос на отмену этого изменения (в Debian?), Чтобы вернуться в mouse=режим.
Штеффен

Ответы:

37

Решение на самом деле, установив опцию mouse=aна mouse=r.

Проблема с установкой этого в соответствии /usr/share/vim/vim80/defaults.vimс принятым ответом заключается в том, что он будет перезаписываться при каждом обновлении. Я долго искал и остановился на этом: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

Решение в первую очередь состоит в том, чтобы использовать локальные файлы .vmrc и установить его там. Таким образом, вы можете создать локальный .vimrc ( ~/.vimrc) для каждого пользователя и установить там свои параметры. Или создайте один, /etc/skelчтобы он автоматически создавался для каждого нового пользователя, которого вы создаете.

Но при использовании локальных файлов .vmrc, вы должны установить все опции есть, потому что если есть локальный .vimrc, то defaults.vimне загружается вообще! И если нет локальных, .vimrcвсе ваши настройки перезаписываются с defaults.vim.

Мне нужна глобальная конфигурация для всех пользователей, которая загружает параметры по умолчанию, а затем добавляет или перезаписывает значения по умолчанию с моими личными настройками. К счастью, в Debian для этого есть опция: The /etc/vim/vimrc.localбудет загружена после /etc/vim/vimrc. Таким образом, вы можете создать этот файл и разрешить загрузку значений по умолчанию, предотвратить их повторную загрузку (в конце), а затем добавить свои личные параметры:

Пожалуйста, создайте следующий файл: /etc/vim/vimrc.local

" This file loads the default vim options at the beginning and prevents
" that they are being loaded again later. All other options that will be set,
" are added, or overwrite the default settings. Add as many options as you
" whish at the end of this file.

" Load the defaults
source $VIMRUNTIME/defaults.vim

" Prevent the defaults from being loaded again later, if the user doesn't
" have a local vimrc (~/.vimrc)
let skip_defaults_vim = 1


" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
" Add as many options as you whish

" Set the mouse mode to 'r'
if has('mouse')
  set mouse=r
endif

(Обратите внимание, что $VIMRUNTIMEиспользуемый в приведенном выше фрагменте имеет значение как /usr/share/vim/vim80/defaults.vim.)

Если вы также хотите включить «старое поведение копирования / вставки», добавьте также следующие строки в конце этого файла:

" Toggle paste/nopaste automatically when copy/paste with right click in insert mode:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction
I-GALAXY-I
источник
4
Это должен быть принятый ответ. Также из вашего связанного сообщения об ошибке я думаю, что мы можем сойти с рук source $VIMRUNTIME/defaults.vim.
Alasdair
1
Наконец-то удалось развернуть эту, великолепную, отличную работу! +1
Руй Ф. Рибейро
2
Все еще работает в Debian 10, просто используя источник /usr/share/vim/vim81/defaults.vim
Rui F Ribeiro
26

Кажется, что одним из способов избавиться от vim от осознания мыши является комментирование конфигурации мыши.

В /usr/share/vim/vim80/defaults.vimI закомментировала обнаружение конкретной мыши , как в:

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
"if has('mouse')
"  set mouse=r
"endif

(в этих файлах конфигурации vim "инициирует комментарий).

Изменение позволило нам без проблем скопировать и вставить снова.

Я согласен с комментариями, что это не идеальное решение, потому что оно действительно перезаписывается в любое обновление, если файл конфигурации не защищен (или не перенаправлен). В то время, и из-за специфики версии пакета или конфигурации серверов, на которых я работал, он был единственным, который работал. Таким образом, я оставляю этот ответ здесь, и его следует использовать только в качестве крайнего решения .

Руи Ф Рибейро
источник
2
ИМО это плохой ответ! Поощрение пользователей к редактированию файла, обработанного управлением пакетами, в будущем может привести к неожиданным последствиям. @ I-GaLaXy-I ответ предпочтительнее.
Джереми Дэвис
1
@ JeremyDavis Я согласен с вами, это не лучшее решение. В то время это было единственное, что работало по неизвестной причине, и я попробовал несколько альтернатив. Тем не менее, сейчас несколько людей говорят мне, что другое решение в настоящее время работает, и я принимаю это как правильный ответ. В то время я использовал диверсии, и файл конфигурации не был перезаписан, однако это также не идеальное решение.
Руи Ф. Рибейро
11

Документация Vim для mouseопции говорит

Обработку xterm кнопок мыши все еще можно использовать, удерживая клавишу Shift нажатой.

Стефан
источник
Спасибо за это. Я использовал Vim в течение многих лет и не знал об этой функции. Я отредактировал ваш вопрос, чтобы включить больше доступных функций форматирования. Добро пожаловать в Unix и Linux !
Энтони Дж - справедливость для Моники
1
Проблема в том, что я использую Terminal в Mac, а мои операторы putty / mobaXterm в Windows ... не xterm
Rui F Ribeiro
3

Вы можете отключить это, не изменяя системные файлы, создав /etc/vimrc.localи вставив следующее:

set mouse=
Джеффри
источник
В бета-версии он не работал последовательно, проверю еще раз, спасибо.
Руи Ф. Рибейро,
2
Это не работает.
LtWorf
Смотрите ответ I-GaLaXy-I выше. Вам необходимо явно импортировать defaults.vim и запретить его импорт.
Ричард
Это тоже хорошо работает для меня, хотя я объединил его с ответом @ I-GaLaXy-I (т.е. отредактировал / создал /etc/vim/vimrc.local)
Джереми Дэвис,
у меня нормально работало, когда я был внутри контейнера debian 9 ... просто поместил его в ~ / .vimrc
Скотт Стенсланд,
1

Многие предлагали, :set mouse=aно я обнаружил, что :set mouse=rв Vim на Debian 9 можно только копировать и вставлять. Удачи!

Дэвид Йегер
источник