Как скопировать в буфер обмена в Vim? - PullRequest
661 голосов
/ 18 октября 2010

Можно ли скопировать в буфер обмена непосредственно из Vim? yy копирует только содержимое во внутренний буфер Vim. Я хочу скопировать в буфер обмена ОС. Есть ли такая команда в Vim, или вы можете только дергать вещи в Vim?

Ответы [ 29 ]

454 голосов
/ 18 октября 2010

Регистр * сделает это. В Windows + и * эквивалентны. В Unix есть небольшая разница между + и *:

В Windows регистры * и + эквивалентны. Для систем X11, хотя они отличаются. Для систем X11, * - выделение, а + - вырезанный буфер (например, буфер обмена). http://vim.wikia.com/wiki/Accessing_the_system_clipboard

*, вероятно, то, что вы хотите большую часть времени, поэтому я использую *, потому что он работает так, как я ожидаю, в обеих средах.

По некоторым причинам в дистрибутивах Linux сначала необходимо установить vim-gtk, чтобы получить функциональность буфера обмена.

А для тех, кто запутался в том, как использовать регистры, когда дергаете или кладете, вы просто пишете ", а затем название регистра. Таким образом, для копирования чего-либо в регистр буфера обмена вы набираете "*y, а затем помещаете набираемый "*p

306 голосов
/ 12 апреля 2013

На Mac OSX

  • копирование выбранной части: визуально выберите текст (введите v или V в обычном режиме) и введите :w !pbcopy

  • скопировать весь файл :%w !pbcopy

  • вставить из буфера обмена :r !pbpaste

Вкл большинство Linux Distros, вы можете заменить:

  • pbcopy выше с xclip -i -sel c или xsel -i -b
  • pbpasteиспользуя xclip -o -sel -c или xsel -o -b
    - Примечание: В случае, если ни один из этих инструментов (xsel и xclip) не установлен в вашем дистрибутиве, вы, вероятно, сможете найти ихв репо
143 голосов
/ 11 июня 2012

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

В Windows set:

set clipboard=unnamed

В Linux set (vim 7.3.74+):

set clipboard=unnamedplus

ПРИМЕЧАНИЕ. Для работы может потребоваться обновленная версия Vim.

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

116 голосов
/ 18 октября 2010

Используйте регистр "+ для копирования в системный буфер обмена (т. Е. "+y вместо y).

Аналогично вы можете вставить из "+, чтобы получить текст из системного буфера обмена (т.е."+p вместо p).

66 голосов
/ 27 июля 2013

@ Джейкоб Далтон упомянул об этом в комментарии, но, похоже, никто не упомянул в ответе, что vim должен быть скомпилирован с поддержкой буфера обмена для работы любого из упомянутых здесь предложений.Мой не был настроен таким образом на Mac OS X по умолчанию, и мне пришлось пересобрать vim.Используйте эту команду, чтобы узнать, есть она у вас или нет vim --version | grep 'clipboard'.+clipboard означает, что вы хороши, и приведенные здесь рекомендации сработают для вас, а -clipboard означает, что вы должны перекомпилировать и перестроить vim.

52 голосов
/ 07 мая 2014

Подводя итоги и облегчая для новичков,

Чтобы скопировать текущую строку, введите в командном режиме:

"*yy

Чтобы скопировать весь файл / буфер, в командном режиме сначала перейдите к началу с помощью gg, затем введите

"*yG

Как уже отмечалось, для этого требуется +clipboard из vim --version, что указывает на наличие поддержки буфера обмена, -clipboard означает номер.

23 голосов
/ 03 марта 2012

Я не смог скопировать в систему моего буфера обмена, потому что у меня было это в моем файле ~ / .vimrc:

 if has('mouse')
   set mouse=a
 endif

Но если вы добавите эту строку дальше, это позволит вам просто Ctrl + c , чтобы получить все, что вы выбрали в буфер обмена.

vmap <C-c> "+y

Оригинальное обсуждение и более подробная информация: Копировать текст из vim с помощью set mouse = a

21 голосов
/ 16 августа 2016

Если вы используете vim в MAC OSX, к сожалению, он поставляется с более старой версией и не соответствует параметрам буфера обмена.К счастью, доморощенный может легко решить эту проблему.

установить vim:

brew install vim

установить графический интерфейс vim:

brew install macvim

перезапустите терминал для вступления в силу.


добавьте следующую строку в ~ / .vimrc
set clipboard=unnamed

, теперь вы можете скопировать строку в vim с помощью yy и вставить ее для всей системы.



Обновленный метод :

Я никогда не был удовлетворен установленным методом буфера обмена в течение многих лет.Самый большой недостаток - это испортит вашу историю буфера обмена, даже если вы используете x для удаления.Вот лучшее и более элегантное решение.

  1. Скопируйте текст [range] vim в системный буфер обмена.(Подсказка: сначала используйте v или V, чтобы выбрать диапазон, а затем введите двоеточие :, чтобы активировать команду Ex):
    :[line-range]yank +
    например,
    :5,10y * (скопировать / восстановить строки 5-10 в системный буфер обмена * зарегистрироваться)

  2. Вставить содержимое из системного буфера обмена в vim на новой строке:
    :put +

Примечание:

  1. Если вы выберете диапазон слов, вышеуказанное не будет работать.используйте "* y или " + y , чтобы сохранить этот визуальный блок в буфер обмена.Однако это трудно напечатать, я все еще думаю об альтернативах.
  2. : help "* или : help * + для получения дополнительной информации
  3. brew info vim сможет увидеть другие варианты установки vim. В настоящее время у него нет других опций.
20 голосов
/ 05 июля 2018

Для Ubuntu - июль 2018

Используйте регистр "+ для копирования в системный буфер обмена (т. Е. " + y вместо y ).

Аналогично, вы можете вставить из "+ , чтобы получить текст из системного буфера обмена (т.е. " + p вместо p ).

Вы также должны убедиться, что vim скомпилирован с поддержкой буфера обмена.Попробуйте:

vim --version | grep .xterm_clipboard -o 

и если -xterm_clipboard (минус префикс), то у вас нет есть поддержка.

Вот некоторые инструкциидля замены с рабочей версией vim с поддержкой буфера обмена.

  • $ sudo apt-get purge vim
  • $ sudo apt-get autoremove (удаляет любые посторонние пакеты зависимостей vim изsystem)
  • $ sudo apt-get install vim-gnome

Проверьте еще раз с помощью vim --version | grep .xterm_clipboard -o, и вы можете подтвердить, что буфер обмена теперь доступен (т.е.1042 *)

Удачи.

18 голосов
/ 22 октября 2014

решение для меня заключалось в установке дополнительного vim с включенной опцией буфера обмена:

sudo apt-get install vim-gnome
...