Зупиніть вимкнення вставлення вибору як текст!


10

Я використовую VI і VIM років (30 і більше) (у xterms, не власне вікно, gvim), і у мене величезна бібліотека команд vim, яку я даю vim, використовуючи середню кнопку миші як вибір.

Наприклад, я часто робив такі речі, як ...

 vi {many_hundreds_of_files}
   paste vim commands using mouse - one paste per file.

Вибір включає в себе безліч команд VIM для виконання таких завдань, як заміна тесту, форматування, переміщення рядків навколо тощо, тощо, тощо, і, як правило, закінчується на: w і: наступні команди VIM, в кінці вибору, тому vim готовий знову вставити його в наступний файл. Це дозволяє мені оновлювати величезну кількість файлів ДУЖЕ складно, не потребуючи спеціальних скриптів (таких як редагування perl на місці) для цього.

Деякі з цих командних паст vim мають довжину понад 200 рядків (зберігаються в текстових файлах, які я спливаюче на екрані, і "копіювати все"! Вони вносять багато змін у набір тисяч файлів, які я переформатую. Але тільки для конкретного набору файлів, а не для моєї щоденної роботи vim. EG: Масове переформатування для текстових / файлів даних.

Проблема...

Під час мого останнього системного патчу (Fedora 25) vim тепер вставляє вибір миші як ТЕКСТ, а не як команди vim, і я не можу зупинити це!

Він все ще чудово працює в іншій системі (Fedora 24).

Якщо я хочу вставити текст як текст, я переходжу до режиму вставки перед вставкою! Я не хочу, щоб VIM автоматично вставляв виділений текст AS, коли він не знаходиться у режимі вставки. Я розумію, це означало як функцію безпеки, але для мене це ОСНОВНА проблема зручності використання.

Я спробував повернути записи термінів (xterm-256color) з машини, яка не робить цього (особливо "kmous" запис terminfo). Я також переглянув налаштування vim ": set mouse =" (що є нульовим!). Я не знаю, чи це xterm (сумнівний), чи щось, що змінилося у VIM (ймовірно), і журнали зміни та google були не корисними.

Однак, здається, ніщо не сприймає мене старої поведінки.


Знайшов іншого користувача з тією ж проблемою, меншою кількістю деталей, без рішення unix.stackexchange.com/questions/346293/…
anthony

1
Я сумніваюсь, що це скоріше vimзміна: як vimусередині xtermщось можна ввести через клавіатуру або вставити через кнопку миші? Я не знаю такого механізму. З іншого боку, xtermзнає, що це виконується, vimщоб він міг вирішити оточити вставку iі <esc>. Спробуйте (a) з іншим вікном терміналу та (b) копію vimз іншим іменем. Це повинно допомогти звузити причину проблеми.
Філіпос

Я згоден з @philippos. Можливо, щось інше, ніж vimвикрадення вашого способу вставки. Можливо, спробуйте ssh'ing або telneting у свою машину і вставити таким чином. Якщо у вас є вікно Windows, використовуйте шпаклівку, щоб ssh у свою машину Fedora25 і вставте її.
Джим У

Не пов’язані безпосередньо, але gvim на windows так поводився роками. Встановлюючи gvim, ви отримуєте два виконуваних файли gvim.exe(graphical-vim) та командний рядок vim.exe. Вставте "itext" у gvim.exe і ви отримаєте itext. Вставте його в vim.exe і ви отримаєтеtext
Jim U

1
@Philippos Цей механізм міг би бути вставленою в рамку . Я не знаю, як Vim може це підтримати, можливо, pastetoggleваріант?
Жил "ТАК - перестань бути злим"

Відповіді:


12

Після перегляду багато веб-сторінок, багато хто давав деякі підказки, які, здається, не спрацювали, я знайшов підказку (додатковий текст навколо вставки), що приводить мене до справи та вирішення проблеми.

Схоже, що vim вбудував у нього ряд "підроблених" записів термінальної капи, які він використовує, коли розпізнає конкретні термінали (а іноді і стає неправильним, хоча в цьому випадку він був неправий).

Налаштування термінальної камери в vim чисельні додавання, оскільки такі НЕ відображаються у звичайному списку налаштувань ": встановити всі". Щоб побачити їх, вам потрібно скористатися ": set termcap". Конкретним параметром 'нестандартного' термінака є "t_BE" (див. Vim ": довідка t_BE"). Вбудована довідка "xterm-bracketed-paste" пояснює це налаштування термінальної внутрішньої підказки.

В основному, якщо це налаштування визначено (у даному випадку Vim не termcap / terminfo), тоді, коли він запустить, vim надішле його до xterm, який повідомляє xterm додати спеціальні коди навколо будь-якого тексту, який користувач вставляє із зовнішнього джерела. Коли vim бачить їх, він автоматично переходить не тільки в режим вставки, але і встановлює "режим вставки", щоб не форматувати текст.

Пізніший (пастовий режим) я вважаю ДУЖЕ корисним! Перший - це те, що доставляє мені всі клопоти.

Рішення грубої сили - відключити дужку-пасту, додавши це до ".vimrc"

:set t_BE=

Альтернативне рішення ....

Замість того, щоб повністю вимкнути вставну скобку, припиніть дії vim, коли вона побачить початкову послідовність термінальної пасти (від миші), перебуваючи в командному або звичайному режимі.

:nmap <PasteStart>  <NOP>
:nmap <PasteEnd>    <NOP>
:cmap <PasteStart>  <NOP>
:cmap <PasteEnd>    <NOP>

Використання цього означає, що якщо ви вставляєте текст, перебуваючи в режимі вставки, vim не намагатиметься відформатувати (відступ) тексту, який, швидше за все, вже з відступом.

Це не означає, що мені більше не потрібно перемикати режим вставки, оскільки я також використовую переключення режиму вставки (зіставлене на F2) для відключення "showbreak" та "listchars" (відображення загорнутих ліній, вкладок, пробілів без перерви та додаткові пробіли в кінці рядків). Мені все-таки потрібно було б перевести vim у цей режим, коли я хочу зробити вибір миші, щоб вставити його в інше місце.

Коментарі та пропозиції щодо рішень вітаються.


Це також, здається, працює в Cygwin Vm, але, на жаль, не вирішує проблему в VS Vim
Джеймс Робінсон

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