Як скопіювати дані між різними екземплярами 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.


Мені потрібно було додати set clipboard=unnamedplusв поєднанні з встановленням GVim. Однак мені вдалося використовувати xfce4-terminal для Vim замість фактичної програми GVim.
jbrock

9

Мені подобається рішення Білла, і я створив картування:

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

перший копіює у візуальному режимі копіювання всього в / tmp / vitmp, а другий копіює вміст з / tmp / vitmp у файл


просте просте рішення - старий спосіб моди - дякую, що це зробило для мене
1717

Що мені потрібно ввести у Vim після додавання цього до .vimrc?
Віталій Зданевич

Ви повинні налаштувати vim, щоб ви могли скористатися клавішею лідера, а потім y, щоб скопіювати, ключ-лідер, а потім p для вставки.
Самір Садек

1
Це той, хто працює. використання, "*yздається, зламане на серверах
ospider

о мій. Я годинами шукав це питання, використовуючи vim in tmux у docker. Мій звичайний vimrc, який вже мав без назви / без назви plus, НЕ працював у vim in 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.


Ця відповідь потрапляє в основу проблеми, яка полягає в тому, чи у Вашій версії Vim включена функція буфера обміну? Якщо це не так, жоден з цих інших відповідей не матиме жодного значення. Зробіть "vim --version" і шукайте "+ буфер обміну". Я думаю, що + xterm_clipboard застосовується лише в тому випадку, якщо ви хочете підтримати буфер обміну X11, але якщо ви перебуваєте на Ubuntu, ви також захочете цього.
Рей

2

Ви, напевно, всі ненавидєте цю відповідь Я працював у vi ще у 80-х на різних комп’ютерах Unix і нещодавно мав можливість пограти в Linux.

Моє рішення вирізати та вставити - це використання Putty, що працює під управлінням Windows для доступу до моєї скриньки Linux.

Шпаклівка дозволяє копіювати будь-який txt у вікно, просто виділивши його. Ви можете перейти до іншого вікна / сеансу "Шпаклівки" та натиснути правою кнопкою миші, щоб вставити.

не може бути легше. а тепер є вим. Надто погано, що не було в мої дні, це допомогло б мені відстояти від мафії емаків.


1

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

Це працює для більшості програм командного рядка та GUI, не тільки для vim.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.