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

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

Ответ 1

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

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

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

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

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

Ответ 2

На Mac OSX

  • скопировать выбранную часть: визуально выбрать текст (тип v или v в обычном режиме mode) и введите :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) не установлен в вашем дистрибутиве, вы, вероятно, можете найти их в репозиториях

Ответ 3

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

В Windows:

set clipboard=unnamed

В Linux установлен (vim 7.3.74 +):

set clipboard=unnamedplus

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Подведение итогов и упрощение для новичков,

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

"*yy

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

"*yG

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

Ответ 7

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

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

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

vmap <C-c> "+y

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

Ответ 8

Если вы используете 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. На данный момент у него нет других вариантов.

Ответ 9

Для 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 установить vim-gnome

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

Удачи.

Ответ 10

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

sudo apt-get install vim-gnome

Ответ 11

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

Ответ 12

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

Ответ 13

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

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


Затем вы должны поместить эту строку в ваш файл .vimrc.

set clipboard=unnamedplus

Ответ 14

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

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

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

Ответ 15

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

  1. Янки текст, который вы хотите скопировать. (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.

Ответ 16

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

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

noremap: r! cat ~/temp.txt

Ответ 17

  • Поместите set clipboard=unnamed в vimrc.
  • Выберите то, что вы хотите скопировать в режиме Visual (нажмите v, чтобы войти).
  • Вернуться в режим Normal (нажмите escape [esc]), нажмите y для копирования.
  • Если вы хотите вставить что-то из буфера обмена OS, нажмите p/P в режиме Vim Normal.

Ответ 18

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

ggVGy

или, проще:

:% г

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

set clipboard = unnamedplus

в моем .vimrc

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

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

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

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

Прости меня за мой английский! :-)

Ответ 19

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

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

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

Ответ 20

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

Поэтому в этом случае вам нужно нажать " Space + y или " Space * y

Ответ 21

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

Ответ 22

У меня была проблема, потому что мой 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 соответственно.

Ответ 23

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

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

Ответ 24

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

За исключением того, что запуск vi все равно заставит вас запускать предварительно установленную версию OSX, а не ту, которую вы установили из brew.

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

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

и теперь я золотая

Ответ 25

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

Мне не нужны номера строк, поэтому я :set nonumber до copying.

Ответ 26

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

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

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

Ответ 27

Shift + Ctrl + C, если вы работаете в графическом режиме Linux, но сначала вам нужно выбрать то, что вам нужно скопировать.

enter image description here

Ответ 28

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

Я обнаружил, что если вы снимите отметку:

View → Allow Mouse Reporting

из меню терминала вы сможете скопировать в буфер обмена, используя

command + c

снова.

Ответ 29

В моем случае выбор текста путем выделения (щелчка и перетаскивания) моей мышью заставлял vim переходить в визуальный режим.

В любом случае, на Mac самое простое решение - использовать fn + mouse click and drag чтобы избежать входа в визуальный режим.

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