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


225

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

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


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


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.


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


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 ».


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

4

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

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

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


3

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

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


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

2

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


6
хороший наивный ответ , но выход ломается , если вы используете вертикально расщепленные подокна в Vim (что есть на самом деле я имею в виду), или если результат больше , чем один экран терминала
— ʞɔıu

3
Вы правы, я не думал об этих случаях. Я оставляю свой ответ только для того, чтобы другие не давали похожие бесполезные ответы.
— Mouviciel


2

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

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

vim --version

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


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при выборе текста делало свое дело.


0

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


-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 для копирования текущей строки в буфер обмена)


-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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.