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

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

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


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


Ответы (27)


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

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

person Chris AtLee    schedule 24.03.2009
comment
Для людей с VIM, скомпилированным без + буфера обмена, ссылка выше является отличным ресурсом для поиска обходных путей без перекомпиляции VIM. - person sdjuan; 26.12.2012
comment
ОЧЕНЬ ВАЖНАЯ ДЕТАЛИ !!! Если у вас Vim-версия 7.3, то это может не сработать для вас, но если у вас Vim-версия 7.4, то работает (а иногда вам даже не нужно делать все + y). И вы можете проверить это, просто написав ›vim в терминале, а затем номер версии, когда вы его запустите. - person Zeth; 09.09.2016
comment
этот ответ совпадает с этим stackoverflow.com/a/680271/2652524 - person Gujarat Santana; 23.09.2016
comment
Регистр "+ существует только для X11 (если вы не соберете vim с поддержкой + X11, которая установит сервер X11 XQuartz в OS X), в то время как OS X не использует X11 в качестве своей системы Windows. - person nn0p; 27.11.2016
comment
Что делать, если оба - vim и macvim имеют + буфер обмена. А clipboard=unnamed добавили в ~/.vimrc? Похоже на настоящую боль, попробовал все обходные пути и в настоящее время должен использовать spacemacs, когда я знаю, что мне придется использовать глобальный буфер обмена :) - person Nikolay Fominyh; 19.02.2017
comment
Да, из этого сообщения вики, это работает для стандартного vim в OSX: vnoremap <silent><leader>y :<CR>:let @a=@" \| execute "normal! vgvy" \| let res=system("pbcopy", @") \| let @"=@a<CR> - person hoodslide; 17.01.2019

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

set clipboard=unnamed

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

person George V. Reilly    schedule 25.03.2009
comment
Это отличный совет. Я искал это повсюду. - person andrewj; 17.03.2010
comment
Я потратил все утро на выяснение того, как отделить команды y, d и P от ⌘-C и ⌘-V, которые MacVim позволяет вам, и, наконец, наткнулся на это. Конечно же, я добавил это в свой vimrc, когда был подростком vim, и с тех пор это меня расстраивает. - person Jonathan Dumaine; 08.03.2013
comment
Для тех, кто плохо знаком с MacVim, его можно использовать из терминала с флагом -v (mvim -v). У меня есть псевдонимы vim и mvim. - person pk-nb; 29.07.2013
comment
Как упоминал @VincentG в своем комментарии выше, это действительно работает с терминальными версиями Vim, но тем, кто использует tmux в терминале, нужно будет следовать одному из решений, подробно описанных здесь: stackoverflow.com/a/11421329/456584 - person user456584; 09.06.2014
comment
это должен быть принятый ответ - пока :echo has("clipboard") говорит 1, что имеет место для MacVim, и у меня есть vi псевдоним, который запускает mvim -v вместо - person jdsumsion; 06.03.2015
comment
Как бы то ни было, у меня это не работает на OS X El Capitan в терминале. - person Joe; 05.11.2015
comment
@Joseph, если :version показывает вам -clipboard, то сборка Vim не поддерживает функцию буфера обмена. Я говорил о MacVim, приложении с графическим интерфейсом. - person George V. Reilly; 05.11.2015
comment
Я использую vim, установленный через brew в терминале. Как вы думаете, можно ли скомпилировать vim с функцией буфера обмена? - person Martin Delille; 08.11.2018
comment
спасибо @ GeorgeV.Reilly Это просто отличное решение. - person 00imvj00; 04.05.2021

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

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

% which vim
/usr/bin/vim
% vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Nov 11 2008 17:20:43)
Included patches: 1-22
Compiled by [email protected]
Normal version without GUI.  Features included (+) or not (-):
...
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
...

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

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

% which vim
/usr/local/bin/vim
% vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Mar 24 2009 17:31:52)
Compiled by [email protected]
Normal version with GTK2 GUI.  Features included (+) or not (-):
...
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
...

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

