Подтвердить что ты не робот

Как скопировать из tmux, запущенного в putty, в буфер обмена Windows

ENV: я использую tmux в замазке на ноутбуке с windows 7. Я делаю SSH для Linux систем во время работы.

Я должен решить две проблемы с Tmux, прежде чем использовать его для всех моих нужд.

  1. Я должен скопировать текст в блокнот Windows из Vim или терминала Tmux. Я включил поддержку мыши для vim и putty.

    Я пробовал "*y и "+y но оба они не работают. Если я использую возможность замазки для копирования, то он также копирует содержимое смежных сеток.

  2. Я должен скопировать некоторый контент из файла vim на одной панели в файл vim, открытый на другой панели. Есть ли у Vim трюк для этого. Я не хочу использовать <Cb>[ способ сделать это.

Проблема 1 преследует меня больше, потому что есть проблема для проблемы 2.

4b9b3361

Ответ 1

PuTTY - это просто эмулятор терминала; Vim регистрирует * и + обеспокоен выбором X и буфером обмена; там нет перекрытия.

PuTTY позволяет вам копировать содержимое выбранного терминала в буфер обмена Windows; при запуске tmux это неизбежно будет включать макет окна.

Вам нужно переключиться с PuTTY на то, что позволяет реальную интеграцию, такую ​​как сервер Cygwin XWin, который является настоящим X-сервером, который интегрирует буфер обмена X с буфером обмена Windows. Вместо внутри сеанса PuTTY вы бы ssh -X на свой сервер и запускали Vim на терминале Linux или GVIM напрямую. Затем yanking через "+y будет работать так, как вы ожидали.

В качестве альтернативы, если вы хотите использовать PuTTY, вам нужно будет использовать некоторое обходное решение, например :write выбор в локальном файле, и, например, передачу этого файла в Windows через scp.

Ответ 2

Я использую putty v0.62 и tmux v1.8.

tmux config: setw -g mode-mouse on

Я хочу скопировать некоторый текст из tmux в системный буфер обмена, я нажимаю и удерживаю SHIFT и выбираю текст мышью, а затем левую кнопку мыши.

Я хочу вставить некоторый текст в tmux, нажмите SHIFT и щелкните правой кнопкой мыши.

Ответ 3

Это абсолютно возможно. Все строки конфигурации ниже были скопированы с машин в разных панелях tmux обратно на мою машину Windows. Да, я замазываю в одну машину и tmux и ssh оттуда другим, и могу перенести свои vim yanks на любую машину, включая мой браузер Windows.

Я запускаю X-сервер в Windows (не обязательно должен быть в Windows, но вам где-то нужен).

Основные ингредиенты:

  • putty 0.62 (в Windows)
  • tmux 1.8 (на одной машине Linux)
  • xclip (на машинах Linux)
  • MobaXterm (в Windows для своего x-сервера)

Настройка сети может немного отличаться, особенно в конфигурации дисплея X-сервера, но здесь она идет:

tmux

# allow mouse to select panes
setw -g mode-mouse on
set-option -g mouse-select-pane on

# allow yank into system clipboard
#bind C-y run "tmux save-buffer - | xclip -i"
bind C-y run-shell -b "tmux show-buffer | xclip -selection clipboard -i"
# move x clipboard into tmux paste buffer
bind C-p run-shell -b "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer"

ВИМ

" get some  autoselect interaction with the system clipboard
set guioptions=aA

MobaXterm

Я продолжаю работать, но мне не нужно запускать tmux в оболочке xterm. Убедитесь, что общий буфер обмена выбран в настройках X11. Я полагаю, что xming должен работать, но настройки для моих других потребностей никогда не казались бы трудными. У MobaXterm есть другие лакомства, которые мне нравятся в любом случае (файловые браузеры и т.д.).

Я предполагаю, что могу запустить сеанс ssh с tmux в MobaXterm, но я предпочитаю окно шпатлевки, где у меня есть соляризованная цветовая палитра.

шпатлевка

ssh на машину с tmux. На этом этапе я установил переменную среды DISPLAY и поместил ее в файл env, полученный из bash. Таким образом, каждое последующее созданное окно будет установлено. Установка на других машинах, которые я прыгаю с машины tmux, - это отдельное упражнение целиком.

На любой машине, которая будет использовать буфер обмена, убедитесь, что у вас установлен правильный $DISPLAY. Вы должны иметь возможность запускать xeyes и видеть его на своем локальном компьютере.

Каждый будет использовать буфер обмена. vim будет копировать в буфер обмена, когда вы дергаетесь. Чтобы вставить еще одну область tmux, используйте ctrl-p bind-key (ctrl-a ctrl-p для меня).

Если он не работает, вы всегда можете попробовать xclip -o -selection clipboard посмотреть, что нужно вставить. вы также сможете перенести любой текст "tmux selected" (мышь или bind-key [) в буфер обмена (и, следовательно, в обычное оконное окно) с помощью bind-key ctrl-y (т.е. tmux yank).

Ответ 4

С некоторыми обманами можно вернуть буфер tmux через PuTTY и на клиент. Я выполнил это с использованием кодов выхода ANSI для порта "AUX" (последовательный принтер).

Вот только одна реализация этого метода передачи:

1) На стороне сервера tmux.conf добавьте:

# Send the tmux copy buffer to a file.  The file is read for ANSI printing by "t" alias in .bashrc
bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer' 

2) На стороне сервера .bashrc добавьте:

