Как скопировать данные между разными экземплярами vim?

41

Если я использую первый vim для копирования строки (с yy), как мне вставить в vim другого терминала (с p)? Есть какая-нибудь команда или настройки могут это сделать? Могу ли я скопировать и вставить в глобальный системный буфер обмена?

Я знаю, что возможны следующие способы, но я хочу более простой:

  1. Я не хочу выходить из первого vim и открывать второй vim.

  2. Я не хочу использовать отдельное окно (с :sp).

Сэм
источник

Ответы:

49

Сначала вы должны установить версию vim с поддержкой буфера обмена. Для размещения пользователей с неграфическими средами (например, пользователи Ubuntu Server) vimи vim-tinyне подключайтесь к этой возможности. Вы захотите установить GVim Установить GVim , который будет запускаться либо графически, либо в вашем терминале. GVim заменит vimкоманду.

Вы можете скопировать текст в «буфер вырезания» из первого vim, а затем вставить текст во второй vim. Для копирования в глобальный буфер среза используйте +регистр. "Ключ позволяет указать , какой регистр для использования при выполнении дернуло или вставить операцию.

В первом vim вставьте строку в +регистр:

"+yy

затем для вставки из +реестра во второй vim:

"+p

Для получения дополнительной информации о доступных регистрах, проверьте :help registers. Вы также можете использовать "+pдля вставки текста, скопированного из любого другого источника в вашей системе.

Джереми Керр
источник
Сколько бы это ни стоило, если вы устанавливаете GVim (пакет может называться как-то вроде vim-gnome), пункты меню очень часто будут давать вам комбинации клавиш, которые они будут вызывать.
zpletan
1
Я не хочу устанавливать Gvim. Как мне сделать это в VIM?
trusktr
1
@trusktr на самом деле это работает и в vim. В этом Q & A говорится, что вам нужен по крайней мере vim 7.3.74 (что означает Ubuntu 11.10 или новее).
поясничный
это почему-то не работает, если у вас запущен vim внутри tmux, а другой vim нормально запущен снаружи - есть ли шанс, что вы знаете, как обойти эту проблему?
serup
"*yy, "*pТакже работает. если вы нажмете :reg, вы увидите этот звездный реестр
Elquimista
20

Лучшее решение, которое сработало для меня (не требует, чтобы я изменил свои привычки связывания клавиш), находится здесь: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- напор

просто положи:

set clipboard=unnamedplus

в вашем .vimrc.

bhh1988
источник
Я действительно должен был добавить set clipboard=unnamedplusв сочетании с установленным GVim. Тем не менее, я смог использовать xfce4-терминал для Vim вместо настоящей программы GVim.
Jbrock
9

Мне нравится решение Билла, и я создал карту:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

первый в визуальном режиме копирует все в / tmp / vitmp, а второй копирует содержимое из / tmp / vitmp в файл

Самир Садек
источник
простое простое решение - по старинке - спасибо, это сделало это для меня
serup
Что мне нужно набрать в Vim после добавления этого в .vimrc?
Виталий Зданевич
Вы должны настроить vim так, чтобы вы могли использовать ключ лидера, затем y, чтобы скопировать, ключ лидера, а затем p, чтобы вставить.
Самир Садек
1
Это тот, который работает. использование "*yна серверах не работает
ospider
о мой Я часами искал эту проблему, используя vim в tmux в Docker. Мой обычный vimrc, у которого уже был безымянный / неименованный плюс, НЕ работал в vim в tmux в docker. Также я ничего не нашел в интернете. Однако, похоже, ЭТО работает на ВСЕХ машинах! В докере, на Mac и на Arch изначально. Спасибо!!
Томми
5

Я перемещаюсь между различными машинами семейства Unix и обнаружил, что следующая последовательность всегда работает для меня:

В исходной VI сессии:

  1. Используйте, ESC m aчтобы отметить первую строку
  2. Используйте, ESC m bчтобы отметить последнюю строку
  3. Используйте, :'a,'b w! xferчтобы записать диапазон в рабочий файл

В целевой сессии:

  1. Переместить курсор на строку ввода
  2. Используйте ESC :r xferдля чтения в тексте

Я знаю, что это не красиво, но это всегда работает для меня!

Билл
источник
2

На самом деле это довольно просто: установить версию с vimподдержкой буфера обмена. если vimнет, получите одно из следующих:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

После установки просто запустите vim. Вы также можете проверить, включен ли буфер обмена, выполнив:

 vim --version|grep clipboard

ты должен увидеть +xterm_clipboard.

FuzzyAmi
источник
Этот ответ помогает понять суть проблемы: включена ли в вашей версии Vim функция буфера обмена? Если этого не произойдет, ни один из этих других ответов не будет иметь никакого значения. Сделайте "vim --version" и ищите "+ буфер обмена". Я думаю, что + xterm_clipboard применяется только в том случае, если вы хотите поддержку буфера обмена X11, но если вы используете Ubuntu, вы тоже захотите этого.
Рэй
2

Возможно, вы все ненавидите этот ответ. Я работал в vi еще в 80-х годах на разных компьютерах Unix, и у меня недавно был шанс поиграть в Linux.

Мое решение для вырезания и вставки заключается в использовании Putty, работающей в Windows, для доступа к моей Linux-системе.

Putty позволяет скопировать любой текст в его окне, просто выделив его. затем вы можете перейти в другое окно / сеанс Putty и щелкнуть правой кнопкой мыши, чтобы вставить.

не может быть проще. и теперь есть VIM. Жаль, что не было в те времена, это помогло бы мне справиться с мафией Emacs.

srtour2011
источник
1

Он не совсем использует yy, но если вы выбираете текст, который хотите скопировать с помощью мыши (иногда вам может понадобиться использовать Shift- [drag]), переключитесь на другое окно терминала и выполните [средний щелчок] или Shift- [средний нажмите] там, текст будет вставлен в текущую точку вставки.

Это работает для большинства программ командной строки и графического интерфейса, а не только для vim.

Сергей
источник