person rampion    schedule 24.03.2009
comment
Я скомпилировал последнюю версию с + буфером обмена, и теперь собственный буфер обмена работает с ним как с регистром *. Кроме того, установка set clipboard = un named в вашем .vimrc файле делает системный буфер обмена типичным. На самом деле я использовал github.com/adamv/homebrew/blob/duplicates / Library / Formula / эту формулу домашнего приготовления для ее создания и компиляции. - person rado; 14.09.2010
comment
Хм, не знаю, почему Vim не появился в моем Homebrew, но я скопировал его в / usr / local / Library / Formula, запустил brew install vim, и это не удалось с ld: library not found for -lruby-static. Я использую RVM и был на 1.8.7. Когда я переключился на 1.9.2, ошибка была ld: библиотека не найдена для -lruby.1.9.1. Решением было использовать системный Ruby, сначала выполнив rvm use system. - person justsee; 04.03.2011
comment
Немного проще, чем искать слово «буфер обмена» в том, что обычно представляет собой длинный список функций: do :echo has("clipboard"). Если он показывает 0, он не скомпилирован. Если он показывает 1, это так. - person ravron; 04.07.2013
comment
вы также можете скомпилировать vim из буфера обмена, используя homebrew: brew install vim - person Anton Koval'; 28.04.2015
comment
Обратите внимание, что если вы устанавливаете vim через homebrew, он содержит только символические ссылки vim не, vi, поэтому vi по-прежнему запускает vim, включенный в OS X. Мне потребовалось время, чтобы понять, почему буфер обмена все еще не работает. - person Johann; 12.08.2015
comment
Остерегаться! У меня была +clipboard версия, но я установил --with-client-server, который включает +x11, и попытка скопировать / вставить в x11 в терминале vim на macOS не сработала :) Мне пришлось переустановить без +clientserver. - person jacwah; 26.07.2017

Вы можете визуально выделить текст и набрать :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

person user242065    schedule 25.02.2012
comment
Вы также можете выбрать текст из командной строки, например: 1,10w! Pbcopy, чтобы скопировать строки 1-10 в буфер обмена. Символ w важен вместе с пробелом после него, чтобы сохранить исходный текст на месте. Ссылка на источник выше теперь не работает, но есть обсуждение здесь: vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing < / а> - person sdjuan; 26.12.2012
comment
@Wex Ссылка была исправлена - person SnoringFrog; 26.08.2015
comment
Обратите внимание, что это работает только для выбора целых строк. Кажется, это не сработает, если вы хотите выбрать только часть строки. stackoverflow.com/questions/16196826/ - person Kevin Wheeler; 06.10.2015
comment
@Kevin Wheeler: вы можете попробовать следующую команду, которая может решить нелинейную копию noremap ‹silent› ‹leader› y: ‹CR›: let @ a = @ \ | выполнить нормально! vgvy \ | пусть res = system (pbcopy, @) \ | пусть @ = @ a ‹CR› - person dragonxlwang; 08.03.2016

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

person Paul Tomblin    schedule 24.03.2009
comment
просто кажется, что издает характер колокольчика и никакого другого эффекта для меня - person ʞɔıu; 24.03.2009
comment
В X11 Vim * является PRIMARY, + - CLIPBOARD, а SECONDARY не получает именованный регистр. (Не то чтобы кто-нибудь им пользовался ...) - person ephemient; 24.03.2009
comment
Отлично. Действительно помогает, особенно при выборе блока (ctrl-v). - person Sonique; 28.01.2015
comment
Поскольку вопрос был конкретно о Mac OS X, добавлять, что она работает и для Mac, нет необходимости. - person Paul Tomblin; 12.08.2015
comment
@PaulTomblin, ладно, честно :-) - person apprenticeDev; 14.08.2015
comment
Лучший ответ (имо). Сработало у меня :) - person AndreasHassing; 16.01.2016

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

