Копирование текста с удалённого устройства через iTerm2 с использованием Tmux в буфер обмена OS X

Вопрос или проблема

Я пробовал использовать 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.

Проблемы:

  1. Скопировать вывод текста из cat файла журнала, который длиннее экрана.

  2. Скопировать текст из вертикально* разделенного экрана (левый и правый панели), не копируя текст из другой панели.
    *не уверен, стоит ли это называть вертикальным или горизонтальным разделением.

  3. Копировать текст через 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 на уровень операционной системы.

  1. Установка OSC 52:

    • Откройте ваш конфигурационный файл Tmux (.tmux.conf) и добавьте строку:
      set-option -g set-clipboard on
    • Это активирует функцию, позволяющую Tmux передавать команды терминалу для обновления содержимого буфера обмена.
  2. Применение OSC 52 в практике:

    • После настройки Tmux, любую копию текста внутри Tmux можно будет автоматически отправлять в буфер обмена вашей системы.
# Команда для проверки:
printf "\033]52;c;$(base64 <<< "HELLO WORLD")\007"
  • Данный командный пример проверяет, работает ли ваше соединение с OSC 52. Если терминал поддерживает эту последовательность, текст "HELLO WORLD" будет скопирован в буфер обмена macOS.

Применение на практике

Теперь, когда настройки сделаны, любые текстовые операции в Tmux будут отображаться на уровне системы, упрощая копирование даже из удалённых сеансов. Рассмотрим несколько типичных сценариев применения:

  1. Копирование больших объёмов данных:

    • Если у вас есть грамотно организованный архитектурный процесс, при копировании текстов объемом больше чем один экран, данная настройка позволит без дополнительных утечек производительности передавать данные прямо в буфер обмена.
  2. Работа с несколькими панелями:

    • При разделении терминала на несколько панелей, OSC 52 позволяет точно копировать содержимое одной панели без влияния на остальные без дополнительных команд. Это функционально, когда необходимо сфокусироваться на части выполнения кода.
  3. Использование vim:

    • При работе с длинными текстами в редакторе, таком как Vim, OSC 52 позволяет копировать содержимое напрямую в системный буфер обмена, устраняя необходимость промежуточных хранений.

Таким образом, возможность использования OSC 52 в комбинации с правильной настройкой Tmux позволяет продумано организовать рабочее место и оптимизировать рабочие процессы для IT специалистов, занимающихся удаленной настройкой и поддержкой систем. Это не только повышает продуктивность, но и делает ежедневные задачи более управляемыми и менее затратными по времени.

Оцените материал
Добавить комментарий

Капча загружается...