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

Вопрос или проблема

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

Возможные решения:

  1. Установка Vim с поддержкой графического интерфейса:
    Одним из наиболее распространенных решений этой проблемы является переустановка Vim с поддержкой графического интерфейса (например, vim-gtk). Команда для установки:

    sudo apt-get install vim-gtk

    Данная версия включает более продвинутую поддержку взаимодействия с системным буфером обмена.

  2. Копирование и вставка с помощью клавиатуры:
    После установки версии vim-gtk, используйте команды:

    • "+y для копирования текста в системный буфер.
    • "+p для вставки текста из системного буфера обмена в Vim.
  3. Учёт особенностей терминала:
    Поскольку Vim — это консольное приложение, при работе в gnome-terminal комбинации клавиш Ctrl+C и Ctrl+V могут не работать, так как они обрабатываются самим терминалом. Можно использовать Ctrl+Shift+C и Ctrl+Shift+V для управления копированием и вставкой на уровне терминала.

  4. Использование мыши:
    Добавление в .vimrc следующей строки позволит использовать мышь для выделения и копирования текста вручную:

    set mouse=a
  5. Важно для удаленной работы (SSH):
    Если вы работаете удаленно через SSH, необходимо обеспечить экспорт X display для корректной работы с буфером обмена:

    export DISPLAY=:0.0

    Это должно быть выполнено до запуска Vim и для любого используемого терминала.

  6. Установка необходимых пакетов:
    На некоторых системах также может потребоваться установка пакета vim-gui-common.

  7. Изменение настроек Vim:
    В случае сложностей, можно добавить в .vimrc следующую строку:

    set clipboard=exclude:.*

Эти шаги помогут обеспечить полноценную работу Vim с системным буфером обмена. Рекомендуется использовать указанные настройки и установить соответствующие версии программ для достижения максимальной совместимости и удобства работы.

Оцените материал
Добавить комментарий

Капча загружается...