Задача текстовых редакторов
После основных утилит для работы с файлами и текстом первая
программа, которая понадобится любому пользователю Linux – это
текстовый редактор (для краткости – просто редактор). Из предыдущих
лекций и собственных экспериментов Мефодию уже стало понятно, какое
значительное место занимают в системе Linux данные в текстовом
формате, т. е. состоящие из символов, которые могут быть отображены
на экране терминала и которые может прочесть человек. Однако пока
Мефодий мог работать с текстом только последовательно, строка за
строкой; даже имея дело с файлом, он не мог вернуться и
отредактировать уже переданные системе строки. Именно для того, чтобы
работать с текстовым файлом как со страницей, по которой можно
перемещаться и редактировать текст в любой точке, и нужны текстовые
редакторы.1)
Текстовый редактор потребуется пользователю Linux в первую очередь
для того, чтобы изменить настройки системы или своего окружения,
например, shell – при этом нужно будет редактировать конфигурационные
файлы, которые всегда представлены в текстовом формате (см. лекции 8
и 12). Но и собственные задачи пользователя могут потребовать
редактирования текстовых файлов: например, сценарии и программы,
электронные письма, а также заметки для себя, которые пишет Мефодий
—все это данные в текстовом формате. Текстовые данные, полученные при
помощи стандартных утилит, тоже бывает удобно сохранять в файлах и
редактировать.
Не стоит путать текстовые редакторы и текстовые процессоры. Текстовые
процессоры, например OpenOffice Writer или Microsoft Word,
предназначены для создания документов, в которых, помимо собственно
текста, содержится и различная метаинформация (информация об
оформлении): размещение текста на странице, шрифт и т. п. Поскольку в
текстовом формате не предусмотрено средств для сохранения информации
об оформлении (там есть только символы и строки), текстовые
процессоры используют собственные форматы для хранения данных. Текст,
в котором нет никакой метаинформации об оформлении, называют "plain
text" (только текст, "плоский", простой текст).
Однако при помощи текстовых редакторов можно работать не только с
форматом plain text. Различная метаинформация (об оформлении, способе
использования текста, например, в качестве ссылки и пр.) может быть
записана и в виде обычных символов (т. е. в текстовом формате), но со
специальным соглашением, что эти символы нужно интерпретировать
особым образом: как инструкции по обработке текста, а не как текст.
Такие инструкции называются разметкой. Таким образом устроен,
например, формат HTML. Для того чтобы обработать разметку HTML и в
соответствии с ней отобразить текст, нужна специальная программа –
броузер, но редактировать файлы HTML и прочие форматы разметки можно
и при помощи текстового редактора. Кроме того, программы на любых
языках программирования и сценарии (программы на shell) тоже
представляют собой текстовые файлы. Многие текстовые редакторы
ориентированы на работу не только с "плоским" текстом, но и с текстом
в различных форматах. Для этого придумана масса усовершенствований,
уменьшающих количество символов, которые нужно вводить вручную:
специальные команды, клавиатурные сокращения и автодополнение
ключевых слов и конструкций.
Важнейшее условие для текстового редактора в Linux – возможность
работать в терминале, так как это основной способ управления
системой. Поэтому и ввод данных, и редактирование должны полностью
осуществляться средствами терминала, т. е. алфавитно-цифровыми и
некоторыми функциональными клавишами. Поскольку функциональных
клавиш, на которые можно рассчитывать на любом терминале, совсем
немного, а команд, которые нужно отдавать редактору, – очень много,
требуется способ вводить любые команды ограниченными средствами
терминала. Это условие, равно как и требование удобства при работе с
разнообразными структурированными текстами, выполнено в двух
"главных" текстовых редакторах Linux – Vi и Emacs, о которых в
основном и будет идти речь в этой лекции.
Vi и лучше, чем Vi
В любой системе Linux, даже при самой минимальной конфигурации,
всегда присутствует текстовый редактор, поскольку в любой – даже
самой катастрофической – ситуации у пользователя должна быть
возможность отредактировать конфигурационные файлы, чтобы привести
систему в рабочее состояние. По сложившейся традиции текстовым
редактором, который обязательно запустится из любой командной строки
Linux, является Vi2). Однако верно и обратное: если вы работаете в
незнакомой системе Linux или произошел сбой, в результате которого
доступна только очень небольшая часть системы, нельзя быть уверенным,
что найдется хоть какой-нибудь другой текстовый редактор, кроме Vi.
Поэтому каждому пользователю Linux нужны хотя бы основные навыки
работы в Vi. При первом знакомстве c Vi работа обычно не ладится:
очень уж он непривычен, его нельзя с удобством использовать, запомнив
только две-три простейшие команды редактирования. Cтоит понять
основные принципы работы в Vi и потратить некоторое время на его
освоение, тогда в нем откроется мощный инструмент, позволяющий очень
эффективно работать с текстом.
Под именем Vi, на самом деле, может скрываться несколько разных
программ: с момента появления Vim в операционной системе UNIX (а это
произошло около 30 лет назад) этот редактор стал чем-то вроде
стандарта. К настоящему времени существует ряд программ, либо в
точности повторяющих вид и поведение "классического" Vi (например,
nvi), либо очень похожих на него, но со значительно расширенными
возможностями (Vim, elvis). Наибольшей популярностью пользуется Vim,
возможности которого огромны – для их описания потребовалось почти
сто тысяч строк документации. Когда пользователь Linux набирает в
командной строке Vim, скорее всего, будет запущена "облегченная"
версия Vi, которая настроена таким образом, чтобы максимально
воспроизводить поведение классического редактора Vim. Естественно, в
таком режиме часть возможностей Vi недоступна. Все свойства,
которыми Vi отличается от Vim, обязательно снабжены в руководстве по
Vi указанием "not in vi". В дальнейшем изложении под Vi мы будем
понимать именно Vim в режиме совместимости, все возможности,
недоступные в этом режиме, будут оговариваться. Чтобы вызвать Vim в
полнофункциональном режиме, достаточно набрать команду Vim.
Популярность Vi не случайна: этот текстовый редактор позволяет не
только производить простые операции редактирования текстовых файлов –
он хорошо приспособлен и для максимально быстрого и эффективного
решения ряда смежных с редактированием задач. Среди самых важных его
возможностей – инструменты для работы с текстами на различных языках
программирования и в различных форматах разметки. Vim умеет
подсвечивать разными цветами синтаксические конструкции языка
программирования или разметки3), автоматически выставлять отступы, что
облегчает восприятие структуры документа. Кроме того, в Vim есть
специальные средства для организации цикла отладки программы:
компиляция–правка исходного текста–компиляция... Подробнее об этих и
прочих возможностях Vim можно узнать из руководств по Vim. Объем
данной лекции позволяет описать только самое начало работы с Vi.
Запуск Vi
Чтобы начать сеанс редактирования в Vi, достаточно выполнить команду
Vi на любом терминале. Чтобы открыть для редактирования уже
существующий файл, путь к этому файлу нужно указать в качестве
параметра: "vi путь_к_файлу". Как и всякая уважающая себя программа
UNIX, Vim может быть запущен с множеством модифицирующих его
поведение ключей, которые подробно описаны в руководстве. Вызванный
без параметра, редактор откроет пустой буфер – чистый лист для
создания нового текста. В центре экрана при этом может появиться
краткое приветственное сообщение, где указаны версия программы и
команды для получения помощи и выхода из редактора (что
нетривиально). Однако такое сообщение может и не появиться – это
зависит от версии Vi, установленной в системе.
Для отображения текста и работы с ним Vi использует весь экран
терминала – только последняя строка предназначена для диалога с
пользователем: вывода информационных сообщений и ввода команд. Пока
буфер не заполнен текстом, в начале каждой строки экрана отображается
символ "~", обозначающий, что в этом месте буфера нет ничего, даже
пустой строки. Общий вид экрана в начале работы будет примерно такой:
#
~
~
~
~
~
Пример
9.1.
Начало работы с Vi
(html,
txt)
Символ "#" обозначает курсор. На экране терминала умещается больше
строк, но в примерах мы будем для компактности изображать только
необходимый минимум.