Як скопіювати вибір у буфер обміну OS X


225

У мене вибрана область у Vim. Як я можу скопіювати його в буфер обміну OS X?

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


4
просто візуальний вибір, значить "+y.
zx1986

2
ВІМ , який поставляється з 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) Налаштована клавіатура 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? Виглядає як справжній біль, спробував усі обхідні шляхи і наразі доводиться використовувати пробіли, коли я знаю, що мені доведеться використовувати глобальний буфер обміну :)
Микола Фоміних

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.
pk-nb

3
Як зазначив @VincentG в своєму коментарі вище, це дійсно працює з терміналами на базі версії Vim, але ті , які використовують tmux в терміналі необхідно слідувати одному з рішень , описаних тут: stackoverflow.com/a/11421329/456584
user456584

3
це має бути прийнятою відповіддю - доки не :echo has("clipboard")каже 1, що стосується MacVim, і я маю viпсевдонім, який працює mvim -vзамість цього
jdsumsion

1
@Joseph, якщо :versionвам показано, -clipboardтоді збірка Vim не підтримує функцію буфера обміну. Я говорив про MacVim, що є додатком GUI.
Джордж В. Рейлі

136

Якщо буфер обміну ввімкнено, ви можете скопіювати вибраний регіон у буфер обміну, натиснувши його "*y

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

%, що вим
/ usr / bin / vim
% vim - відвернення
VIM - Vi IMproved 7.2 (2008 р. 9 серпня, складено 11 листопада 2008 р. 17:20:43)
Патчі в комплекті: 1-22
Укладач: _www@b77.apple.com
Звичайна версія без GUI.  Особливості, включені (+) чи ні (-): 
... 
-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), і буфер обміну було включено:

%, що вим
/ usr / local / bin / vim
% vim - відвернення
VIM - Vi IMproved 7.2 (2008 р. 9 серпня, складено 24 березня 2009 р. 17:31:52)
Укладач rampion@Myrrhy.local
Звичайна версія з графічним інтерфейсом GTK2.  Особливості (+) чи ні (-): 
... 
+ сервер клієнта + буфер обміну + cmdline_compl + cmdline_hist + cmdline_info + коментарі
 ...

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


3
Я склав останню версію з буфера обміну +, і тепер рідний буфер обміну працює з нею як * реєстр. Крім того, встановлення "встановити буфер обміну = без назви" у вашому файлі .vimrc робить системний буфер обміну типовим. Я фактично використовував github.com/adamv/homebrew/blob/duplicates/Library/Formula/… цю формулу домашнього бріула для створення та компіляції.
радо

Хм, не впевнений, чому Vim не з’явився на моїй домашній мові, але я скопіював його в / usr / local / Library / Formula, запустив brew install vim, і він не вдався до "ld: бібліотека не знайдена для -lruby-static ". Я використовую RVM і був на 1.8.7. Коли я перейшов на 1.9.2, помилка була "ld: бібліотека не знайдена для -lruby.1.9.1". Рішенням було використання системи Ruby, спочатку виконавши систему rvm.
justsee

9
Трохи простіше, ніж пошук слова "буфер обміну" в тому, що зазвичай довгий список функцій: робити :echo has("clipboard"). Якщо він показує 0, він не компілюється. Якщо він показує 1, він є.
ravron

3
Ви також можете отримати vim, складений із буфера обміну, використовуючи домашню мову: brew install vim
Антон Коваль

4
Остерігайся! У мене була +clipboardверсія, але встановила, --with-client-serverяка дозволяє +x11, і спроба скопіювати / вставити на x11 у терміналі vim на macOS не спрацювала :) Мені довелося перевстановити без +clientserver.
jacwah

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>: нехай @ a = @ "\ | виконується" нормально! vgvy "\ | нехай res = system (" pbcopy ", @") \ | нехай @ "= @ a <CR>
dragonxlwang

38

подвійне цитування зірочки ( "*) перед будь-якою командою yank витягне результати в буфер копіювання. Це працює і для Windows, і Linux.


11
просто здається, що випромінює характер дзвоника, і ніякого іншого ефекту для мене немає
ʞɔıu,

3
У X11, V * "є PRIMARY", + - CLIPBOARD, а SECONDARY не отримує іменний реєстр. (Не те, щоб хтось ним користувався ...)
ефемія

Ідеально. Дійсно допомагає, особливо при виборі блоку (ctrl-v).
Sonique

Оскільки питання стосувалося спеціально Mac OS X, додавання, що він працює для Mac "теж", зайве.
Пол Томблін

@PaulTomblin добре, досить справедливо :-)
учень

26

На macos 10.8, vim компілюється, -clipboardтому для використання "*yвам потрібно буде перекомпілювати. На щастя, brew install vimлегко склали б нову версію для вас, і вона буде +clipboard.


1
Щось слід пам’ятати - досить химерно, brew install vimз оновленнями vi, і ні vim . Тож вам, можливо, доведеться іншим чином псевдонімувати після встановлення vim з домашньою мовою.
shridharama

18

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

ggVG
!tee >(pbcopy)

Що мені здається приємніше, ніж:

ggVG
:w !pbcopy

Оскільки не спалахує підказка: "Натисніть ENTER або введіть команду для продовження"


Досі копіює весь рядок
Карл Покус


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

Використовуйте доморощеного в ВІМ: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 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


1
Тоді як зробити копію?
Заморожене полум'я

з версією Brew від vim я зміг зробити те, що хотів: я виділив рядки, використовуючи 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 ".


але це також дає мені дві чорні лінії після скопійованого тексту
Nic Wanavit


3

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

Він також повністю сумісний із звичайним Vim, тому я навіть не повинен мати окремого .vimrc.


Я використовую MacVim, а потім позначив синоніми командного рядка vim у мої, ~/binщоб змінити значення за замовчуванням.
Олов'яний чоловік

2

команда-С? Це принаймні працює для vim, запущеного зсередини Terminal.app для тексту, вибраного мишею.


6
хороша наївна відповідь, але розбиває вихід, якщо ви використовуєте вертикально розділені підвікна Windows in vim (що фактично я маю на увазі) або якщо результат довший, ніж один екран терміналу
24ıu,

3
Ви маєте рацію, я не думав про ці випадки. Я залишаю свою відповідь лише для того, щоб не дати іншим подібних не корисних відповідей.
mouviciel


2

Моєю основною проблемою була версія за замовчуванням OSX Vim. Додано його через домашню мову+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, коли все, що здається, працює - виберіть мишкою, клацніть правою кнопкою миші виберіть копію. uff



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-full. Інші пакети (vim-tiny, vim) не містять функції буфера обміну.


vim-full більше не є ім'ям пакета ubuntu. пакет vim за замовчуванням (7.3.154) має мінімальний набір функцій, включаючи -clipboard. Встановлення vim-gtk або vim-nox забезпечить версію + буфер обміну.
spazm

-1

Копіювання у буфер обміну за допомогою реєстрації "+" або "*" не працює?

Причина: Ваша конкретна версія vim була складена без підтримки буфера обміну. ​​Тип vim - перехід на консоль, і ви побачите -xterm_clipboard . Встановлення vim з пакетами gui вирішує цю проблему. У ubuntu ви можете це зробити, ввівши оболонку:

sudo apt-get install 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.