Как скопировать выделение в буфер обмена OS X

225

У меня есть область, выбранная в Vim. Как я могу скопировать его в буфер обмена OS X?

(Буфер обмена OS X может быть записан через канал /usr/bin/pbcopy)

ʞɔıu
источник
4
тогда просто визуальный выбор "+y.
zx1986
2
Vim, который поставляется с OSX , не имеет +clipboardили +xterm-clipboard. Вы можете проверить это с vim --version | grep clipboard. Это можно решить с помощью brew install vim --with-client-server.
LondonRob
1
Или используйте MacVim, который предлагает версию для командной строки, которая может быть вставлена ​​в ваш путь по символической ссылке, ~/binа затем ~/binвставлена ​​в ваш путь перед обычными vim и синонимами, установленными системой.
Оловянный Человек
Основываясь на том, что написал @ zx1986, я сделал три вещи: 1) Добавил следующее в мой ~ / .bashrc, чтобы псевдоним vi / vim к режиму терминала MacVim: alias vi='mvim -v'2) Добавил следующее в ~ / .vimrc, который отображает Ctrl + c (не Cmd + c): vnoremap <C-c> "+y3) Настроил Keyboard Maestro для ввода последовательности ^cклавиш (Ctrl + C) при работе в терминале (в моем случае iTerm2). Это позволяет использовать Cmd + c для копирования текста в буфер обмена OSX. чтобы его можно было вставить в другие приложения OSX.
Нил Гриффин

Ответы:

79

В зависимости от того, какую версию Vim я использую, я могу использовать +регистр для доступа к буферу обмена.

« Совместное использование буфера обмена Mac OS X » может иметь некоторые идеи, которые также подойдут вам.

Крис Этли
источник
5
Для людей с VIM, скомпилированным без + буфера обмена, приведенная выше ссылка является отличным ресурсом, позволяющим обойтись без перекомпиляции VIM
sdjuan
ОЧЕНЬ ВАЖНАЯ ДЕТАЛИ !!! Если у вас есть Vim-версия 7.3, тогда это может не сработать, но если у вас есть Vim-версия 7.4, то это сработает (а иногда вам даже не нужно делать весь "+ y). И вы проверяете это просто запись> vim в терминале, а затем номер версии, когда вы запускаете его
Zeth
этот ответ такой же, как этот stackoverflow.com/a/680271/2652524
Гуджарат Сантана
1
"+Регистр существует только для X11 (если вы не строить ВИМ с поддержкой + X11, который установит сервер X11 XQuartz в OS X), в то время как OS X не использовать X11 в качестве окна системы.
nn0p
Что делать, если оба - vimи macvimесть + буфер обмена. И clipboard=unnamedдобавил к ~/.vimrc? Выглядит как настоящая боль, перепробовал все обходные пути и в настоящее время должен использовать spacemacs, когда я знаю, что мне придется использовать глобальный буфер обмена :)
Николай Фоминых,
240

Для MacVim и Windows Gvim просто добавьте следующее к своему ~/.vimrc:

set clipboard=unnamed

Теперь все операции , такие как yy, Dи Pработа с буфером обмена. Нет необходимости ставить перед ними префикс "*или "+.

Джордж В. Рейли
источник
2
Я провел все утро, выясняя, как отделить команды y, d и P от ⌘-C и ⌘-V, которые MacVim разрешает для вас, и, наконец, столкнулся с этим. Конечно же, я добавил это в свой vimrc, когда был несовершеннолетним vim, и с тех пор это меня расстраивало.
Джонатан Думайн
2
Для новичков в MacVim его можно использовать из терминала с -vфлагом ( mvim -v). У меня есть псевдоним Vim и Mvim.
рк-нб
3
Как упомянуто @VincentG в своем комментарии выше, это действительно работает с версиями Vim для терминалов, но для тех, кто использует tmux в терминале, необходимо следовать одному из решений, подробно описанных здесь: stackoverflow.com/a/11421329/456584
user456584
3
это должен быть принятый ответ - пока :echo has("clipboard")говорит 1, что это относится к MacVim, и у меня есть viпсевдоним, который работает mvim -vвместо этого
jdsumsion
1
@ Джозеф, если :versionпоказывает, -clipboardто сборка Vim не поддерживает функцию буфера обмена. Я говорил о MacVim - приложении с графическим интерфейсом.
Джордж В. Рейли
136

