Невозможно скопировать из 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 при визуальном выделении и пытаясь вставить вне vim? Это не сработает, если вы это сделаете
Сэмюэль Питер

@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

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

Короче говоря, не кажется, что один размер подходит всем ответам, но с 'set clipboard = unnamedplus' один из '* p' или '+ p' должен работать из "системного" буфера обмена.

'* p' почти наверняка тот, который вы хотите. ( отсюда )


vim - это программа cli. При использовании его внутри gnome-терминала (или любого эмулятора терминала) 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-cВНЕШНЮЮ vim и вставив с p, но в vim я знаю, что должен использовать y.. Я отредактирую свой вопрос
gc5

1
Извините, у меня еще не было кофеина.
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.