Записать все прокрутки tmux в файл

Как написать все прокрутки в сеансе tmux в файл?

capture-panel может захватывать текущий экран, но не весь прокрутка.

137 голосов | спросил David Wolever 11 SunEurope/Moscow2011-12-11T00:29:10+04:00Europe/Moscow12bEurope/MoscowSun, 11 Dec 2011 00:29:10 +0400 2011, 00:29:10

7 ответов


45

Это зависит от значения history-limit, которое вы установили в .tmux.conf - по умолчанию 2000; если вы хотите записать больше, вам нужно будет явно указать количество строк.

Чтобы захватить весь прокрутки, введите режим копирования, выберите весь прокрутка и вытащите его в буфер, затем вставьте его в свой файл.

Как вы это сделаете, будет зависеть от опции mode-keys, которую вы предпочитаете, vi или emacs. man tmux содержит полезную таблицу, описывающую соответствующие ключи.

У меня есть следующее в моем .tmux.conf, чтобы упростить это:

unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

Теперь процесс захвата полного прокрутки:

Префикс Esc : для входа в режим копирования

v : начать визуальный выбор (если вы уже находитесь в нижней части экрана)

g g : захватить все в прокрутке

y : вытащить его в буфер

Префикс c : открыть другое окно tmux

vim scrollback.txt

i : введите режим вставки в vim

Префикс p : вставить в файл

Здесь также есть ответ, описывающий, как копировать буфер во временный файл с помощью xsel , которые могут быть полезны.

ответил jasonwryan 11 SunEurope/Moscow2011-12-11T01:44:58+04:00Europe/Moscow12bEurope/MoscowSun, 11 Dec 2011 01:44:58 +0400 2011, 01:44:58
139

С помощью tmux 1.5 команда capture-pane принимает -S и -E, чтобы указать начало и конечные линии захвата; отрицательные значения могут использоваться для указания строк из истории. После того, как у вас есть данные в буфере, вы можете сохранить его с помощью save-buffer.

Вот пример привязки (подходит для .tmux.conf), который завершает все приглашение для имени файла:

bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

Это фиксирует (до) 32768 строк истории плюс отображаемые в данный момент строки. Начиная с tmux 1.6, вы можете использовать номера до INT_MIN, если ваша панель имеет историю, которая глубже, чем строки 32Ki (обычно до строк 2Gi). Начиная с tmux 2.0 вы можете использовать capture-pane -S - для обозначения «начало в начале истории» (т. Е. Большого, жестко-кодированного отрицательного числа).


Примечание. Количество строк в сохраненном файле не всегда равно пределу истории панели и ее высоте.

Когда буфер истории панели заполнен, tmux отбрасывает самые старые 10% строк вместо того, чтобы отбрасывать только одну строку. Это означает, что эффективная глубина истории панели будет составлять всего 90% от установленного предела.

ответил Chris Johnsen 11 SunEurope/Moscow2011-12-11T10:32:44+04:00Europe/Moscow12bEurope/MoscowSun, 11 Dec 2011 10:32:44 +0400 2011, 10:32:44
126

Для тех, кто ищет простой ответ, просто используйте префикс + : , затем введите панель -S -3000 + return (Замените capture-pane -S -3000 на сколько строк, которые вы хотите сохранить.) Это копирует эти строки в буфер.

Затем, чтобы сохранить буфер в файле, просто используйте префикс + : снова и введите 3000 + return , заменив save-buffer filename.txt на все, что захотите.

(По умолчанию префикс есть ctrl + b .)

ответил Sauce McBoss 17 +03002015-10-17T17:59:52+03:00312015bEurope/MoscowSat, 17 Oct 2015 17:59:52 +0300 2015, 17:59:52
17

У меня были стандартные привязки клавиш, которые оказались немного отличающимися от ответа @ jasonwryan и ничего не меняли в конфигурации.

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

Префикс == Ctrl + b в моем tmux (tmux 1.6, debian 7).

  1. Введите режим выбора: Префикс + [.
  2. Начать выбор: Пробел .
  3. Выделите необходимый текст, используя навигацию vim (например, используйте клавиши со стрелками или нажмите g g , чтобы достичь начала истории вывода).
  4. На самом деле скопируйте во внутренний буфер обмена, используя Enter . Вы выйдете из режима копирования.
  5. Откройте любой файл с помощью vim (возможно, на новой вкладке tmux) и вставьте содержимое, которое вы скопировали, перед использованием Префикс + ] .
  6. Затем вы можете сделать кошку этого файла или использовать вывод, как вам нужно.
ответил Alex 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 14:58:46 +0400000000pmFri, 14 Feb 2014 14:58:46 +040014 2014, 14:58:46
10

Вот плагин tmux, который позволяет это:

https://github.com/tmux-plugins/tmux-logging

После его установки сохраните весь прокрутка с помощью префикса prefix + alt-shift-p.

ответил Bruno Sutic 30 PM00000040000001631 2014, 16:56:16
2

На самом деле это очень просто. Войдите в командный режим, нажав клавишу prefix key, затем :. Затем сделайте capture-pane -S -<line number you want to dump> Затем save-buffer <filepath>

Этот файл содержит весь вывод прокрутки. Вы должны удалить буфер после этого по соображениям безопасности.

ответил Wang 24 Jpm1000000pmWed, 24 Jan 2018 18:10:59 +030018 2018, 18:10:59
0

Если вы хотите что-то, что вы можете запустить из командной строки (вместо использования ключей префикса tmux), попробуйте запустить:

tmux capture-pane -pS -1000000

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

Конечно, вы также можете передать его в файл:

tmux capture-pane -pS -1000000 > file.out

См. справочную страницу tmux и найдите capture-pane для получения дополнительных возможностей (например, захватите escape-последовательности в случае, если вы хотите сохранить цвет, или укажите, будет ли вы хотите объединить несколько визуальных линий, если они не содержат новую строку)

ответил Christopher Shroba 8 Mayam18 2018, 02:21:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132