После основных утилит для работы с файлами и текстом первая программа, которая понадобится любому пользователю Linux — это текстовый редактор (для краткости — просто редактор). Из предыдущих лекций и собственных экспериментов Мефодию уже стало понятно, какое значительное место занимают в системе Linux данные в текстовом формате, т. е. состоящие из символов, которые могут быть отображены на экране терминала и которые может прочесть человек. Однако пока Мефодий мог работать с текстом только последовательно: строка за строкой, даже если имел дело с файлом, он не мог вернуться и отредактировать уже переданные системе строки. Именно для того, чтобы работать с текстовым файлом как со страницей, по которой можно перемещаться и редактировать текст в любой точке, и нужны текстовые редакторы.
Эта кажущаяся сегодня тривиальной возможность сколько угодно редактировать текст, не оставляя при этом никаких следов, была радикальнейшим достижением прогресса по сравнению с пишущей машинкой.
Текстовый редактор потребуется пользователю Linux в первую очередь для того, чтобы изменить настройки системы или своего окружения, например, shell — при этом нужно будет редактировать конфигурационные файлы, которые всегда представлены в текстовом формате (см. лекции Возможности командной оболочки и Конфигурационные файлы). Но и собственные задачи пользователя могут потребовать редактирования текстовых файлов: например, сценарии и программы, электронные письма, а также заметки для себя, которые пишет Мефодий — это всё данные в текстовом формате. Текстовые данные, полученные при помощи стандартных утилит, тоже бывает удобно сохранять в файлах и редактировать.
Не стоит путать текстовые редакторы и текстовые процессоры. Текстовые процессоры, — например, OpenOffice Writer или Microsoft Word — предназначены для создания документов, в которых, помимо собственно текста, содержится и различная метаинформация (информация об оформлении): размещение текста на странице, шрифт и т. п. Поскольку в текстовом формате не предусмотрено средств для сохранения информации об оформлении (там есть только символы и строки), текстовые процессоры используют свои собственные форматы для хранения данных. Текст, в котором нет никакой метаинформации об оформлении, называют «plain text» (только текст, «плоский», простой текст).
Однако при помощи текстовых редакторов можно работать не только с форматом plain text. Различная метаинформация (об оформлении, способе использования текста, например, в качестве ссылки и пр.) может быть записана и в виде обычных символов (т. е. в текстовом формате), но со специальным соглашением, что эти символы нужно интерпретировать особым образом: как инструкции по обработке текста, а не как текст. Такие инструкции называются разметкой. Таким образом устроен, например, формат HTML. Для того, чтобы обработать разметку HTML и в соответствии с ней отобразить текст, нужна специальная программа — броузер, но редактировать файлы HTML и прочие форматы разметки можно и при помощи текстового редактора. Кроме того, программы на любых языках программирования и сценарии (программы на shell), тоже представляют собой текстовые файлы. Многие текстовые редакторы ориентированы на работу не только с плоским текстом, но и с текстом в различных форматах. Для этого придумана масса усовершенствований, уменьшающих количество символов, которые нужно вводить вручную: специальные команды, клавиатурные сокращения и автодополнение ключевых слов и конструкций.
Важнейшее условие для текстового редактора в Linux — возможность работать в терминале, т. к. это основной способ управления системой. Поэтому и ввод данных, и редактирование должны полностью осуществляться средствами терминала, т. е. алфавитно-цифровыми и некоторыми функциональными клавишами. Поскольку функциональных клавиш, на которые можно рассчитывать на любом терминале, совсем немного, а команд, которые нужно отдавать редактору, — много очень, требуется способ вводить любые команды ограниченными средствами терминала. Это условие, равно как и требование удобной работы с разнообразными структурированными текстами, выполнено в двух «главных» текстовых редакторах Linux — Vi и Emacs, о которых в основном и будет идти речь в этой лекции.