Как копировать через терминалы?

11

Я использую систему Linux. Два vims открыты в двух терминалах. Теперь я хотел бы скопировать текст из 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>+для вставки.

user3813057
источник
В чем ваша проблема? Похоже, у вас есть решение: выделите текст в визуальном режиме (зачем использовать мышь?), Поместите его в регистр буфера обмена, "+yа в другом экземпляре vim - регистр буфера обмена "+p. Или дубликат этого ?
statox
Вам не нужно входить в визуальный режим, чтобы дергать что-то. Вы можете следовать yс помощью движения ( :help motion.txt) или объекта ( :help object-select). Если вы часто тянете и вставляете в экземпляры Vim, вы можете найти этот параметр clipboardвключенным unnamedили unnamedplusполезным. См :help 'clipboard'. Тогда копирование между экземплярами должно просто работать.
Гэриджон
1
Суть моего комментария была не в визуальном режиме, на самом деле у меня возникли проблемы с пониманием вашей проблемы: сначала я подумал, что это был факт копирования текста с одного терминала на другой, теперь кажется, что речь идет об использовании как можно меньшего количества нажатий клавиш. можно дергать в регистр буфера обмена. Если это второй случай, то комментарий Гариджона уместен.
statox
1
0v$так же, как V. И это легко сделать отображение для "+y: :nnoremap <Leader>y "+y. Так что это сводит к V\y.
Мартин Турной
@Carpetsmoker ваше решение хорошо. Я хотел бы принять это как оптимальное решение, если вы вставите его в область ответа. Кажется, что без карты ключей лучшее, что мы можем сделать для копии в моем вопросе V"+y, это 4 нажатия клавиш.
user3813057

Ответы:

9

Вы можете проверить, построен ли Vim с поддержкой буфера обмена:

:echo has('clipboard')

Если вывод такой 1, следующего должно быть достаточно для достижения вашей цели:

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

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

set clipboard^=unnamed

Если вывод команды :echo has('clipboard')is 0, рассмотрите возможность установки правильного Vim, подобного vim-gtkили vim-gnome(имя пакета может отличаться от дистрибутива к дистрибутиву).

romainl
источник
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-терминал).

0xc0de
источник
1

1) В Fedora я использую следующую настройку:

dnf install vim-X11

vim-X11 поставляется с поддержкой буфера обмена - возможно, в других дистрибутивах он похож.

2) Установите псевдоним в моем .bashrc

alias vim="vimx"

3) В .vimrc:

set clipboard=unnamedplus

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

Неау Овидиу Габриэль
источник
0

Если вы используете Mac (OSX), вы можете установить bpcopy ( с использованием заварить установки pbcopy --see http://brew.sh/ для более подробной информации). Затем выполните следующую команду (прямая форма командной строки), не касаясь мыши:

ПРИМЕР:

1) В ТЕРМИНАЛЕ № 001 :

cat /tmp/stuff.txt | pbcopy

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

3) В ТЕРМИНАЛЕ № 002 : Откройте новый файл в vim.

vi newfile

4) Переведите vim в режим вставки с помощьюi

5) Вставьте текст из буфера обмена с помощью command+ V(чтобы вставить из буфера обмена на Mac)

6) Наслаждайтесь остальным днем!

Джо Чосакул
источник