Если буфер обмена включен, вы можете скопировать выбранную область в буфер обмена, нажав "*y

Чтобы увидеть, включен ли он, запустите vim --versionи найдите +clipboardили -clipboard. Например, он не включен по умолчанию в моем окне 10.5.6:

% который vim
/ USR / бен / ВИМ
% vim - версия
VIM - Vi IMproved 7.2 (9 августа 2008 г., составлено 11 ноября 2008 г. 17:20:43)
Включенные патчи: 1-22
Составлено _www@b77.apple.com
Обычная версия без графического интерфейса.  Включенные функции (+) или нет (-): 
... 
-clientserver -clipboard + cmdline_compl + cmdline_hist + cmdline_info + комментарии
 ...

Если бы он был скомпилирован +clipboard, я мог бы использовать "*регистр для доступа к системному буферу обмена.

Я скачал исходный код 7.2 и скомпилировал его (просто как tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install), и буфер обмена был включен:

% который vim
/ USR / местные / бен / ВИМ
% vim - версия
VIM - Vi IMproved 7.2 (9 августа 2008 г., составлено 24 марта 2009 г. 17:31:52)
Составлено rampion@Myrrhy.local
Обычная версия с GTK2 GUI.  Включенные функции (+) или нет (-): 
... 
+ клиентский сервер + буфер обмена + cmdline_compl + cmdline_hist + cmdline_info + комментарии
 ...

Однако даже после компиляции я не смог скопировать в буфер обмена при запуске vim в Terminal.app, только в X11.app.

колокольчик-рапунцель
источник
3
Я скомпилировал последнюю версию с + clipboard, и теперь нативный буфер обмена работает с ним как регистр *. Кроме того, установка «set clipboard = unname» в вашем файле .vimrc делает системный буфер обмена типичным. На самом деле я использовал github.com/adamv/homebrew/blob/duplicates/Library/Formula/… эту формулу доморощенного, чтобы построить и скомпилировать ее.
rado
Хм, я не уверен, почему Vim не появился в моем Homebrew, но я скопировал его в / usr / local / Library / Formula, запустил brew install vim, и это не удалось с "ld: библиотека не найдена для -lruby-static ». Я использую RVM и был на 1.8.7. Когда я переключился на 1.9.2, ошибка была "ld: библиотека не найдена для -lruby.1.9.1". Решением было использовать систему Ruby, сначала выполнив команду rvm use.
посмотрите
9
Немного проще, чем искать слово «буфер обмена» в том, что обычно представляет собой длинный список функций: делать :echo has("clipboard"). Если он показывает 0, он не скомпилирован. Если он показывает 1, это так.
Раврон
3
Вы также можете получить Vim с помощью буфера обмена с помощью homebrew: brew install vim
Антон Коваль
4
Осторожно! У меня была +clipboardверсия, но я установил, --with-client-serverкоторая позволяет +x11, и попытка скопировать / вставить в x11 в терминале vim на macOS не работает :) Мне пришлось переустановить без +clientserver.
Джаква
96

Вы можете визуально выбрать текст и набрать :w !pbcopy<CR>

Или вы можете включить приведенные ниже сопоставления клавиш в ваш ~/.vimrcфайл. Они вырезать / скопировать текст в визуальном режиме в буфер обмена операционной системы.

vmap <C-x> :!pbcopy<CR>  
vmap <C-c> :w !pbcopy<CR><CR> 

источник: http://drydevelopment.com/blog/vim-pbcopy-on-os-x

user242065
источник
6
Вы также можете выбрать текст из командной строки, например: 1,10w! Pbcopy, чтобы скопировать строки 1-10 в буфер обмена. Символ w важен вместе с пробелом после него, чтобы сохранить оригинальный текст на месте. Ссылка на источник выше не работает, но здесь есть обсуждение: vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing
sdjuan
Я следовал этому, чтобы заставить это работать в tmux: superuser.com/questions/231130/…
Wex
@Wex ссылка была исправлена
SnoringFrog
2
Обратите внимание, что это работает только для выделения целых строк. Кажется, это не работает, если вы хотите выбрать только часть строки. stackoverflow.com/questions/16196826/…
Кевин Уилер
1
@Kevin Wheeler: вы можете попробовать с помощью следующей команды, которая может решить не-копию копирования noremap <silent> <leader> y: <CR>: let @ a = @ "\ | execute" normal! vgvy "\ | let res = system (" pbcopy ", @") \ | let @ "= @ a <CR>
dragonxlwang
38

