Как скопировать из tmux, работающего в putty в Windows clipbard
ENV:: я запускаю tmux в шпатлевке, на ноутбуке windows 7. Я делаю ssh для систем linux во время работы.
Я должен решить два глюка с tmux, прежде чем использовать его для всех моих нужд.
-
мне нужно скопировать текст в блокнот windows из vim или терминала tmux. Я включил поддержку мыши как для vim, так и для putty.
Я пробовал
"*y
и"+y
но оба они не работают. Если я использую способность putty для копирования, то это копирует также содержимое смежных сеток. мне нужно скопировать некоторый контент из 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
будет работать, как вы ожидаете.
кроме того, если вы хотите продолжать использовать шпатлевку, вам придется использовать обходной путь, например :write
ing выбор в локальный файл и передача этого в 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, но вам нужен где-то).
основные ингредиенты:
- шпаклевка 0.62 (на Windows)
- tmux 1.8 (на одной машине Linux)
- xclip (на машинах Linux)
- MobaXterm (на Windows для их X-сервера)
ваша сетевая настройка может немного отличаться, особенно в конфигурации дисплея 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