Разработчики Unix традиционно придерживались строгих и разнотипных предпочтений особенно в выборе редакторов.
Доступно множество редакторов, которые легко изучить самостоятельно; наиболее распространенными можно считать
vi
и Emacs. Оба редактора являются мощными представителями своего типа, чего не скажешь на первый взгляд. У обоих редакторов сравнительно крутая кривая обучения, и они радикально отличаются друг от друга. Emacs является достаточно крупным; он сам себе операционная среда,
vi
не занимает много места и разработан специально для внедрения в среду Unix. Было написано множество клонов и альтернативных версий каждого редактора, и у самих версий также имеются свои клоны.
В этой книге мы не будем углубляться в изучение
vi
и Emacs, поскольку материал занял бы слишком много места. В [32] каждому редактору посвящены отдельные главы, кроме того, рекомендуем обратиться к [5] и [17]. В нашей книге мы только сравним Emacs и
vi
и расскажем, как получить оперативную справку по каждому из них.
Emacs включает исчерпывающий набор руководств, в которых объясняется не только использование Emacs как редактора, но и показывается, как применять Emacs для чтения и отправки электронной почты и новостей в Usenet, для игр (игра гомоку очень даже неплоха) и для ввода команд оболочки. В Emacs, написав полное имя внутренней команды, всегда можно ее выполнить, даже если она не привязана к клавишам.
В отличие от Emacs, документация по
vi
менее развернутая и менее известна.
vi
является только редактором, и многие важные команды можно выполнить путем нажатия одной клавиши. Здесь можно переключаться между режимом, в котором при нажатии стандартных букв алфавита они помещаются в текст, и режимом, в котором эти буквы являются командами. Например, можно использовать клавиши
h
,
j
,
k
и
l
в качестве клавиш управления курсором для навигации по документу.
Оба редактора позволяют создавать макросы для упрощения работы, но их макроязыки очень сильно отличаются. Emacs включает в себя целый язык программирования под названием elisp (Emacs Lisp), который очень тесно связан с языком программирования Common Lisp. В первоначальном варианте
vi
встроен более спартанский язык, ориентированный на стек. Большинство пользователей просто связывают с клавишами простые однострочные команды
vi
, но эти команды зачастую запускают программы за пределами vi, чтобы управлять данными внутри
vi
. По Emacs Lisp написано огромное руководство, включающее пособие по использованию; по языку, встроенному в
vi
, документация сравнительно скупа.
Некоторые редакторы позволяют смешивать и совмещать функциональности. Так, существуют редакторы, в которых можно использовать Emacs в режиме
vi
(viper), позволяющем использование стандартных команд
vi
; в другом клоне
vi
под названием
vile
("vi like Emacs") можно использовать
vi
в режиме Emacs.
4.1.1. Emacs
Emacs встречается в нескольких вариациях. Первоначальный редактор Emacs был написан Ричардом Столлманом (Richard Stallman), одним из лидеров Фонда свободного ПО (Free Software Foundation — FSF). В течение многих лет его GNU Emacs был самым популярным редактором. С недавних пор популярностью начал пользоваться другой вариант GNU Emacs — XEmacs, в котором больше места уделяется поддержке графического интерфейса. XEmacs начал свою жизнь в качестве Lucid Emacs, набора расширений GNU Emacs, разработанного теперь уже распавшейся компанией Lucid Technologies. В намерения этой компании входило официально включить XEmacs в GNU Emacs. Но из-за технических различий команды не смогли слить свои коды. Несмотря ни на что, эти два редактора отлично совмещаются, а программисты обоих команд заимствуют коды друг у друга. Ввиду того, что обе эти версии очень похожи, в дальнейшем мы будем ссылаться на них как на Emacs.
Лучший способ для удобной работы с редактором Emacs — изучить пособие по работе с ним. Запустите
emacs
и наберите
^ht
. Наберите
^x^c
для выхода из Emacs. С помощью обучающей программы можно узнать, где получить дополнительную информацию по Emacs. Здесь вы не узнаете, как получить руководство по Emacs, распространяемое вместе с самим редактором. Для вызова этого руководства наберите
^hi
.
Несмотря на то что пользовательский интерфейс Emacs не такой красочный, как некоторые графические среды IDE, в этом редакторе есть множество мощных средств, которые могут понадобиться многим программистам. Например, при использовании Emacs для
редактирования кода С. Emacs распознает тип файла и переходит в режим редактирования С, в котором распознается синтаксис С, что может помочь при поиске опечаток. Если вы запускаете компилятор из Emacs, редактор распознает сообщения об ошибках и предупреждениях компилятора, и позволяет перейти на строку с ошибкой при помощи одной команды, даже если для этого придется открыть новый файл. В Emacs также имеется режим отладки: отладчик находится в одном окне и проходит по коду, который вы отлаживаете в другом окне.
4.1.2.
vi
Если вы быстро набираете текст и хотите, чтоб ваши пальцы находились в правильном положении [3] ,
vi
вам наверняка понравится, поскольку его набор команд был разработан таким образом, чтобы движений пальцев печатающего было как можно меньше. Этот редактор также ориентирован на пользователей Unix. Если вы знакомы с
sed
или
awk
либо другими программами Unix, использующими стандартные регулярные выражения с
^
для перехода к началу строки и
$
для перехода к ее концу, работа с
vi
покажется вам простой и естественной.
3
Это справедливо для тех, кто привык к раскладке qwerty. Те, кто обучался на клавиатуре Дворака, используют множество макросов vi, которые делают его удобным в наборе.
К сожалению, освоение
vi
может оказаться более сложным, нежели Emacs. Дело в том, что хоть пособия по
vi
подобны учебникам по Emacs, ни в одной версии
vi
нет стандартного способа запуска учебного пособия. Тем не менее, многие версии, включая версию, поставляемую с обычными дистрибутивами Linux, поддерживают команду
:help
.
В наиболее общей версии
vi
,
vim
("Vi IMproved"), есть множество интегрированных средств из набора разработки Emacs, включая выделение синтаксиса, автоматическое расположение текста, язык написания сценариев и разбор ошибок компилятора.
4.2.
make
Основой программирования под Unix является
make
— средство, которое существенно упрощает описание компиляции программ. Даже притом, что небольшим программам порой достаточно одной команды для компиляции их исходного кода в исполняемый файл, все же намного легче написать
make
, чем строку вроде
gcc -02 -ggdb -DSOME DEFINE -о foo foo.c
. Более того, если имеется множество файлов для компиляции, а код был изменен лишь в некоторых из них,
make
создаст новые объектные файлы только для тех файлов, на которые повлияли изменения. Чтобы
make
совершила это "чудо", потребуется описать все файлы в make-файле (Makefile), пример которого показан ниже.
1: # Makefile
2:
3: OBJS = foo.о bar.о baz.o
4: LDLIBS = -L/usr/local/lib/ -lbar
5:
6: foo: $(OBJS)
7: gcc -o foo $ (OBJS) $ (LDLIBS)
8:
9: install: foo
10: install -m 644 foo /usr/bin
11: .PHONY: install
• Строка 1 — это комментарий;
make
следует обычной традиции Unix определения комментариев с помощью символа
#
.
• В строке 3 определяется переменная по имени
OBJS
как
foo.о bar.о baz.о
.
• В строке 4 определяется другая переменная —
LDLIBS
.
• В строке 6 начинается определение правила, которое указывает на то, что файл foo зависит от (в этом случае, собран из) файлов, имена которых содержатся в переменной
OBJS
.
foo
называется целевым объектом, а
$(OBJS)
— списком зависимостей. Обратите внимание на синтаксис расширения переменной: имя переменной помещается в