Невозможно скопировать из vim в системный буфер обмена

Как сказано в заголовке, я не могу скопировать из 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 такая же проблема). Есть идеи?

Спасибо

54
задан 2 February 2017 в 19:09

5 ответов

Это то, что работает для меня (Ubuntu 13.10):

Переустановите vim как vim-gtk:

sudo apt-get install vim-gtk

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

"+y

для вставки в vim из буфера обмена введите:

"+p

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


Дополнительная информация:

0
ответ дан 2 February 2017 в 19:09

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

Короче говоря, не существует единого размера, подходящего для всех ответов, но с '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 (есть и другие, но я считаю, что они помещают текст в системный буфер обмена)

Честно говоря, я не знаю много о гвиме.

0
ответ дан 2 February 2017 в 19:09

Используйте в вашем vimrc:

set mouse=a

Это позволит вам выбирать и копировать вручную с помощью мыши.

0
ответ дан 2 February 2017 в 19:09

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

export DISPLAY=:0.0

. Это необходимо запустить до запуска vim и в любой другой имеющейся у вас оболочке.

0
ответ дан 2 February 2017 в 19:09

Я обнаружил в Ubuntu 16.04, что мне нужно vim-gui-common установить, чтобы "+y работал.

0
ответ дан 2 February 2017 в 19:09

Другие вопросы по тегам:

Похожие вопросы: