Скопіюйте текст з однієї області tmux в іншу (використовуючи vim)


133

У мене два файли, відкриті в vim, кожен в одній панелі tmux. Я хотів би скопіювати, скажімо, 10 рядків з одного файлу в інший.

Як я можу це зробити, не використовуючи миші Copy-> Paste?


2
Ви можете залучити tmux , але зазвичай існують більш прості способи. Чи обидва примірники Vim на одній (локальній?) Машині? Зазвичай я просто використовую для цього тимчасовий файл (тобто візуально вибирайте рядки :w /tmp/lines, а потім :r /tmp/linesв іншому випадку). Або якщо ваш Vim знає, як спілкуватися з вашим системним буфером обміну, ви можете скористатися +або *зареєструватися, щоб уникнути тимчасового файлу.
Кріс Джонсен

Відповіді:


193

Вам доведеться використовувати ярлики tmux. Якщо припустити, що ваш ярлик команди tmux є типовим: Ctrl+ b, тоді:

  1. Ctrl+ b, [Введіть режим копіювання (?).

  2. Перемістіть на початок / кінець тексту для виділення.

  3. Ctrlspace

    Почніть виділяти текст (на Arch Linux). Коли я компілював tmux з джерела на OSX та інших Linux, Spaceзазвичай сам по собі працює. Вибраний текст змінює кольори, тож ви дізнаєтесь, чи працювала команда.

  4. Перейдіть до протилежного кінця тексту, щоб скопіювати.

  5. Alt+ wКопіює вибраний текст у буфер обміну tmux. (У Mac використовується Esc+ w.)

  6. Перемістіть курсор до протилежної області tmux або зовсім іншого вікна tmux. Покладіть курсор туди, де ви хочете вставити текст, який ви тільки що скопіювали.

  7. Ctrl+ b, ]Вставити скопійований текст із буфера обміну tmux.

tmux дуже хороший у зіставленні команд на спеціальні комбінації клавіш.

Дивіться Ctrl+ b, ?для повного списку встановлених комбінацій клавіш.


4
Дякую. Просто sidenode: Alt + w не працював на Mac. За замовчуванням Alt був відображений у Esc. Отже, це Esc + w.
Каран

11
якщо ви використовуєте screenярлики: Ctrl + A [(введіть режим копіювання), Space(почати виділення), Enter(закінчити виділення), Ctrl + A ](вставити).
jfs

11
Варто зазначити, що "enter" працює для мене, тоді як alt + w не робить.
Ілля Лінн

3
Як зазначається у awhan.wordpress.com/2010/06/20/copy-paste-in-tmux , якщо у вас є прив'язки ключів vi, крок 5 слід замінити на Enterключ.
Інь Ксьонг

2
що якщо мені потрібно скопіювати та вставити в текстовий редактор? Чомусь, здається, не вибрано цей вибраний текст навіть після натискання «Enter» після вибору тексту.
Удай

33

На жаль, я поки що не можу додати коментар до відповіді Алекса Ліха, тому я збираюся тут включити додаток для користувачів Mac OS X:

  1. Enter Копіює вибраний текст

1
Дякую! Я на Ubuntu Xenial, використовуючи byobu/ tmuxз усіма налаштуваннями за замовчуванням, це спрацювало, Alt + w не зробив.
Андреа Зонка

1
Це не працює на OS X Yosemite з tmux 2.0, а також alt + w, а також esc + w :(
weberc2

Працює і для мене в Windows за допомогою терміналу Zoc.
jdhao

15

Якщо ви використовуєте vim та tmux на macOS (випробувано на macOS 10.12.2, tmux 2.3):

(Припустимо, що комбінація ключових префіксів tmux є prefix. Префікс ctrl+ bза замовчуванням.)

  • Копія:
    1. Натисніть prefix+, [щоб увійти в режим копіювання.
    2. Використовуйте клавіші зі стрілками для переходу до початку та закінчення вибору тексту.
    3. Натисніть ctrl+ space(Якщо ви встановили ctrl+ spaceяк префікс, замість нього натисніть ctrl+ space+ space)
    4. Використовуйте клавіші зі стрілками для переходу до іншої сторони вибору.
    5. Натисніть ctrl+ w.
  • Вставити:
    1. Натисніть prefix+ ]у режимі вставки.

8

Я підключаюся до свого сервера CentOS на машині Windows за допомогою клієнтського ssh- терміналу ZOC . Ось що для мене працює:

  • Введіть режим копіювання: <prefix>+[
  • Початкова копія: <Space>
  • Скопіюйте текст: <Enter>
  • Вставити текст: <prefix>+]

2

Ви можете використати системну дошку для кліпів з "* y і" * p замість звичайних y і p.


1
Для використання системного буфера обміну вам потрібно "+2yyскопіювати - скопіювати два рядки в буфер обміну X11 "+dd- лінію зрізу до буфера обміну X11 "+p- вставити буфер обміну X11
Патрик

Чи потрібно мені щось вводити, перш ніж використовувати ці команди?
Thomas Ahle

@ThomasAhle, немає .. його буквально подвійні лапки ( "), а потім плюс (+) , а потім 2ys (у). Переконайтеся , що ви перебуваєте в нормальному режимі. Якщо ви перебуваєте в нормальному режимі, ви повинні бути в змозі використати h,j,k,lдля Я також бачив іноді в моїй програмі Ubuntu VM, "+" реєстр зникає з невідомих причин. Щоб перевірити, чи є у вас +регістр, ви можете ввести :regта перевірити, чи є рядок "+у першому стовпчику.
alpha_989

Так, це воно, це відповідь. Набагато простіше, ніж інші запропоновані (використовуючи копіювати / вставляти tmux), і це не переплутує номери рядків. Чи це призведе до виникнення проблем, якщо ви перезавантажили стандарт yі pдо "+yі "+p?
ryan

1

Якщо у вас vimвідкрито, краще скопіювати текст копії vim для копіювання тексту.

Tmux copy paste буде працювати, проте є кілька недоліків.

По-перше, при копіюванні декількох рядків тексту вам доведеться вибрати кілька рядків. Копія паста Tmux зазвичай не розуміє, чи vimє номери ліній або є жолоби в жолобі vim (наприклад, відносні числа / абсолютні числа). Як результат, вони копіюватимуть і ці.

По-друге, я виявив, що якщо текст має певне для конкретної мови форматування, і ви безпосередньо намагаєтесь скопіювати пасту за допомогою tmux для vim, це зіпсує форматування. Цього можна уникнути, використовуючи set paste!. Однак для цього потрібно значно більше роботи.

Використовуйте "+yдля копіювання та "+pвставки

Vimспоконвічно надає спосіб копіювання пасти між буфером vim та системним буфером, використовуючи "+yабо "*y. Потім вставляємо за допомогою "+pабо "*p. Це дозволить уникнути копіювання відносних чисел у жолобі чи інших випадкових позначок, які не мають відношення до vim


0

Кілька варіантів використання vim, оскільки послідовність ярликів tmux трохи довга, і мені важко запам'ятати

Як і вищезгадані відповіді, ви можете використовувати "+yі "*yкопіювати, і потім, "+pі "*pвідповідно вставляти. Якщо ви хочете, щоб vim використовував буфер обміну за замовчуванням, то ви можете просто скористатися y/pбезпосередньо тоді.

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +

джерело для команди буфера обміну: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim

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