Вопрос или проблема
Я не могу скопировать из vim в системный буфер обмена. В обратную сторону работает, копирование вне 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 – это программа командной строки. Когда вы используете его в gnome-terminal (или любом другом терминальном эмуляторе), crtl+c (или любая комбинация клавиш) сначала обрабатывается терминальным эмулятором, затем оболочкой, а затем только программой (в данном случае vim). vim и ctrl+c почти наверняка никогда не сработают, потому что ctrl+c посылает сигнал SIGINT выполняемой задаче. vim использует SIGINT для остановки других вещей, таких как выход из режима вставки или остановка функций поиска.
Другими словами, Ctrl+C никогда не передается VIM. VIM передается SIGINT. SIGINT имеет другие использования в vim, поэтому использовать его для копирования, вероятно, не получится (и даже если можно, это не лучшая идея).
Вместо этого попробуйте использовать Ctrl+Shift+C и Ctrl+Shift+V (существуют и другие, но я думаю, что эти добавляют текст в системный буфер обмена)
Честно говоря, я мало знаю о gvim.
Используйте в вашем vimrc:
set mouse=a
Это позволит вам выделять и копировать вручную с помощью мыши.
В дополнение к принятому ответу, если вы работаете удаленно через SSH (например, через tmux
с несколькими панелями с разными процессами vim
, между которыми вы хотите копировать), вам также нужно экспортировать дисплей X, так как vim
использует xterm-clipboard
для интерфейса между различными процессами. Вы можете установить дисплей X, выполнив
export DISPLAY=:0.0
Это необходимо выполнить перед запуском vim
и в любой другой оболочке.
Я обнаружил, что на Ubuntu 16.04 мне нужно установить vim-gui-common
, чтобы "+y
работало.
та же проблема. Кажется, добавив это в ~/.vimrc, заработало для меня:
set clipboard=exclude:.*
.
Ответ или решение
Проблема с невозможностью скопировать текст из Vim в системный буфер обмена является довольно распространенной, особенно среди пользователей, работающих в среде Linux. Рассмотрим детально возможные решения этой проблемы на примере предоставленной ситуации.
Описание проблемы и начальные условия:
Пользователь жалуется, что он не может копировать текст из Vim в системный буфер обмена. При этом копирование текста извне (например, из терминала в Vim с помощью команды p
) работает корректно. Установлена версия Vim 7.3.429 с поддержкой clipboard, Gnome Terminal используется в качестве терминала на Ubuntu 12.04 LTS. Инструкция set clipboard=unnamedplus
добавлена в .vimrc
, что подтверждается проверкой через команду set clipboard?
. Однако, проблема все же остается.
Возможные решения:
-
Установка Vim с поддержкой графического интерфейса:
Одним из наиболее распространенных решений этой проблемы является переустановка Vim с поддержкой графического интерфейса (например,vim-gtk
). Команда для установки:sudo apt-get install vim-gtk
Данная версия включает более продвинутую поддержку взаимодействия с системным буфером обмена.
-
Копирование и вставка с помощью клавиатуры:
После установки версииvim-gtk
, используйте команды:"+y
для копирования текста в системный буфер."+p
для вставки текста из системного буфера обмена в Vim.
-
Учёт особенностей терминала:
Поскольку Vim — это консольное приложение, при работе вgnome-terminal
комбинации клавишCtrl+C
иCtrl+V
могут не работать, так как они обрабатываются самим терминалом. Можно использоватьCtrl+Shift+C
иCtrl+Shift+V
для управления копированием и вставкой на уровне терминала. -
Использование мыши:
Добавление в.vimrc
следующей строки позволит использовать мышь для выделения и копирования текста вручную:set mouse=a
-
Важно для удаленной работы (SSH):
Если вы работаете удаленно через SSH, необходимо обеспечить экспорт X display для корректной работы с буфером обмена:export DISPLAY=:0.0
Это должно быть выполнено до запуска Vim и для любого используемого терминала.
-
Установка необходимых пакетов:
На некоторых системах также может потребоваться установка пакетаvim-gui-common
. -
Изменение настроек Vim:
В случае сложностей, можно добавить в.vimrc
следующую строку:set clipboard=exclude:.*
Эти шаги помогут обеспечить полноценную работу Vim с системным буфером обмена. Рекомендуется использовать указанные настройки и установить соответствующие версии программ для достижения максимальной совместимости и удобства работы.