Прокрутка внутри экрана или пауза вывода


383

Я использую экран для своих задач командной строки при управлении серверами, на которых я работаю. Я обычно запускаю небольшие команды (в основном задачи файловой системы), но иногда я выполняю более сложные задачи (например, DBA).

Выход из этих задач очень важно для меня. Так как я использую Ubuntu и OS X (обе версии Windows Terminal) для своих задач, но мне нужно использовать экран, прокрутка недоступна, поэтому любой длинный вывод (например, таблица из 500 строк из выбора) для меня невидим. Колесо мыши не может быть и речи.

Когда я говорю «свиток невидим для меня, я имею в виду это:

вверх при использовании экрана, в Mac OS X, при прокрутке

Я думал о двух вариантах:

  1. Приостановить (думаю, разбить на страницы ) вывод определенной команды. Когда начинается вывод, он позволяет мне читать, что происходит, затем я нажимаю «Enter», затем вывод продолжается, пока больше нечего показать.

  2. Прокрутите внутри экрана. Но я не знаю, возможно ли это.

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

Ответы:


526

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

Может быть, есть лучший способ, но я привык к прокрутке, используя «режим копирования» (который можно использовать для копирования текста с помощью самого экрана, хотя для этого также требуется команда вставки):

  • Нажмите комбинацию префиксов на экране ( по умолчанию C-a/ control+ A), затем нажмите Escape.

  • Перемещение вверх / вниз с помощью клавиш со стрелками ( и ).

  • Когда вы закончите, нажмите qили, Escapeчтобы вернуться в конец буфера прокрутки.

(Если вместо qили Escapeвы нажмете Enterили, Returnа затем переместите курсор, вы будете выбирать текст для копирования, а при нажатии Enterили Returnво второй раз его копировать. Затем вы можете вставить с C-aпоследующим ].)

Конечно, вы всегда можете использовать moreи lessдва часто используемых пейджера, которых может быть достаточно для некоторых команд.


5
Кроме того, нажатие кнопки q приводит к выходу из режима копирования без копирования (и это на одно нажатие кнопки меньше). Это может быть в объяснении vi, но ссылка теперь не работает.
Натанаэль Фарли

3
Также нажатие [Esc] также выходит из режима копирования.
Сопалахо де Арриерес

7
какой-либо способ на страницу?
Sungguk Lim

10
Буфер прокрутки поддерживает команды типа vi: Cb и Cf для прокрутки страницы вверх / вниз.
Токо

3
В режиме копирования мои кнопки PageUp и PageDown работают. Первое нажатие перемещает только одну строку, но после этого страницы выглядят как обычно.
Илия

171

Использование screenбуфера, как указано в njsg, является хорошим решением. Вы также можете отключить буфер альтернативного текста в информации xterm termcap на экране. Когда отключено, вы можете использовать полосы прокрутки (и колесо мыши) для прокрутки вверх и вниз.

Добавьте это к вашему ~/.screenrc.

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@

Вы можете прочитать больше обсуждения здесь .


1
установите предел прокрутки, набрав Ctrl + A,:, наберите «scrollback 10000» или любое другое числовое значение, которое вы хотите
lobi

2
Благодаря этому типичные ярлыки терминалов Linux (shift + pg вверх / вниз home / end) также работают, спасибо.
Tokland

5
Один только этот совет заставляет меня пересмотреть использование экрана ...
Fish Monitor

5
+1 Более элегантное, чем принятое решение.
Райан Юсфи

9
дает только тот результат, screenкоторый вы получили с момента его запуска, то есть повторное подключение в другом месте означает, что вы не можете прокрутить вверх и посмотреть, что произошло раньше. но вы все равно можете получить более ранние результаты, используя решение в принятом ответе - тогда вы можете снова использовать колесо мыши.
Фил

28

Все эти ответы касались того, как перемещаться в сеансе экрана, но в экранной команде есть встроенная функция для сохранения всего в файле через -Lаргумент в соответствии с руководством, которое гласит:

-L говорит экран, чтобы включить автоматическое ведение журнала вывода для окон.

так что вы можете сделать:

screen -L -S testscreen

и это создаст файл Withe , screenlog.#где #это число для этого экрана , начиная с 0.

Это имеет много преимуществ, и наиболее важными для меня являются:

  1. Ведение записи о том, что я сделал, так как я могу сохранить файл журнала в папке проекта для дальнейшего использования.
  2. Вы можете неактивно и пассивно следить за процессом:
    • Используйте tailfдля мониторинга прогресса в режиме реального времени без привязки к экрану.
    • используйте grepдля проверки на определенный срок в журнале и создания уведомлений (электронная почта, всплывающее окно, voip и т. д.). Это может быть применено на нескольких экранах без активного просмотра.

1
Я не знал о -Lфлаге экрана, это очень полезно! +1
Креднс

1
просто хочу добавить еще, screenlog.#генерируется в той же папке, где вы выполняете screenкоманду
Lê Quang Duy

3

Я добился успеха в получении базовой подкачки, передавая содержимое more, например:

ls -l | more

Или, если вы хотите выводить цвет для вариантов использования, таких как подсветка синтаксиса, вы можете использовать

ls -l --color=always | more

Это приводит к выводу, который я могу легко просматривать по одному экрану за раз. Я не пробовал модификацию @ uther для, ~/.screenrcно это кажется предпочтительным как долговременное решение, когда мышь доступна.

Чтобы попробовать это, вы можете перейти к этому эмулятору BusyBox, а затем ...

cd ~/bin
ls -l --color=always | more

Используйте пробел, чтобы пролистать результаты ls -lкоманды или используйте клавишу ввода, чтобы построчно перемещаться по результатам.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.