двойная кавычка звездочка ( "*) перед любой командой yank приведет к тому, что результаты будут скопированы в буфер копирования. Это работает для Windows и Linux тоже.

Пол Томблин
источник
11
просто, кажется, испускает характер колокола и никакого другого эффекта для меня
--ıu
3
В X11 Vim "* является ПЕРВИЧНЫМ", + - CLIPBOARD, а SECONDARY не получает именованный регистр. (Не то, чтобы кто-нибудь использовал это ...)
ephemient
В совершенстве. Действительно помогает, особенно с выбором блока (Ctrl-V).
Соник
Поскольку вопрос был конкретно о Mac OS X, добавить, что он работает для Mac "тоже", не нужно.
Пол Томблин
@PaulTomblin хорошо, достаточно справедливо :-)
apprenticeDev
26

На macos 10.8 vim компилируется, -clipboardпоэтому для использования "*yвам нужно будет перекомпилировать. К счастью brew install vim, вы легко скомпилируете новую версию, и она будет +clipboard.

Nikola
источник
1
Что-то иметь в виду - довольно странно, brew install vimс обновлениями vi, а не vim . Так что вам, возможно, придется по-разному совмещать псевдонимы после установки vim с помощью homebrew.
Шридхарама
18

Визуально выберите текст и введите:

ggVG
!tee >(pbcopy)

Который я нахожу лучше, чем:

ggVG
:w !pbcopy

Так как не появляется подсказка: «Нажмите клавишу ВВОД или введите команду для продолжения»

Джеймс Скривен
источник
До сих пор копирует всю строку
Карл Покус
11

Если вы используете MacPorts, вы можете обновить VIM, чтобы включить поддержку буфера обмена через:

port install vim +x +x11

Теперь вы используете "+регистр, чтобы вытянуть ваш текст прямо в буфер обмена Mac. Работает как шарм.

Мэтт Хьюз
источник
1
Это как раз то, что мне было нужно. Нужно только убедиться, что $ PATH указан правильно, и вы получаете / opt / local / bin / vim, а не Apple vim.
Гарет
8

Если вы используете MacOS X:

$ brew install vim
$ vim --version
VIM - Vi IMproved 7.4 [...]

Затем добавьте в свой .vimrc:

set clipboard=unnamed

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

Хосе Албан
источник
содержимое дергается, но я не могу вставить вне VIM.
prayagupd
5

Используйте Homebrew's vim :brew install vim

Mac (по состоянию на 10.10.3 Yosemite) поставляется с предустановленным системным vim, который не имеетclipboard включен флаг.

Вы можете либо скомпилировать vim для себя и включить этот флаг, либо просто использовать vim Homebrew, который правильно настроен.

Чтобы убедиться в этом, ознакомьтесь со стоковой системой vim с /usr/bin/vim --version

Вы увидите что-то вроде:

$ /usr/bin/vim --version

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

Обратите внимание -clipboard

С vim доморощенного вы вместо этого получаете

$ /usr/local/bin/vim --version

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 10 2015 14:04:42)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
... +clipboard ...

Обратите внимание +clipboard

Evan
источник
1
Тогда как сделать копию?
Замороженное Пламя
с версией vim от brew я смог сделать то, что хотел: я выделил строки, используя Vтогда, :w !pbcopyи это сработало
davidpm4
5

Если ваш Vim не скомпилирован с буфером обмена, вы хотите скопировать выделенный текст вместо целых строк, не хотите устанавливать MacVim или другой графический интерфейс, самое простое решение - добавить эту строку в ваш .vimrc:

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

Чтобы использовать его, просто визуально выделите текст, который вы хотите скопировать, а затем Control- C. Если вы хотите получить полное объяснение этой строки, прочитайте « Как скопировать в буфер обмена на vim ».

Songz
источник
но это также дает мне 2 черные линии после того, как текст скопирован
Nic Wanavit
4

Я использовал:

map <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

Это сработало очень хорошо.

user3133576
источник
3

Вы можете использовать MacVim когда вы на Mac, чтобы легко получить доступ к буферу обмена с помощью стандартных клавиш ОС.

Он также полностью обратно совместим с обычным Vim, так что мне даже не нужно иметь отдельный .vimrc.

matpie
источник
Я использую MacVim, а затем вставил символические синонимы командной строки vim в my, ~/binчтобы переопределить значения по умолчанию.
Оловянный Человек
2

