vim cut & paste не працює в Stretch / Debian 9


33

Тут оновлено кілька серверів VM до Debian 9.

Тепер під час використання sshми не можемо копіювати та вставляти між віддаленими терміналами.

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

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

Це відбувається в OS / X, а саме Sierra та El Capitan, і в Windows, використовуючи також термінали mobaXterm.

Ситуація пов'язана з усвідомленням vim, що має мишу.

Після інших запитань у "Переповнення стека" я створив за /etc/vim/vimrc.localдопомогою set mouse="r"та set mouse="v; це не вийшло добре.

Нарешті налаштування set mouse=""в одному файлі з деяким помірним успіхом.

Однак це також не працює добре 100% часу. Що ще можна зробити?


Чому ви хочете вимкнути підтримку миші? У Windows я можу скопіювати та вставити просто добре в сеанс шпаклівки; який термінальний емулятор ви використовуєте на Mac?
Олексій Магура

3
Звичайний термінал + двійковий файл ssh, який поставляється за замовчуванням; Ще 2 товариші по роботі зі скаргами ... Вони безголові віртуальні сервери, всі вони лише в текстовому режимі. Неправильна робота з вирізанням та вставкою - це для нас велика справа.
Rui F Ribeiro

Я рекомендую використовувати щось на зразок iTerm2 , я думаю, що це єдиний емулятор терміналу, який я використовував, окрім ретро-терміна, який можна отримати в магазині Apple, але я не пам’ятаю, чи підтримував це копію та наклеювання на ssh. Однак ви все одно зможете копіювати вибрані екрани. Я, однак, чудово пам'ятаю, що виникли проблеми при спробі скопіювати лайно з терміналу в систему, я написав купу функцій у свій .zshrc, щоб полегшити це, але я не впевнений, що це те, що ти насправді шукаєш для.
Олексій Магура

2
Можливо, хтось може подати запит на відновлення цієї зміни (в debian?), Щоб повернути mouse=режим.
steffen

Відповіді:


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

4
Це має бути прийнятою відповіддю. Також з вашого пов’язаного звіту про помилку, я думаю, ми можемо позбутися source $VIMRUNTIME/defaults.vim.
Alasdair

1
Нарешті вдалося розгорнути цю, чудову, чудову роботу! +1
Rui F Ribeiro

2
Все ще працює в Debian 10, просто використовуючи source /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 - я краще відповідь.
Джеремі Девіс

1
@JeremyDavis Я згоден з вами, це не найкраще рішення. На той час це було єдине, що працювало, з незрозумілої причини, і я спробував кілька альтернатив. Однак це вже не один чоловік каже мені, що інше рішення працює, я сприймаю це як правильну відповідь. Я використовував диверсії в той час, і файл конфігурації не був перезаписаний, однак це також не є ідеальним рішенням.
Rui F Ribeiro

11

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

Xterm поводження з кнопками миші все ще може використовуватися, утримуючи натиснутою клавішу Shift.


Дякую за це. Я використовую Vim роками і не знав про цю особливість. Я відредагував ваше запитання, щоб включити більше доступних функцій форматування. Ласкаво просимо до Unix & Linux !
Ентоні Г - справедливість для Моніки

1
Проблема полягає в тому, що я використовую Terminal в Mac та мої оператори putty / mobaXterm у Windows ... не xterm
Rui F Ribeiro

3

Ви можете відключити це без зміни системних файлів, створивши /etc/vimrc.localта вставивши наступне:

set mouse=

У бета-час він не працював послідовно, перевіримо це ще раз, дякую.
Rui F Ribeiro

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. Удачі!

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