Неможливо скопіювати з vim в буфер обміну


54

Як сказано в назві, я не можу скопіювати з vim в системний буфер обміну. Працює Viceversa, копіювати з зовнішньої програми vim та вставляти з неї pвсе добре.

У мене встановлена ​​підтримка буфера обміну, версія vim - 7.3.429:

$ vim --version | grep clip
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+xsmp_interact +xterm_clipboard -xterm_save 

Я маю:

set clipboard=unnamedplus

в моєму, .vimrcі він встановлюється, коли я роблю:

set clipboard?

або

:echo has('clipboard')

Я використовую Ubuntu 12.04 LTS і vim всередині gnome-terminal(але у GVim така ж проблема). Будь-яка ідея?

Дякую


stackoverflow.com/questions/11489428/… Це може трохи допомогти вам.
coteyr

Ви кинули vim між введенням "+ y на візуальний вибір і спробою вставити його поза?" Це не спрацює, якщо ви зробите це
Samuel Peter

@SamuelPeter Ні, я не кинув vim
gc5

1
Я зіткнувся з цим питанням, тому що я робив clipboard+=unnamedplusщось, що в налаштуваннях за замовчуванням було його відключити. Зміна clipboard=unnamedplus(наприклад, видалення інших налаштувань) працювала для мене.
JonnyRaa

Як згадував @JonnyLeeds Конфігурація set clipboard+=unnamed& set clipboard+=unnamedplusне працює під час використання y і p для спільного використання буфера обміну системи. :set clipboard?== clipboard=autoselect,exclude:cons\|linux,unnamed,unnamedplus; Після того, як я видалив перший +, який set clipboard=unnamedі set clipboard+=unnamedplus, і вона працює !! :set clipboard?==clipboard=unnamed,unnamedplus
Марсло

Відповіді:


87

Це те, що працює для мене (Ubuntu 13.10):

Перевстановіть vim як vim-gtk:

sudo apt-get install vim-gtk

виберіть те, що ви хочете використовувати за допомогою миші, а потім введіть для копіювання у буфер обміну :

"+y

вставити на vim з буфера обміну :

"+p

Я не знаю, чому, але порівняння результатів vim --versionпоказує, що звичайна установка vim є досить обмеженою порівняно з vim-gtk. Заміна vim на vim-gtk не вплинула на будь-які плагіни.


Додаткова інформація:


1
Я не можу висловити, наскільки ти мені допоміг і наскільки я щасливий зараз: D
7hi4g0

1
Цікаво, що 14.04 і звичайний VIM, і VIM-GTK мають xterm_clipboardпідтримку, але "+pне працюють у звичайному VIM. Замість того, щоб притискати до буфера обміну, це збільшує оман вибраних ліній.
dotancohen

1
В vim-gtkкінцевому підсумку встановлення працювало для мене в 14.04.4, але я переживав речі дещо інакше, ніж інші, хто коментує. До vim-gtkвстановлення, vim показував -xterm_clipboard(тобто не вмикається). Після установки vim-gtkвін показує (+ xterm_clipboard). Я перевіряю це vim --version | grep clip. У будь-якому випадку має сенс, що вам потрібно +xterm_clipboard!
перемогти

Це чудове рішення. Насправді, я зробив це моє перше, що потрібно зробити після встановлення нової ОС Ubuntu.
linbianxiaocao

Установка vim-gtk працювала для мене. Спасибі
Мігель Мота

6

Оригінальну відповідь я залишу нижче, тому що для інших це може бути важливо для пошуку цього питання.

Коротше кажучи, не здається, що відповідь на один розмір відповідає всім відповідям, але якщо "встановити буфер обміну = неназваний", один із "системних" буферів повинен працювати з "системного".

'* p' - це майже напевно той, який ви хочете. ( звідси )


vim - програма для клієнтів. При використанні його всередині gnome-terminal (або будь-якого емулятора терміналу) crtl + c (або будь-яка комбінація клавіш) обробляється спочатку емулятором терміналу, потім оболонкою, потім нарешті програмою (vim у цьому випадку). vim і ctrl + c майже напевно ніколи не працюватимуть, оскільки ctrl + c надсилає сигнал SIGINT до запущеного завдання. vim використовує SIGINT для зупинки інших речей, таких як припинення режиму вставки або зупинення пошукових функцій.

Іншими словами. Ctrl + C ніколи фактично не передається до VIM. SIGINT передається VIM. SIGINT має інші види використання у vim, тому використання для копіювання, ймовірно, не спрацює (і навіть якщо ви можете змусити це, не гарна ідея).

Натомість спробуйте дотримуватися Ctrl + Shift + C та Ctrl + Shift + V (є й інші, але я вважаю, що вони поміщають текст у буфер обміну системи)

Щоб бути справедливим, я мало знаю про gvim.


Можливо, я вас збентежив .. Я сказав, що використовую ctrl-cVIM VIM та вставлення p, але в vim, я знаю, що мені доведеться використовувати y.. Я відредагую своє запитання
gc5

1
LOL у мене ще не було кофеїну, вибачте.
coteyr

5

Використовуйте у своєму vimrc:

set mouse=a

Це дозволить вам вибирати та копіювати вручну за допомогою миші.


3

На додаток до прийнятої відповіді , якщо ви працюєте віддалено над SSH (наприклад, над tmuxдекількома панелями з різними vimпроцесами, між якими ви хочете копіювати), вам також потрібно експортувати ваш X-дисплей, оскільки vimвін використовується xterm-clipboardдля взаємодії між різними процесами. Ви можете встановити екран X, запустивши

export DISPLAY=:0.0

Це потрібно виконати до vim запуску та під будь-якою іншою оболонкою.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.