Команда-C? По крайней мере, это работает для vim, запущенного из Terminal.app для текста, выделенного мышью.

mouviciel
источник
6
хороший наивный ответ , но выход ломается , если вы используете вертикально расщепленные подокна в Vim (что есть на самом деле я имею в виду), или если результат больше , чем один экран терминала
ʞɔıu
3
Вы правы, я не думал об этих случаях. Я оставляю свой ответ только для того, чтобы другие не давали похожие бесполезные ответы.
Mouviciel
2

Fakeclip реализует +и *буферы , если они изначально не поддерживаются.

УДАЛЕНО
источник
2

Моей главной проблемой была версия Vim по умолчанию для OSX. Добавлена ​​установка через homebrew+clipboard в сборку.

Вы можете проверить с помощью:

vim --version

чтобы увидеть, если он говорит -clipboardили +clipboard.

frbl
источник
2

если у вас есть +clipboardопция в вашей установке Vim (вы можете проверить с помощью :version) и вы находитесь в визуальном режиме, вы можете сделать "+yэто. Выделите выделение в буфер, +который является буфером обмена.

Я добавил следующие карты в мой vimrc, и он отлично работает.

vmap <leader>y "+y : С этим я могу сделать leader keyпоследующие по yскопировать в буфер обмена в визуальном режиме.

nmap <leader>p "+p : С этим я могу сделать leader keyпоследующие поp наклеить из буфера обмена в обычном режиме.

PD: В Ubuntu мне пришлось установить vim-gtk, чтобы получить +clipboardопцию.

Андрес Хазар
источник
0

на Mac, когда что-то еще работает - выберите мышью, щелкните правой кнопкой мыши и выберите «Копировать». уфф

Том
источник
0

В настоящее время я нахожусь на OS X 10.9, и мои усилия по компиляции vim с + xterm_clipboard ничего не принесли. Поэтому мое текущее решение - использовать MacVim в режиме терминала с опцией set clipboard=unnamedв моем файле ~ / .vimrc. Работает идеально для меня.

Ярослав Мельничук
источник
0

Что сработало для меня в моем .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif
Магид
источник
0

Для Mac - удержание optionклавиши с последующим ctrl Vпри выборе текста делало свое дело.

markroxor
источник
0

Shift cmd c - установить режим копирования. Перетащите мышь, выберите текст, cmd c, чтобы скопировать выделенный текст, Cmd v, чтобы вставить

user518066
источник
-1

Для пользователей Ubuntu пакет, который вы хотите получить для использования в буфере обмена, заполнен vim. Другие пакеты (vim-tiny, vim) не включают функцию буфера обмена.


источник
vim-full больше не является именем пакета Ubuntu. Пакет vim по умолчанию (7.3.154) имеет минимальный набор функций, включая -clipboard. Установка vim-gtk или vim-nox обеспечит + версию буфера обмена.
спазм
-1

Копирование в буфер обмена с использованием регистра «+» или «*» не работает?

Причина: ваша конкретная версия vim была скомпилирована без поддержки буфера обмена. Наберите vim --verion на консоли, и вы увидите -xterm_clipboard . Установка vim с пакетами gui решает эту проблему. В Ubuntu вы можете сделать это, набрав на shell:

sudo apt-get установить vim-gui-common

Теперь снова выполните vim --version на консоли. Скорее всего, вы бы сейчас увидели + xterm_clipboard !!

Итак, теперь вы можете скопировать что угодно в буфер обмена, используя register + (например, "+ yy для копирования текущей строки в буфер обмена)

VineetChirania
источник
-1

Я сталкиваюсь с той же проблемой, после установки macvimвсе еще не работает, наконец, я нашел способ решить:

Попробуйте сначала удалить все vim,

brew uninstall macvim

brew uninstall --force vim

и переустановите macvim

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

Тогда вы можете использовать "*yили "+y, не нужноset clipboard=unnamed

Брюс
источник
-2

Command-c у меня работает как в MacVim, так и в терминале.

Мэтт Уильямсон
источник
Традиционное копирование и вставка не работает с буферами Vim и может полностью испортить ваше форматирование. Например, копирование 15 строк вложенных объектов с помощью Cmd + C, а затем вставка с помощью Cmd + V приведет к потере понимания вложенности. Скорее всего, это зависит от ваших настроек в вашем .vimrc и может быть очень конкретным
netpoetica