Прервать vim пасту

5

Иногда я вставляю много данных в vim (> 5000 строк) и забываю включить режим вставки. В этом случае vim занят в течение нескольких минут, пытаясь правильно сделать отступ для всего текста (который действительно очень плохо работает с какими-то данными, с отступом примерно в 10 000 символов).

Есть ли способ прервать процесс вставки? ESC, CTRL-C и CTRL-D не работают.

Данило Барген
источник
Я не знаю, как отменить его, но в зависимости от того, какой у вас есть тип vim, вы можете вставить его из системного буфера обмена, что не заставит Vim переформатировать его. Используйте +регистр, например "+P. (Или в X11 используйте *регистр для вставки того, что было выбрано в последний раз; тот же текст, который вы получите, если
щелкнуть среднюю кнопку
Хм, *Pпохоже не вставляет правильные вещи ... Ни выделенный текст, ни содержимое ctrl + c не вставляются (вставляются некоторые другие данные, которые я не знаю, откуда они берутся).
Данило Барген
Вы ставили двойные кавычки раньше *P?
Эхристоферсон
Я пробовал как с двойной кавычкой, так и без нее, тот же результат ...
Данило Барген
Я думал, что CTRL + C должен был работать. Мне любопытно, какую систему и версию Vim вы используете? А графический интерфейс или терминал? Может быть, это ошибка ...
Бен

Ответы:

3

Если вы используете версию с графическим интерфейсом, вам действительно нужно вставить из буфера обмена register ( "*) или X11 selection ( "+), как уже предложено echristopherson. Таким образом, вместо среднего щелчка или чего-либо еще, вы перемещаетесь туда, куда хотите вставить, а затем вводите "*P, включая начальную цитату. При вставке с помощью команд pили P, vim знает, что вы вставляете, поэтому 'pasteопция не нужна - независимо от того, из какого регистра вы вставляете.

Если вы вставляете из терминала, vim на самом деле не имеет права голоса в этом вопросе. Эмулятор терминала выдает все, что вы указали, и в большинстве случаев vim не может различить, вводите ли вы символы, которые вы вводите, или вставляете. Следовательно, вам нужно 'pasteуказать vim, что он не должен делать отступы и прочее.

Как следствие, если вы вставляете данные из терминала, все вставляемые символы ставятся в очередь за один раз и, по сути, уже отправлены в vim, так что вы ничего не можете сделать, чтобы прервать его. С точки зрения эмулятора терминала, CTRL+ c- это всего лишь обычный символ, поэтому он ставится в очередь позади всех других вещей, ожидающих вставки. Когда vim наконец-то увидит CTRL+ c, будет слишком поздно, так как больше ничего нельзя прервать.

(Обновление: в зависимости от эмулятора терминала, CTRL+ cи аналогичные сигналы могут быть отправлены в приоритетном порядке. В частности, я заметил это в Putty, который доставляет сигнал прерывания мгновенно и действительно позволяет мне прервать неуместные длинные операции вставки. правда, не знаю, как это работает.)


Короче говоря: если это вообще возможно, используйте "*Pили "+Pдля вставки (что даже работает в некоторых терминальных эмуляторах, если я правильно помню). Это «правильный» способ вставки; все остальное - это обходной путь, который дает вам такие головные боли.

Вукар Тимнаракрул
источник