t() {
  # Configure a PuTTY profile to send "t" as the "Remote command".  This
  # function will automatically reattach to an existing tmux session if one
  # exists, or start a new one.  This function also repeatedly sends our
  # homemade tmux clipboard back to the PuTTY client in the form of an ANSI
  # printer escape sequence.  The contents of the homemade clipboard are
  # populated by `bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'` in
  # tmux.conf.  It is expected that the PuTTY client will be configured to
  # print to a "Microsoft XPS Document Writer" which saves the printer output
  # to a file.  The file is subsequently read by an AutoHotkey macro, and the
  # contents are made available for paste.
  [[ "$TERM" == "xterm" ]] || return 0 # This prevents recursive runs, in case t() is called after tmux is started.
  { while :; do tput mc5; cat ~/.tmux-buffer; tput mc4; sleep 5; done } &
  tmux attach || tmux
}

3) На клиентской стороне (Microsoft Windows) создайте новый принтер:

  • Добавить принтер
  • Создать новый порт > Локальный порт
  • Введите имя портa > "PuTTY_Printer_File"
  • Драйвеp > Microsoft XPS Document Writer
  • Имя принтерa > "PuTTY Printer"
  • Дополнительно: Распечатайте тестовую страницу и убедитесь, что она отображается в содержимом файла @ "%USERPROFILE%\Documents\PuTTY_Printer_File"

4) В конфигурации PuTTY на стороне клиента:

  • Установить терминал > "Принтер для отправки вывода принтера ANSI на:" на вновь созданный принтер с именем "PuTTY Printer"
  • Установить соединение > SSH > "Удаленная команда:" на "t" (ссылка на функцию .bashrc выше)

На этом этапе вы можете отправить содержимое буфера tmux клиенту PuTTY, выделив некоторый текст в режиме копирования tmux и нажав y. Выбранный текст закончится на %USERPROFILE%\Documents\PuTTY_Printer_File на клиенте. Если вы хотите сделать еще один шаг и эмулировать "вставку" из этого файла, вы можете использовать последовательность горячих клавиш, чтобы прочитать содержимое файла и вставить его. Вот пример, который использует AutoHotKey, но, вероятно, возможно получить тот же результат в PowerShell, если вы предпочитаете.


5) Макрос AutoHotKey на стороне клиента:

;### Get contents of PuTTY ANSI printer device output and paste it
#v:: ;Winkey + v
FileRead, PuTTYPrinter, %USERPROFILE%\Documents\PuTTY_Printer_File
SendInput %PuTTYPrinter%
PuTTYPrinter = ; Free up memory
return

6) Полная процедура использования:

  • Подключитесь к серверу с PuTTY и опустите его в tmux с помощью функции t().
  • Когда вы готовы выбрать текст для копирования, используйте горячую клавишу tmux для режима копирования (Ctrl + b, [)
  • Переместить курсор со стрелками
  • Начать выбор с помощью spacebar
  • Завершить выбор и скопировать его с помощью y
  • Вернувшись на клиентскую консоль PuTTY, WindowsKey + v вставляет выделение

Так как фотографии стоят 1000 слов, вот обзор того, что происходит: https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAfiAAAAJDYzM2RmMzYzLTk1NmQtNGQxMi1iN2YyLTQ4NGUxNjExMmVlOA.png

Ответ 5

Предполагая, что режим мыши уже включен, добавьте его в конфигурацию tmux и выберите "Копировать" в буфер обмена.

bind -Tcopy-mode MouseDragEnd1Pane send -X copy-selection-and-cancel\; run-shell -b "tmux show-buffer | clip"

Протестировано на v2.6