Подтвердить что ты не робот

Gvim: Простое копирование в системный буфер обмена

Я использую gVim для Ubuntu 10.10. Я хочу скопировать (yank) текст в системный буфер обмена, чтобы скопированный текст был доступен в других приложениях.

Это работает с "+y. Но я хочу, чтобы он работал с y.

Я попытался отобразить y в "+y, но затем yy больше не работает (поскольку он создает "+y"+y).

Я также пробовал :set clipboard=unnamed но это работает только в другом направлении: текст в системном буфере обмена можно вставить с помощью p.

4b9b3361

Ответ 1

Вы пытались выполнить сопоставление с этой командой:

noremap y "+y

? Это сопоставление содержит серьезную ошибку: оно отображает y в нормальном, визуальном и ожидающем операторов режимах, в то время как вам нужны только нормальные и визуальные режимы. Используйте следующее:

nnoremap y "+y
vnoremap y "+y

Также попробуйте set clipboard=unnamedplus (для этого требуется хотя бы vim-7.3.74). set clipboard=unnamed работает в обоих направлениях, но он устанавливает регистр "mouse" (*), который отличается от регистра буфера обмена (+).

Ответ 2

Большинство онлайн-решений просто говорят вам, чтобы сопоставить y с "+y. Но иногда проблема заключается в том, что "+y даже не работает. Вам нужно проверить, с какими функциями был скомпилирован ваш vim.

Попробуйте следующие шаги:

  1. Откройте свой терминал, запустите vim –-version | grep xterm_clipboard vim –-version | grep xterm_clipboard
  2. Проверьте знак перед xterm_clipboard, если это знак + (плюс), перейдите к шагу 4.
  3. Если его - - (знак минус), запустите sudo apt-get install vim-gnome, затем sudo update-alternatives –config vim, выберите vim.gnome в списке (вы должны использовать правильную команду, соответствующую вашей системе). Запустите команду vim –-version | grep xterm_clipboard vim –-version | grep xterm_clipboard, теперь вы должны иметь возможность получить + (знак плюс).
  4. Проверьте, использует ли ваш системный буфер обмена регистр vim + (плюс) или * (знак звездочки), это зависит от используемой вами ОС, иногда они эквивалентны. Как проверить? Просто скопируйте случайный текст, затем откройте vim и введите :reg, проверьте, в каком регистре отображается только что скопированная строка. Если это знак + (плюс), добавьте set clipboard=unnamedplus в ваш .vimrc. Если это * (знак зодиака), добавьте set clipboard=unnamed.
  5. Проверьте это. Скопируйте что-нибудь в vim и введите :reg чтобы проверить, не изменился ли системный буфер обмена. Если это произойдет, вы получите то, что есть в этом регистре, когда вы вставите вне vim.

Ответ 3

У меня есть такая же идея, как и вы, но я делал это в течение многих лет.

nnoremap yy yy"+yy
vnoremap y ygv"+y

Обратите внимание, что теперь команда yy выполняет две вещи: сначала забирается, чтобы регистрироваться как обычно, а затем она дергается в регистр " (системный буфер обмена). Команда y делает то же самое. Это связано с тем, что я хочу сохранить несколько функций буфера обмена Vim.

Для вставки из системного буфера обмена у меня было noremap gp "+p (глобальное вклеивание), но теперь я использую отличный плагин Yankring.

Ответ 4

Выберите текст в визуальный режим, и он будет вставлен в системный буфер обмена (тот, где вы в среднем клик вставляете, я не могу вспомните точное имя).

Если вы set mouse=a, вы можете использовать мышь для визуального выбора, как и во многих других приложениях.

Ответ 5

В моем случае я иногда могу копировать из gvim в системный буфер обмена, а иногда и нет. Я нашел обходное решение, хотя я не понимаю основной проблемы. Если я скопирую текст в другое приложение (например, "Блокнот", как и в Windows 7), я могу скопировать текст из gvim и вставить его в другое место. Похоже, мне нужно сделать это для каждой копии из gvim.