Я скопировал часть HTML-кода с веб-страницы и хотел сохранить его в файле. Для этого я начал новый vim
сеанс в окне терминала, с (новым) именем файла, указанным в командной строке, нажал, iчтобы перейти в режим вставки, а затем CtrlShift+ Vи ждал, пока [-- INSERT --]
отображается внизу, и ждал ...
Так vim
как через несколько секунд я не отвечал, я открыл «Текстовый редактор» из меню «Приложения» → «Дополнения», вставил текст (который появлялся в течение доли секунды, сохранил его под новым именем, закрыл и завершил сеанс Vim, который все еще не было сделано, через 1,5 минуты. Объем текста был 186K в 3200 строк, не слишком много, я бы сказал, ни с чрезмерно длинными строками.
Есть ли способ ускорить вставки такого рода в vim
и / или есть объяснение, почему это так медленно по сравнению с использованием текстового редактора, который в других отношениях ужасен и ориентирован на мышь?
(% CPU согласно данным top
не превышает 5%, хотя у меня есть несколько свободных процессоров в системе, так что это может быть некоторая проблема, связанная с вводом / выводом, которой нет при чтении того же текста из файла)
Информация о версии:
Ubuntu 12.04
Vim: 7.3, с исправлениями, поставляемыми Ubuntu 12.04
bash: 4.2.25
gnome-terminal: 3.4.1.1
vim
, выполнить вставку, а затем включите его снова. Также попробуйте использовать:set paste
функцию, чтобы увидеть, если она улучшается. Посмотрите,:help paste
как описано, как неvim
делает различий ч / б печатать и вставлять.vi
попытаться проанализировать файл при чтении (после сохранения, предложенного @ l0b0). Но это работает быстро.:set paste
, кажется, не реально изменить ситуацию (я не использую секундомер, просто стена-часы).Ответы:
Чтобы быстро сохранить много текста из буфера обмена в файл, вы можете запустить
cat > file.txt
, вставить содержимое и нажать Ctrl- d.Если у вас установлен xsel , вы можете
:r !xsel
вставить «основной» (он же «мышь») в Vim или:r !xsel -b
вставить буфер «clipboard» ( Ctrl- c). Вы также можете сохранить выбор непосредственно в файл с помощьюxsel >file.txt
илиxsel -b >file.txt
. Это устраняет необходимость в отдельных действиях вставки + EOF и позволяет избежать печати всего буфера копирования в терминале.Если у вас нет xsel, но есть xclip, соответствующие команды предназначены
xclip -out
для первичного выбора илиxclip -out -selection clipboard
для буфера буфера обмена.источник
Это проблема сброса буфера на диск. Vim пытается защитить вашу работу и не предполагает, что вы можете набирать несколько тысяч символов в секунду. Прочитайте
:help swap-file
некоторые подробности о буферизации. Решение вашей проблемы заключается в следующем:Выключите файл обмена vim либо с помощью:
или из vim перед вставкой:
Смотрите
:help swapfile
для более подробной информации.Другой вариант - просто отключить синхронизацию на диске файла подкачки с помощью,
:set swapsync=
но эта опция требует больше нажатий клавиш, чтобы отменить, и я ленив. :)Отключение свопа не безопасно для нормальной работы! Сразу после вставки используйте
:set swapfile
либо,:set swapsync=fsync
чтобы вернуться к нормальному поведению (хотя технически нормальное поведение могло быть синхронизировано, а не fsync ,:set swapsync?
предварительно проверьте , хотите ли вы идти по этому пути).источник
Если у вас есть
xterm_clipboard
возможность, вы можете использовать*
и+
регистры. Эти регистры взаимодействуют с основным буфером выбора X11 и буфером обмена (соответственно).Таким образом, если вы скопировали что-то через CTRL+ c, вы можете вставить это в vim с помощью "+p.
Если вы просто выделили его без копирования, вы можете вставить его "*p.
Вы также можете сделать
*
буфер буфером по умолчанию, выполнив:set clipboard=unnamed
. Тогда любой yank ( y), paste ( p) и т. Д., Которые не указывают регистр, будет использовать этот*
регистр. Также добавлен Vim 7.3.74clipboard=unnamedplus
, который будет использовать+
регистр по умолчанию.Вы также можете копировать вещи в первичный отбор и буфера обмена буферов путем дергает, например: "+yy.
Обратите внимание, что, как уже упоминалось, все эти возможности нуждаются в этой
xterm_clipboard
функции. Вы можете увидеть, есть ли у вас эта функция, выполнив:version
vim илиvim --version
из оболочки, и поищите+xterm_clipboard
. Если он говорит-xterm_clipboard
, у вас его нет и вам придется перекомпилировать vim.источник
xterm_clipboard
только если запущен vim из терминала.xterm
.xterm_clipboard
относится к любому терминальному эмулятору, а не только к xterm. Я сам использую urxvt.