Вопрос или проблема
Я пробовал использовать iTerm2 beta Build 1.0.0.20120724 и команду bind C-y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"
в .tmux.conf, но ничего не работает.
Найденные мною решения не указывают конкретную операционную систему и условия. Поэтому я надеюсь, что формулировка проблемы здесь ясна, а именно: Копирование текста с удаленного сервера в буфер обмена OS X через iTerm2 с использованием Tmux.
Проблемы:
-
Скопировать вывод текста из cat файла журнала, который длиннее экрана.
-
Скопировать текст из вертикально* разделенного экрана (левый и правый панели), не копируя текст из другой панели.
*не уверен, стоит ли это называть вертикальным или горизонтальным разделением. -
Копировать текст через Vim, который длиннее экрана.
Я знаю о том, что можно удерживать alt при нажатии и перетаскивании, чтобы выделить текст. Но проблема возникает, когда вам нужно прокручивать или работать в более чем одной панели.
Это приложение может решить вашу проблему, clipper.
Я наткнулся на это программное обеспечение некоторое время назад, но никогда не использовал его. У него есть скринкаст, и кажется, что оно как раз подходит для ваших нужд.
На всякий случай, в некоторых случаях будет достаточно просто выполнить команду через SSH и скопировать результат с помощью pbcopy, например так:
ssh yourhost.net 'ls /' | pbcopy
Этот ответ на stackoverflow может быть самым простым решением. Если удерживать клавишу option, вы можете выбрать и скопировать текст в iTerm2, даже если он из удаленной сессии, работающей в tmux.
Недавние версии TMUX используют OSC 52
, который поддерживается iTerm.
OSC 52
(конкретно \033]52;c;
B64TEXT \007
— это способ запроса к эмулятору терминала, чтобы он устанавливал содержимое системного буфера обмена, выводя некоторые символы (B64TEXT — это base 64 кодировка текста, который вы хотите поместить в буфер обмена). Это удобно, потому что не важно, что сессия tmux локальная или удаленная. TMUX выводит некоторые символы на удаленном хосте, ваш эмулятор терминала получает их и устанавливает системный буфер обмена.
Документация по опции set-clipboard
TMUX: https://github.com/tmux/tmux/wiki/Clipboard
Таким образом, в наше время, если вы не используете эмулятор терминала, который не поддерживает OSC 52, TMUX может попросить эмулятор терминала установить системный буфер обмена, когда вы копируете текст в TMUX, если опция tmux set-clipboard
имеет значение on
или external
.
Это терминальные эмуляторы, которые я пробовал (есть в три раза больше в других списках, которые я видел)
- iTerm2
- Windows Terminal (на Windows 11)
и я читал, что это не работает в Termina.app.
Дополнительные подробности on
против external
Если вы хотите, чтобы программы, работающие внутри TMUX, могли использовать OSC52
, вам необходимо установить set-clipboard
на on
(external
не сработает).
Вы можете поэкспериментировать с
printf "\033]52;c;$(base64 <<< "HELLO WORLD")\007"
Если ваш эмулятор терминала поддерживает OSC52 (например, iTerm2), то эта команда вне TMUX поместит HELLO WORLD
в ваш буфер обмена, и CMD-V
в другой программе должен вставить HELLO WORLD
. Вы могли бы быть подключены по SSH к удаленной машине, это не имеет значения, потому что ваш эмулятор терминала будет реагировать на последовательность.
Внутри TMUX, в зависимости от значения set-clipboard
:
on
: Устанавливает буфер tmux и системный буфер обмена наHELLO WORLD
external
: Устанавливает буфер tmux наHELLO WORLD
, но не устанавливает системный буфер обмена наHELLO WORLD
.
.
Ответ или решение
Вопрос об использовании iTerm2 в сочетании с Tmux для копирования текста с удалённого сеанса в буфер обмена macOS является достаточно распространённой задачей среди специалистов IT. Это требование возникает, например, при анализе длинных лог-файлов, где необходимо выбрать текст, превышающий экран, или при работе с несколькими панелями в Tmux. В этом ответе подробно рассмотрим способы решения этой задачи, опираясь на современные методы и возможности.
Теория
Для начала, необходимо понимать, как работают iTerm2 и Tmux в контексте копирования данных в буфер обмена. Эти программы часто используются совместно для доступа к удалённым серверам и работы в командной строке.
Терминал iTerm2 поддерживает расширенную функциональность, включая работу с буфером обмена через механизмы, такие как OSC 52. Это последовательности управления, которые терминал воспринимает как инструкции для выполнения определённых действий, например, копирования текста в буфер обмена операционной системы.
Tmux, в свою очередь, является мультиплексором терминала, который позволяет разделять терминальный экран на несколько виртуальных панелей и управлять ими. Он также поддерживает функции работы с буферообменом, но его возможности напрямую зависят от того, как настроена интеграция с хост-системой, в данном случае, macOS.
Пример: Использование Tmux и OSC 52
Одним из современных решений для передачи текста из Tmux в буфер обмена операционной системы является использование OSC 52. Для этого в Tmux необходимо активировать опцию set-clipboard
. Она позволяет копировать текст из внутри Tmux на уровень операционной системы.
-
Установка OSC 52:
- Откройте ваш конфигурационный файл Tmux (
.tmux.conf
) и добавьте строку:set-option -g set-clipboard on
- Это активирует функцию, позволяющую Tmux передавать команды терминалу для обновления содержимого буфера обмена.
- Откройте ваш конфигурационный файл Tmux (
-
Применение OSC 52 в практике:
- После настройки Tmux, любую копию текста внутри Tmux можно будет автоматически отправлять в буфер обмена вашей системы.
# Команда для проверки:
printf "\033]52;c;$(base64 <<< "HELLO WORLD")\007"
- Данный командный пример проверяет, работает ли ваше соединение с OSC 52. Если терминал поддерживает эту последовательность, текст "HELLO WORLD" будет скопирован в буфер обмена macOS.
Применение на практике
Теперь, когда настройки сделаны, любые текстовые операции в Tmux будут отображаться на уровне системы, упрощая копирование даже из удалённых сеансов. Рассмотрим несколько типичных сценариев применения:
-
Копирование больших объёмов данных:
- Если у вас есть грамотно организованный архитектурный процесс, при копировании текстов объемом больше чем один экран, данная настройка позволит без дополнительных утечек производительности передавать данные прямо в буфер обмена.
-
Работа с несколькими панелями:
- При разделении терминала на несколько панелей, OSC 52 позволяет точно копировать содержимое одной панели без влияния на остальные без дополнительных команд. Это функционально, когда необходимо сфокусироваться на части выполнения кода.
-
Использование vim:
- При работе с длинными текстами в редакторе, таком как Vim, OSC 52 позволяет копировать содержимое напрямую в системный буфер обмена, устраняя необходимость промежуточных хранений.
Таким образом, возможность использования OSC 52 в комбинации с правильной настройкой Tmux позволяет продумано организовать рабочее место и оптимизировать рабочие процессы для IT специалистов, занимающихся удаленной настройкой и поддержкой систем. Это не только повышает продуктивность, но и делает ежедневные задачи более управляемыми и менее затратными по времени.