Содержание
Screen
Режимы терминала
В догонку к теме интерактивного режима шелла, а, на самом деле, даже и к теме про терминалы.
На какой-то стадии развития UNIX возникла идея, что за возможности редактирования вводимой строки, хранения истории, поиска дополнений и т.п. должен отвечать терминал, а не программа, взаимодействующая с пользователем.
На эту тему придумали следующее: терминал может работать в двух режимах: в построчном и в посимвольном. Если программа не занимается настройкой терминала, то скорее всего, в ней терминал будет в построчном режиме (потому что шелл переводит в этот режим терминал перед каждым исполнением очередной команды). В этом режиме у терминала есть три кнопкосочетания, которые терминал обрабатывает:
^H делает то же, что и backspace (по идее; на практике в зависимости от глюков и настроек может работать только что-нибудь одно из них).
^W удаляет последнее введённое слово
^U удаляет всю введённую строку
Среди прочих управляющих последовательностей, и текстовые редакторы (включая vi), и шелл, как правило воспроизводят и эти ровно в том же смысле. Более того, их воспроизводят и формы для редактирования текста в большинстве графических библиотек (хотя в графических программах всё же часто встречаются и другие значения этих кнопок). Поэтому можно считать, что эти кнопкосочетания работают почти везде.
К сожалению, довольно рано появился readline и вместо того, чтобы развивать дальше идею редактирования ввода через терминал, люди стали просто использовать эту библиотеку в своих программах. Ибо если бы все возможности по редактированию, истории и поиску дополнений были в терминале, это бы обозначало, что всеми текстовыми программами было бы пользоваться намного удобнее.
Screen
screen – это виртуальный терминал с большим количеством приятностей. Основная идея работы со screen такая: вы соединяетесь с удалённой машиной (один раз), запускаете screen и внутри одного сеанса screen запускаете несколько терминалов и работаете с ними как хотите: переключаетесь между ними, ищете по истории, показываете несколько терминалов в одном окне, ...
Начнём от простого к сложному.
Мы будем использовать для кнопкосочетаний те же обозначания, которые используются в руководстве по screen. C-a c обозначает такую последовательность нажатий: нажать ctrl-a, отпустить ctrl-a, нажать c, отпустить c. (Для удобства для большинства сочетаний C-a x обычно бывает сочетание {{{C-a C-x}}}, которое делает то же самое; т.е. вам часто будут прощать ошибку, если вы забыли отпустить ctrl).
Создание окон и переключение между ними
screen запускается, собственно, командой screen.
Первое, что вы видите после запуска screen – это лицензионное соглашение, а далее – обычный шелл, как если бы вы просто запустили шелл. screen позволяет вам иметь в одном сеансе несколько шеллов рядом.
Самые ключевые команды в screen1:
C-a с – создать новое окно
C-a 0 .. C-a 9 – переключиться на окно по номеру
C-a n, C-a space – переключиться на следующее окно
C-a p – переключиться на предыдущее окно
C-a w – посмотреть список окон; на списке окон обозначается рабочее окно (т.е., то, которое вы видите перед собой) и предыдущее рабочее окно
C-a C-a – переключиться на предыдущее рабочее окно
Упражнение: запустите screen; создайте в нём два терминала; в одном из них запустите find, переключитесь между терминалами несколькими разными способами.
C-a k – убить окно. Это кнопкосочетание полезно редко: обычно проще завершить шелл (или другую программу), работающий в этом окне.
C-a ? – справочник по кнопкосочетаниям в screen. В этом справочнике опускается префикс C-a перед названием команды.
Способность отсоединиться
FIXME
C-a : autodetach on
screen -r -d screen -ls
C-a d – отсоединиться от сеанса screen
Память терминала
Когда вы работаете в терминале, вы привыкли иметь рядом с терминалом полоску прокрутки (scrollbar), с помощью которой вы можете посмотреть уползшую за пределы видимости часть вашего диалога с системой. (Эту уползшую вверх часть называют scrollback).
Так как screen ничего не знает ни о вашей мышке, ни, тем более, о полоске прокрутке вашего окна терминала, то для работы со scrollback в нём сделали специальный режим: называется он режимом копирования.
C-a [ – перейти в режим копирования
Навигация в режиме копирования по возможности близко копирует навигацию в vi с небольшими отличиями:
h, j, k, l – синоним стрелок
C-u, C-d – синоним PageUp, PageDown
gg, G – синоним Home, End
0, ^, $ – начало и конец строки
w, e, b – следующее и предыдущее слово
/, ?, n – поиск и повтор поиска
100G – перейти к строке под номером 100 (начиная от начала области, отведённой под запоминание истории).
В этом режиме у screen есть одно сильно неприятное свойство: он не допускает опечаток. Т.е. если вы нажали что-то не то, то screen выбросит вас из режима копирования (и в следующий раз придётся заново искать то место, на которое вы смотрели). Я не могу вам предложить какого-нибудь готового способа бороться с этой особенностью.
Упражнение. FIXME.
Copy & paste
FIXME
Нажатие enter в режиме копирования начинает выделение, второе нажатие enter завершает выделение, копирует выделенный текст, и завершает режим копирования.
C-a ] – вставить скопированный текст (т.е. сделать вид, что этот текст набран с клавиатуры).
Multiuser
FIXME
sudo chmod u+s `which screen`
sudo chmod 755 /var/run/screen
C-a : multiuser on
C-a : acladd user1 user2 ...
Полезные мелочи
FIXME
C-a Z – сбросить все настройки терминала в состояние по умолчанию и потереть экран – это полезная команда в случае, если вы случайно попытались вывести на экран какой-нибудь бинарный файл, и в результате у вас на экране творится каша и вы даже не понимаете, что происходит, и происходит ли что-нибудь, когда вы нажимаете на кнопки.
FIXME
C-a A – сменить название окна
C-a : select name – перейти к окну по имени
FIXME
screen -U
FIXME
~/.screenrc:
altscreen on
autodetach on
startup_message off
defscrollback 1000
defhstatus "^%-Lw^%{= BW}^%50>^%n^%f* ^%t^%{-}^%+Lw^%<" или caption always "%3n %t%? @%u%?%? [%h]%?"
возможно, полезно скопировать к себе /usr/share/doc/screen/examples/screenrc – в нём делается некоторое количество тонкой обработки "напильником" screen для разных типов терминалов
если вы играли в nethack (и только в этом случае) может быть забавным дописать nethack on
Нужно заметить, что на самом деле я ещё ни разу не прочитал документацию по screen полностью. Поэтому на самом деле, я пользуюсь далеко не всеми возможностями screen, которые у него есть:
- отображение нескольких терминалов одновременно в "окнах"
- преобразование выдачи программ в терминал и преобразование вводимых симоволов, например:
- ввод и вывод текстов с умляутами через терминал без подходящей кодировки
- фильтрация части диалога терминала сторонней программой
- сохранение текущего состояния экрана (или scrollback) в файл
- запись в файл диалога с системой между двумя заданными моментами времени
- ожидание активности или прекращения активности в заданных окнах (например, когда вы запустили какой-нибудь долгий счёт и ждёте его завершения)
скринсейвер (которых в него встроено несколько – с требованием ввести пароль для входа и без)
- всяческие возможности установки паролей на разные случаи присоединения к сеансу
редактированиe вводимой строки и хранениe истории ввода – по-моему, эти возможности у screen весьма ограничены
настройка поведения screen в ответ на разные события – когда умерла программа в окне; когда программа попросила очистить экран, и т.д.
настройка свойств терминалов, которые создаёт screen – надеюсь, это на самом деле никому никогда не потребуется (ибо это то самое ковыряние в кишках системы, допущение необходимости в котором является крайне неприличным для любой системы)
И я, наверное, довольно много чего упустил.
Поэтому учитывайте, что сейчас вы знаете лишь самое главное. Достаточно, чтобы понять, полезна ли вам эта программа и в принципе пользоваться ей, но полезно иногда полистать документацию в поиске новых полезных свойств в этой программе.
gobby
FIXME
Отдельное: о русском языке в vim
FIXME
:se enc, fenc, tenc (vim > 7.2/109)
- :se langmap
- :e ++enc=enc
- :se ff=unix
- :se fencs=ucs-bom,utf-8,cp1251
Здесь и далее речь идёт о screen в настройках по умолчанию. screen можно настроить так, чтобы все команды выглядели совсем по-другому. (1)