Как скопировать в буфер обмена в Vim?

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

26 ответов


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

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

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

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

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


На Mac OSX

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

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

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

On большинство Linux дистрибутивы, вы можете заменить:

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

в файле 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


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

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


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


подведение итогов и сделать его проще для новичков,

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

"*yy

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

"*yG

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


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

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

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

vmap <C-c> "+y

первоначальное Обсуждение и больше деталей: копировать текст из vim с помощью мыши set=a enabled


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

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

brew install vim --with-lua --with-override-system-vim

установить gui verion из vim:

brew install macvim --with-lua --with-override-system-vim

перезагрузите терминал, чтобы вступить в силу.


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

теперь вы можете скопировать строку в Vim с yy и вставьте его в масштабах всей системы.



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

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

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

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


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

sudo apt-get install vim-gnome

Если вы используете GVim, вы также можете set guioptions+=a. Это вызовет автоматическое копирование в буфер обмена текста, выделенного в визуальном режиме.
Недостаток: обратите внимание, что продвинутые менеджеры буфера обмена (с историей) в этом случае получат всю историю выбора...


Если ваш vim случайно компилируется без +xterm_clipboard опция, как это по умолчанию в Debian, и я думаю, Ubuntu, вы можете передать выбор или весь буфер внешней программе, которая обрабатывает буфер обмена рабочего стола. Для xclip (который вам может потребоваться установить ранее), команда будет :w !xclip -sel clip


Для 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 от системы)
  • $ sudo apt-get install vim-gnome

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

удачи.


вы можете найти ответы здесь Arch Wiki

Для Linux: Прежде всего, вы должны включить буфер обмена в вашей версии vim, установив gvim.


Далее вы должны поставить эту строку на свой .

set clipboard=unnamedplus


может быть, кто-то найдет его полезным. Я хотел оставаться независимым от буфера обмена X и по-прежнему иметь возможность копировать и вставлять текст между двумя запущенными Vim. Этот небольшой код сохраняет выбранный текст в temp.txt-файл для копирования. Поместите код ниже в свой .vimrc. Используйте CTRL-C CTRL-v для выполнения задания.

vnoremap: w !cp/dev / null ~ / temp.txt & & cat > ~ / temp.txt

noremap: r !cat ~ / temp.txt


  1. поставить set clipboard=unnamed в своем vimrc.
  2. выберите, что вы хотите скопировать в Visual mode (нажмите v, чтобы войти).
  3. на Normal mode (нажмите escape[esc]), нажмите y для копирования.
  4. если вы хотите вставить что-то из буфера обмена ОС, нажмите p/P в Vim Normal режим.

если у вас есть xclip простой способ копирования текста в буфер обмена следующим образом:

  1. Yank текст, который вы хотите скопировать. (y команда в Ваниль vim)
  2. тип :call system("xclip -selection clipboard", @")

:call system() запускает команду терминала. Требуется два аргумента: первый-команда,второй - что передать этой команде. Например :echom system("head -1", "Hello\nWorld") возвращает Hello (с некоторым заполнением). echom возвращает вывод команды, call-нет.

xclip -selection clipboard просто копирует текст в системный буфер обмена в отличие от буфера обмена X по умолчанию (доступ осуществляется средней кнопкой moue).

@" возвращает последний вырванный текст. "это регистр по умолчанию, но вы можете использовать любой регистр. Чтобы просмотреть содержимое всех регистров, типа :registers.


в vim только под терминалом ubuntu,

пресс shift + drag mouse чтобы выбрать текст в vim, затем ctrl + shift + c терминал

затем ctrl + v на другой редактор


Я Vim newby, но, чтобы скопировать весь текст в системный буфер обмена (e.g Если вы хотите вставить его в текстовый процессор или другой текстовый редактор, например gedit, mousepad и т. д...), в обычном режиме:

ggVGy

или, более просто:

:%y

Как было предложено, я также установил vim-gtk и поставить

установить буфер обмена=unnamedplus

в моем .vimrc

и все работает отлично

Если вы хотите скопировать только часть текста, используйте визуальный режим (v) выберите текст, который вы хотите скопировать, и нажмите клавишу y.

наконец, я предлагаю программу буфера обмена, такую как Clipman (мой любимый), Clipit, Parcellite или аналогичный.

(Я использую vim 8.0 в Debian Stretch Xfce)

ПРОСТИ МЕНЯ ЗА МОЙ АНГЛИЙСКИЙ! :-)


Я написал простую строку в моем .vimrc для работы с копией. Надеюсь, это кому-то поможет. К сожалению, мой vim не установлен с поддержкой буфера обмена, поэтому ни одно из этих предложений не сработало для меня. В принципе, вставьте эту строку в свой .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Если вы хотите читать подробности о том, что это делает, вы можете прочитать об этом на мой блог


для некоторых международных клавиатур вам может потребоваться нажать "+пробел и ".

поэтому в этом случае вам придется нажать "пробел+y или "пробел*y


Если вы не хотите использовать графический интерфейс для vim, и вы предпочитаете просто придерживаться эмулятора терминала, может быть гораздо более простой подход к этой проблеме. Вместо того, чтобы использовать yank или что-то подобное, сначала взгляните на документацию используемого вами терминала. Я боролся с той же проблемой (пытаясь использовать буфер обмена +и xclip и так далее), и в конце концов оказалось, что в моем эмуляторе терминала достаточно просто нажать shift и выбрать любой текст, который вы хотите скопировать. Вот и все. Достаточно просто и не нужно возиться с настройками. (Кстати, я использую urxvt).


Если вы подключаетесь к системе unix через шпатлевку, выполните следующие действия, чтобы скопировать содержимое файла

  • Выделите текст, который вы хотите скопировать (вы сможете копировать страницу за страницей )
  • нажмите ctrl+c ( он скопирует текст в буфер обмена
  • вставить в любой внешний редактор Сделал

selecting с помощью mouse и right-click copy работала в моем случае.

Я не хотел, чтобы номера строк были включены, поэтому я :set nonumber до copying.


у меня была проблема, потому что мой vim не поддерживал буфер обмена:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Я установил vim-gnome (который поддерживает буфер обмена) , а затем снова проверил:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

теперь я могу копировать и вставлять, используя "+y и " +p соответственно.


ничего выше не работало для меня на моем ноутбуке windows.

Ctrl+C отлично подходит для копирования.. но мне нужно Shift+вставить вставить !

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


для OSX, как и ответы 10342 выше, вы должны убедиться, что vim поддерживает функцию буфера обмена, сказал, что тот, который поставляется с OSX, не поддерживает буфер обмена, и что если вы запустите brew install vim он будет работать.

кроме того, что бег ви все равно заставит вас запустить preshipped OSX версии, не установлен с самогоном.

чтобы преодолеть это, я просто сгладил свою команду vim до версии brew, а не по умолчанию OSX один:

alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"

и теперь я Золотой