Я использую VI и VIM в течение многих лет (30 или более) (в xterms, а не в своем собственном окне, gvim), и у меня есть огромная библиотека команд vim, которые я даю vim, используя в качестве выделения среднюю кнопку мыши.
Например, я часто делал такие вещи, как ...
vi {many_hundreds_of_files}
paste vim commands using mouse - one paste per file.
Выбор будет включать в себя множество команд VIM для выполнения таких вещей, как замена теста, форматирование, перемещение строк и т. Д. И т. Д. И т. П., И обычно заканчивается: w и: next VIM-командами в конце выбора, поэтому Vim готов для меня снова вставить в следующий файл. Это позволяет мне обновлять огромное количество файлов ОЧЕНЬ сложными способами, не требуя специальных сценариев (таких как perl-редактирование на месте) для этого.
Некоторые из этих командных вставок vim имеют длину более 200 строк (хранятся в текстовых файлах, которые я выскакиваю на экране, и «копировать все»! Они вносят МНОГО изменений в набор из тысяч файлов, которые я переформатирую. Но только для определенного набора файлов, а не для моей повседневной работы с vim. EG: Массовое переформатирование для файлов текста / данных.
Проблема...
Во время моего последнего системного патча (Fedora 25) vim теперь вставляет выделение мыши как текст, а не как команды vim, и я не могу остановить его!
Он все еще отлично работает в другой системе (Fedora 24).
Если я хочу вставить текст, я вхожу в режим вставки перед вставкой! Я не хочу, чтобы VIM автоматически вставлял выделенные фрагменты в виде текста, когда он не находится в режиме вставки. Я понимаю, что это подразумевалось как средство обеспечения безопасности, но для меня это большая проблема юзабилити.
Я попытался датировать записи terminfo (xterm-256color) с машины, которая этого не делает (особенно запись terminfo «kmous»). Я также посмотрел на настройку vim ": set mouse =" (которая является нулевой!). Я не знаю, если это Xterm (сомнительно), или что-то, что изменилось в VIM (вероятно), и журналы изменений и Google были бесполезны.
Ничто, однако, не кажется мне прежним поведением.
vim
изменение: какvim
внутриxterm
знать, что что-то вводится через клавиатуру или вставляется через кнопку мыши? Я не знаю такого механизма. С другой стороны,xterm
знает, что он выполняется,vim
поэтому он может решить окружить вставку с помощьюi
и <esc>. Попробуйте (а) с окном терминала другого типа и (б) копиюvim
с другим именем. Это должно помочь сузить причину проблемы.vim
угон вашего метода вставки. Может быть, попробуйте ssh'ing или telneting в вашу машину и вставьте таким образом. Если у вас есть Windows box, используйте putty для ssh на вашем компьютере Fedora25 и вставьте его таким образом.gvim.exe
(graphic-vim) и командную строкуvim.exe
. Вставьте "itext" в gvim.exe, и вы получитеitext
. Вставьте его в vim.exe, и вы получитеtext
pastetoggle
вариант?Ответы:
Хорошо пройдя МНОЖЕСТВО веб-страниц, многие из которых давали некоторые подсказки, которые, похоже, не работали, я нашел подсказку (дополнительный текст вокруг вставки), которая приводит меня к причине и решению проблемы.
Кажется, что vim встроил в него несколько «поддельных» записей termcap, которые он использует, когда распознает определенные терминалы (и иногда ошибается, хотя в данном случае это не так).
Параметры Termcap в vim - это многочисленные добавления, поэтому они НЕ отображаются в обычном списке настроек ": установить все". Чтобы увидеть их, вам нужно использовать ": set termcap". Конкретной «нестандартной» настройкой termcap является «t_BE» (см. Vim «: help t_BE»). Встроенная справка "xterm-bracketed-paste" объясняет эту настройку termcap для внутреннего использования.
В основном, если этот параметр определен (в данном случае Vim не termcap / terminfo), тогда vim отправит его в xterm при запуске, что говорит xterm добавлять специальные коды вокруг любого текста, который пользователь вставляет из внешнего источника. Когда vim видит их, он автоматически переходит не только в режим вставки, но также устанавливает режим вставки, чтобы не форматировать текст.
Более поздний (режим вставки), я думаю, ОЧЕНЬ полезен! Первое - это то, что доставляет мне все неприятности.
Решение проблемы грубой силы - отключить вставку в скобках, добавив это в ".vimrc"
Альтернативное решение ....
Вместо того, чтобы полностью отключить вставку в скобках, остановите vim, когда он видит начальную последовательность вставки терминала (с помощью мыши), находясь в командном или обычном режиме.
Использование этого означает, что если вы вставите текст в режиме вставки, vim не будет пытаться отформатировать (отступ) текст, который, скорее всего, уже имеет отступ.
Это не означает, что мне больше не нужно переключать режим вставки, так как я также использую переключатель режима вставки (сопоставленный с F2), чтобы отключить «showbreak» и «listchars» (отображение обернутых строк, вкладок, пробелов без пробелов и лишние пробелы в конце строк). Мне все еще нужно было бы включить Vim в этом режиме, когда я хочу сделать выбор мыши для вставки в другом месте.
Комментарии и предложения по решениям приветствуются.
источник