Почему вставка длинного однострочного текста очень медленная в режиме вставки Vim? - PullRequest
20 голосов
/ 01 февраля 2009

Мой Macbook застрял вчера, когда я попытался вставить 1200 строк по 80 символов в Vim. Гораздо быстрее загружать файл, а не вставлять текст.

Я подумал, что эта проблема может быть причиной того, что интернет-операторы разрешают загрузку медленнее, чем загрузка.

Ответы [ 9 ]

34 голосов
/ 02 февраля 2009

Если вы вставите его в окно терминала, Vim думает, что вы печатаете его вручную, и он попытается обновить экран по мере необходимости. Вы можете получить доступ к буферу обмена (в OS X) с помощью команд pbpaste и pbcopy, так что вы можете просто сделать это в Vim:

:read !pbpaste

или в оболочке:

bash$ pbpaste | vim -

Если бы вы использовали GUI Vim, вы бы использовали регистр "* для вставки (это то, что делает контекстное меню):

"*P   <- in normal mode

Вставка в окно терминала обычно плохая идея, попробуйте и используйте pbpaste, где можете.

17 голосов
/ 10 мая 2010
:read !pbpaste

Если вы используете Linux, используйте:

xsel --clipboard --output

или

xclip -selection clipboard -o

вместо pbpaste.

6 голосов
/ 02 февраля 2009

Это "нормально". Это медленно, потому что перерисовка текста тысячи раз идет медленно.

Когда вы вставляете длинную строку, это постоянно обновляет отображение (из-за того, как vim работает с текстом или, как я полагаю, терминал передает текст vim).

Я попытался вставить текст в vim (используя iTerm), и у него та же проблема, для вставки требуется некоторое время. Я пробовал :set paste и :set nowrap и все так же медленно. Вставить линию прямо в терминал одинаково медленно

С упомянутой ссылкой dpaste есть текстовая ссылка, которую вы можете просто wget и редактировать:

curl http://dpaste.com/115362/plain/ | vim -
3 голосов
/ 08 ноября 2011

Я предпочитаю набор пасты / nopaste, как предложил Маси. В .vimrc вы можете сопоставить некоторый символ переключению пасты (если это часто требуется).

т.е.

set pastetoggle=§
2 голосов
/ 02 февраля 2009

если вы: синтаксис выключен, вы иногда можете улучшить вставку на месте длинного однострочного файла. Примером может служить сгенерированный компьютером файл XML.

вы, вероятно, можете также отключить перерисовку vim во время вставки, посмотрите: он перерисовывает, но всегда стоит использовать материал командной строки, так как если вы повторяете процедуру или подобное, вы всегда можете автоматизировать ее с помощью макроса script / vim

2 голосов
/ 01 февраля 2009

ты пробовал режим вставки? установить пасту / установить пасту?

1 голос
/ 02 февраля 2009

Но если это в Интернете, вы должны были попробовать:

:e http://link/to/file 

Затем при необходимости сохраните его как локальный файл.

А если он медленный из-за перерисовки, посмотрите на эту опцию:

            *'lazyredraw'* *'lz'* *'nolazyredraw'* *'nolz'*
'lazyredraw' 'lz'   boolean (default off)
            global
            {not in Vi}
    When this option is set, the screen will not be redrawn while
    executing macros, registers and other commands that have not been
    typed.  Also, updating the window title is postponed.  To force an
    update use |:redraw|.

А если это локальный файл, вставка не требуется: попробуйте

:read file 

вместо.

1 голос
/ 01 февраля 2009

Я не знаю, является ли это проблемой Mac или чем-то еще, но у меня нет никаких проблем с вставкой такого количества текста в Vim. Я пробовал на Windows и Linux, и не видел никаких проблем.

Я успешно отредактировал файлы нескольких сотен мегабайт (файлы журналов) в Vim (загрузка идет медленно, но после прочтения текста все довольно быстро).

0 голосов
/ 01 февраля 2009

Если вы используете Apple Terminal, попробуйте другой терминал, например iTerm. Иногда «встроенный» терминал на самом деле не реагирует на обычную задачу. Не знаю почему ...

...