Як скопіювати через термінали?


11

Я використовую систему Linux. У двох клемах відкриваються дві вими. Тепер я хотів би скопіювати текст з A у B. Один із способів зробити це - виділити текст у A, скопіювати мишу, потім переключитися на B, у режимі вставки команда <c-r>+вставить текст.

Чи все-таки це можна виконати без використання миші? як "+yyв A, при переході на B o<c-r>+,? Я марно досліджував пару комбінацій. І я шукав "копію через термінали", але нічого не знайшов.

Користувач @statox передбачає одне рішення , використовуючи візуальний режим, тобто v$"+yв A, коли перемикач до B, o<c-r>+.

Чи існує якийсь простий спосіб, який може скопіювати текст у A, не входячи в режим v? Справді, вхід у v-режим не передбачає занадто багато ударів по клавішах, просто задумайтесь, чи є кращий спосіб. Напр. якщо курсор знаходиться в середині рядка, yyкопіює весь рядок (для реєстрації "), при цьому 0v$yвиконує те ж саме із додатковим натисканням клавіші.

Або моє запитання може бути зведене до того, якщо є якийсь спосіб із меншою кількістю натискань клавіш, ніж 0v$"+yдля копіювання , яке я можу використовувати <alt-tab>o<c-r>+для вставки.


Яка ваша конкретна проблема? Здається, у вас є рішення: виберіть текст у візуальному режимі (навіщо б використовувати мишу?), Помістіть його в реєстр буфера обміну, "+yа в іншому екземплярі vim поставте реєстр буфера обміну "+p. Або дублікат цього ?
statox

Вам не потрібно входити у візуальний режим, щоб щось витягнути. Ви можете слідувати yза допомогою руху ( :help motion.txt) або об’єкта ( :help object-select). Якщо ви часто витягуєте та вставляєте через екземпляри Vim, ви можете виявити, що цей параметр clipboardвключений unnamedабо unnamedplusкорисний. Див :help 'clipboard'. Тоді копіювання між екземплярами повинно просто працювати.
garyjohn

1
Суть мого коментаря не у візуальному режимі, насправді у мене виникають проблеми з розумінням вашої проблеми: спочатку я думав, що це факт копіювання деякого тексту з одного терміналу в інший, тепер, здається, йдеться про використання якнайменшого натискання клавіш можна залізти до реєстру буфера обміну. Якщо це другий випадок, коментар Гарійона є актуальним.
statox

1
0v$те саме, що V. І це легко зробити відображення для "+y: :nnoremap <Leader>y "+y. Так що це зводить до V\y.
Мартін Турноїй

@Carpetsmoker ваше рішення добре. Я хотів би прийняти це як оптимальне рішення, якщо вставити його в область відповідей. Здається, що без ключової карти найкраще, що ми можемо зробити для копії в моєму питанні, це V"+y4 натискання клавіш.
користувач3813057

Відповіді:


9

Ви можете перевірити, чи Vim побудований із підтримкою буфера обміну за допомогою:

:echo has('clipboard')

Якщо результат є 1, для досягнення поставленої мети має бути достатньо наступного:

"*y    in source Vim
"*p    in destination Vim

Ви можете зробити це набагато більш безпроблемно, синхронізувавши регістр буфера обміну та регістр за замовчуванням з цим налаштуванням у вашому vimrc:

set clipboard^=unnamed

Якщо вихідний показник :echo has('clipboard')є 0, подумайте про встановлення належного Vim типу vim-gtkабо vim-gnome(назва пакета може відрізнятися від distro to distro).


1

Я думаю, що рішення, яке ви вже згадуєте у своєму питанні, є правильним. Якщо ви хочете зменшити кількість натискань клавіш, ви можете просто створити карту, наприклад

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Дивіться другий запис тут .


1

Щоб поширити відповідь @ romainl, (з підтримкою буфера обміну) ви можете використовувати регістри, які спільно використовуються з буфером обміну для системи.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

При виконанні цих команд, ви у anking / копіювання / збереження вибраного вмісту в регістрах, і р asting їх до місця призначення Вім-термінал. Ці два спеціальних регістрів +і *використовуються спільно з широким буфером обміну системи (і , отже , багато інших програм , такі як веб - браузер, Gedit і т.д.). Регістр +асоціюється з буфером копіювання / вставки та *асоціюється з буфером вибору (той, який вставляє копію виділення середнім клацанням на текстове поле в скажімо, Ubuntu) і може бути вставлений за допомогою ctrl + v( ctrl + shift + vна gnome-термінал).


1

1) У Fedora я використовую такі налаштування:

dnf install vim-X11

vim-X11 поставляється з підтримкою буфера обміну - можливо, в інших дистрибутивах це схоже.

2) Встановіть псевдонім у моєму .bashrc

alias vim="vimx"

3) In .vimrc:

set clipboard=unnamedplus

Тепер звичайний ривок у Vim переходить до буфера обміну системи, і кожен Ctrl-C поза vim може бути вставлений у vim.


0

Якщо ви використовуєте Mac (OSX), ви можете встановити bpcopy (використовуючи варильну установку pbcopy - див. Докладніше http://brew.sh/ ). Потім запустіть таке (командна лінія прямої форми), не торкаючись миші:

ПРИКЛАД:

1) У терміналі № 001 :

cat /tmp/stuff.txt | pbcopy

2) Ви можете переключитися на термінал № 002 (без використання миші), використовуючи вбудовані гарячі клавіші в термінальній програмі OSX: command+i

3) У TERMINAL # 002 : Відкрийте новий файл in vim

vi newfile

4) Покладіть vim у режим вставки за допомогоюi

5) Вставте текст із буфера обміну символом command+ V(щоб вставити його з буфера обміну на Mac)

6) Насолоджуйтесь рештою дня!

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