Скопируйте из vim на консоль python в tmux - PullRequest
8 голосов
/ 17 января 2020

Я установил tmux.

tmux -V
tmux 2.3

Установите мой файл конфигурации.

cat  ~/.tmux.conf
set -g mouse on

Введите tmux и откройте в нем две вертикальные windows, откройте python3 консоль в слева, откройте vim справа.

enter image description here

Теперь переместите мой курсор в начало первой строки справа с помощью мыши.
Войдите в обычный режим и введите 2yy+, чтобы скопировать две строки в мой регистр +.
Переместить курсор в левое окно python3 console, как я могу вставить содержимое в регистр + в консоль python ? @ Кент, сделай, как ты говоришь:
1. Переместите курсор в начало первой строки и введите "+2Y
2. Переместите курсор в левое окно и щелкните средней кнопкой мыши, ничего не происходит. 3. нажмите ctrl+b, затем нажмите ].

enter image description here

Ответы [ 3 ]

3 голосов
/ 20 января 2020

сначала ваш vim должен быть скомпилирован с +clipboard см. vim --version | grep 'clipboard'

Для копирования (или удаления) в любой регистр vim вы можете использовать следующий синтаксис

  • "<register name><oprator><motion> (см. :h registers) например
    1. "ayy (скопировать текущую строку в регистре a) или
    2. "bdd (удалить текущую строку в регистре b) или
    3. "*ce (удалить в конец текущей работы и поместить содержимое в регистр * с помощью c также переведет вас в режим вставки
  • для копирования всего Вы можете использовать yy
  • , а системный буфер обмена отображается либо на +, либо на * (в зависимости от ОС)

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

  • "*yy или "+yy (в зависимости от ОС)

или скопировать 2 строки

  • "*2yy или "+2yy (для копирования текущей и строки после текущей строки)

после копирования содержимого в системный буфер обмена вы можете вставить в tmux, используя (command + v или ctrl + shift + v )

или для сопоставления системного буфера обмена с буфером вставки tmux см. https://unix.stackexchange.com/questions/67673/copy-paste-text-selections-between-tmux-and-the-clipboard#72340

1 голос
/ 24 января 2020

Мне не очень понравилось в принятом решении, что оно зависит от графической среды для буфера обмена, так как это не работает, когда vim не может получить доступ к буферу обмена, что почти всегда имеет место для ssh соединений. Поэтому я нашел другое решение:

Вместо использования внешнего буфера обмена vim может передавать текст непосредственно в буфер вставки tmux, передав его в

tmux load-buffer -

После этого Вы можете вставить содержимое буфера с помощью prefix + ] в активную область tmux.

Существуют различные способы передачи текста из vim в tmux:

# to write the current line into the tmux buffer:
:.w !tmux load-buffer -

# to write all *lines* within the visual selection into the tmux buffer:
:'<,'>w !tmux load-buffer -

# to pipe the content of a register (e.g. from a previous selection) into the buffer:
# @" being the unnamed register, @0 - @9 the numbered registers, and so on
:call system('tmux load-buffer -', @")

Используя tmux paste-buffer, вы можете одновременно запустить вставку на нужную панель:

# assuming the python pane is at :0.0
:call system('tmux load-buffer -; tmux paste-buffer -t :0.0', @")

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

1 голос
/ 17 января 2020

2yy+ делает НЕ копировать две строки в + reg, вместо этого он возвращает две строки в " reg, затем перемещает курсор на первый непустой символ в следующей строке

Вы можете на стороне vim сделать: "*2Y, затем щелкнуть средней кнопкой мыши на консоли python.

  • или просто выбрать строки, которые вы хотите скопировать в vim с помощью мышь, затем средний щелчок в python консоли
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...