Как скопировать из tmux, работающего в putty в Windows clipbard

ENV:: я запускаю tmux в шпатлевке, на ноутбуке windows 7. Я делаю ssh для систем linux во время работы.

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

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

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

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

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

5 ответов


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

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

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

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


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

tmux config: setw-G mode-мышь на

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

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


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

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

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

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

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"

vim

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

MobaXterm

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

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

шпаклевка

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

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

все будут делиться буфером обмена. Vim будет копировать в буфер обмена, когда вы дергаете. Чтобы вставить в другую панель tmux, используйте клавишу привязки ctrl-p (ctrl-A ctrl-p для меня).

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


С некоторым обманом, возможно получить буфер tmux назад через замазку и на клиент. Я выполнил это, используя escape-коды 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) создайте новый принтер:

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

4) в конфигурации шпатлевки на стороне клиента:

  • установить терминал > " принтер для отправки принтера ANSI вывод На: "для вновь созданного принтера с именем"PuTTY Printer"
  • установить соединение > SSH > "Remote command: "to"t" (referencing the .функция bashrc и выше)

на этом этапе вы можете отправить содержимое буфера tmux вашему клиенту шпатлевки, выделив некоторый текст в режиме копирования tmux и нажав y. Выбранный текст будет заканчиваться на up %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) Полная процедура использования:

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

С фотографии стоит 1000 слов, вот обзор того, что событие: https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAfiAAAAJDYzM2RmMzYzLTk1NmQtNGQxMi1iN2YyLTQ4NGUxNjExMmVlOA.png


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

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

проверено V2.6