person nikola    schedule 31.08.2013
comment
Следует иметь в виду - как ни странно, brew install vim с обновлениями vi, а не vim. Так что после установки vim с помощью homebrew вам может потребоваться другой псевдоним. - person shridharama; 26.01.2019

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

ggVG
!tee >(pbcopy)

Что мне кажется лучше, чем:

ggVG
:w !pbcopy

Поскольку он не высвечивает подсказку: «Нажмите ENTER или введите команду, чтобы продолжить».

person James Scriven    schedule 15.06.2013
comment
По-прежнему копирует всю строку - person Karl Pokus; 28.04.2018

В моем случае мне просто нужно было сделать:

:set mouse=v

посетите исходное решение на superuser.com

person Telmo Dias    schedule 21.09.2016

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

port install vim +x +x11

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

person Matt Hughes    schedule 06.02.2010
comment
Это как раз то, что мне нужно. Просто нужно убедиться, что $ PATH верен, и вы получаете / opt / local / bin / vim, а не Apple vim. - person Gareth; 13.12.2011

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

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

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

set clipboard=unnamed

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

person Jose Alban    schedule 09.06.2015
comment
содержимое извлекается, но я не могу вставить его вне VIM. - person prayagupd; 23.04.2017

Используйте Homebrew 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 [email protected]
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

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

Вместо этого с vim homebrew вы получите

$ /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

person Evan    schedule 10.05.2015
comment
Тогда как сделать копию? - person Frozen Flame; 04.07.2015
comment
с версией vim от brew я смог сделать то, что хотел: я выделил строки, используя V, затем :w !pbcopy, и это сработало - person davidpm4; 01.02.2016

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

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

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

person songz    schedule 09.01.2014
comment
но он также дает мне 2 черные линии после копирования текста - person Nic Wanavit; 05.03.2020

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

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

Это сработало действительно хорошо.

person user3133576    schedule 03.06.2015

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

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

person matpie    schedule 24.03.2009
comment
Я использую MacVim, а затем привязал синонимы vim из командной строки к моему ~/bin, чтобы переопределить значения по умолчанию. - person the Tin Man; 09.12.2019

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

person mouviciel    schedule 24.03.2009
comment
хороший наивный ответ, но прерывает вывод, если вы используете вертикально разделенные подокна в vim (что на самом деле я имею в виду) или если результат длиннее одного экрана терминала - person ʞɔıu; 24.03.2009
comment
Вы правы, я не думал об этих случаях. Я оставляю свой ответ только для того, чтобы другие не давали подобных бесполезных ответов. - person mouviciel; 24.03.2009

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

person redacted    schedule 25.05.2009

Моя основная проблема заключалась в версии Vim для OSX по умолчанию. Установка через homebrew добавила +clipboard в сборку.

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

vim --version

чтобы узнать, написано ли там -clipboard или +clipboard.

person frbl    schedule 09.05.2015

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

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

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

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

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

person Andrés Hazard    schedule 26.10.2015

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

person Yaroslav Melnichuk    schedule 06.06.2014

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

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif
person maged    schedule 02.06.2018

Для Mac - удерживание клавиши option, за которой следует ctrl V при выделении текста, помогло.

person markroxor    schedule 10.02.2019

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

person user518066    schedule 19.07.2019

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

person Community    schedule 25.05.2009
comment
vim-full больше не является именем пакета ubuntu. пакет vim по умолчанию (7.3.154) имеет минимальный набор функций, включая -clipboard. Установка vim-gtk или vim-nox предоставит + версию с буфером обмена. - person spazm; 12.06.2012

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

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

sudo apt-get install vim-gui-common

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

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

person VineetChirania    schedule 13.08.2013

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

person tom    schedule 03.01.2014

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

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

brew uninstall macvim

brew uninstall --force vim

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

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

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

person Bruce    schedule 24.08.2017

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

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