![vim cut&paste не работает в Stretch / Debian 9](https://rvso.com/image/97232/vim%20cut%26paste%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D0%B2%20Stretch%20%2F%20Debian%209.png)
Обновил несколько виртуальных серверов до Debian 9.
Теперь при использовании ssh
мы не можем копировать и вставлять между удаленными терминалами.
Курсор, похоже, совершает движения и отмечает текст, хотя и более забавным/необычным способом, чем обычно, но ничего не копируется, кроме как в буфер обмена при нажатии command-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% случаев. Что еще можно сделать?
решение1
Решение: измените mouse=a
на mouse=r
в локальном .vimrc
.
Проблема с установкой этого в том, /usr/share/vim/vim80/defaults.vim
что, как говорится в принятом ответе, он будет перезаписан при каждом обновлении. Я долго искал и остановился на этом:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074
ЛОКАЛЬНОЕ РЕШЕНИЕ(недостатки):
Первое решение — использовать локальные файлы .vimrc и установить их там.
Так что вы можете создать локальный .vimrc ( ~/.vimrc
) для каждого пользователя и задать там свои параметры. Или создать один в /etc/skel
, чтобы он автоматически создавался для каждого нового пользователя, которого вы создаете.
Но когда вы используете локальные .vimrc
файлы, вам нужно установить все параметры там, потому что если есть локальный .vimrc
, то он defaults.vim
вообще не загружается! А если локального нет, то .vimrc
все ваши настройки перезаписываются из defaults.vim
.
ГЛОБАЛЬНОЕ РЕШЕНИЕ(предпочтительно):
Мне нужна была глобальная конфигурация для всех пользователей, которая загружала бы параметры по умолчанию, а затем добавляла бы или перезаписывала значения по умолчанию моими личными настройками.К счастью, в Debian есть такая возможность: будет /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
решение2
Похоже, одним из способов отключить распознавание мыши в vim является комментирование конфигурации мыши.
В /usr/share/vim/vim80/defaults.vim
я закомментировал специфическое для мыши обнаружение следующим образом:
" 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 " инициирует комментарий).
Это изменение позволило нам снова копировать и вставлять без каких-либо проблем.
Я согласен с комментариями, что это не идеальное решение, поскольку оно действительно перезаписывается в любое обновление, если только файл конфигурации не защищен (или не перенаправлен). В то время и из-за особенностей версии пакета или конфигурации серверов, на которых я работал, это было единственное, что работало. Поэтому я оставляю этот ответ здесь, иего следует использовать только как последнее средство.
решение3
TheДокументация Vim для mouse
опцииговорит
Обработку кнопок мыши xterm можно по-прежнему использовать, удерживая нажатой клавишу Shift.
решение4
Многие предлагали это :set mouse=a
, но я обнаружил, что это :set mouse=r
позволяет копировать и вставлять только в Vim на Debian 9. Удачи!