Как сказано в заголовке, я не могу скопировать из 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 такая же проблема). Есть идеи?
Спасибо
Это то, что работает для меня (Ubuntu 13.10):
Переустановите vim как vim-gtk:
sudo apt-get install vim-gtk
выберите то, что вы хотите, с помощью мыши - затем введите , чтобы скопировать в буфер обмена :
"+y
для вставки в vim из буфера обмена введите:
"+p
Я не знаю почему, но сравнивая выходные данные vim --version
показывает, что обычная установка vim весьма ограничена по сравнению с vim-gtk. Замена vim на vim-gtk не повлияла ни на какие дополнения.
Дополнительная информация:
Я собираюсь оставить исходный ответ ниже, потому что это может быть важно для других, которые ищут этот вопрос.
Короче говоря, не существует единого размера, подходящего для всех ответов, но с '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 (есть и другие, но я считаю, что они помещают текст в системный буфер обмена)
Честно говоря, я не знаю много о гвиме.
Используйте в вашем vimrc:
set mouse=a
Это позволит вам выбирать и копировать вручную с помощью мыши.
В дополнение к принятому ответу , если вы работаете удаленно по SSH (например, по tmux
с несколькими панелями с разными процессами vim
, между которыми вы хотите копировать), вам также необходимо экспортировать Ваш дисплей X, поскольку vim
использует xterm-clipboard
для взаимодействия между различными процессами. Вы можете установить отображение X, выполнив
export DISPLAY=:0.0
. Это необходимо запустить до запуска vim
и в любой другой имеющейся у вас оболочке.
Я обнаружил в Ubuntu 16.04, что мне нужно vim-gui-common
установить, чтобы "+y
работал.