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

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

Ответы [ 29 ]

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

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

11 голосов
/ 17 октября 2017

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

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


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

set clipboard=unnamedplus

10 голосов
/ 22 мая 2014

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

8 голосов
/ 27 августа 2016

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

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

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

6 голосов
/ 04 августа 2018

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

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

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

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

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

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

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

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

noremap: r! Cat ~ / temp.txt

3 голосов
/ 13 января 2018

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

ggVGy

или, проще:

:% y

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

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

в моем .vimrc

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

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

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

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

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

2 голосов
/ 10 января 2014

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

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

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

2 голосов
/ 23 августа 2015

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

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

...