Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Электронный офис в Linux

О консольных текстовых редакторах
Зачем они нужны и какие бывают

Медицинское вступление

Зачем нужны текстовые редакторы вообще, когда имеется множество развитых текстовых процессоров с изобилием всяческих функций? А вот именно поэтому. Поскольку от текстового редактора в большинстве случаев требуется только одна функция - обеспечить комфортный ввод текста и минимальные с ним манипуляции (вырезание и вставка, поиск и замена, проверка орфографии). По крайней мере это касается длинных связных текстов содержательного характера - то есть от научных статей до любовных романов. И всякие потуги на форматирование (конечно, это мое личное мнение) только рассеивают внимание при создании оригинального материала. В результате чего и то, и другое получается плохо (конечно, это мое личное мнение).

Хорошо, но зачем редактор должен быть консольным? - спросите вы меня. Когда все прогрессивное человечество уже пол десятилетия работает в графических средах. На этот вопрос не трудно ответить любому обладателю близорукости пяти и более диоптрий, проводящему за редактированием текстов пять и более часов. Потому что, не смотря на все безусловные достоинства графического режима, режим текстовый (при мало-мальски нормальном мониторе) обеспечивает существенно меньшую нагрузку на зрение. А в Linux это усугубляется еще и тем, что шрифты графического режима, особенно кириллические, далеки, мягко говоря, от совершенства.

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

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

Поэтому необходимость в консольных редакторах будет сохраняться всегда. И Linux (как, впрочем, и Unix вообще) удовлетворяет эту потребность различными способами.

Во первых, в Linux имеется непременный атрибут любой Unix-системы - редактор Vi. Во вторых, есть EMACS - редактор, положивший основу всему открытому программному обеспечению. В третьих, в большинстве дистрибутивов присутствуют (и обычно устанавливаются по умолчанию) редакторы pico, joe, jed. И, наконец, в составе файлового менеджера Midnight Commander имеется встроенный редактор, доступный по клавише F4 (аналогично Norton'у, известному).

Что из себя представляют эти программы, для чего предназначены, на что способны? И какой из них выбрать?

Чтобы решить этот вопрос (по крайней мере, для себя), я решил провести эксперимент. На самом себе, как это принято, говорят, в медицине. А именно, загрузил в отдельной консоли каждый из этих редакторов и начал описывать свои впечатления о них. Пользуясь базовыми средствами, доступными по умолчанию. При этом я не старался не только описать, но даже постигнуть все потенциальное богатство описываемых систем, а только пытался определить, насколько они удобны для поставленной цели - составления "из головы" оригинального текста и его элементарного редактирования; а также - объединения нескольких текстов, перемещения блоков текста между ними и прочих операций, обычных при составлении длинных документов.

Все получившиеся тексты я свел воедино в том редакторе, который показался мне наиболее пригодным для моих целей. Каком - пока не скажу. В нем же и написал это вступление и грядущее заключение. Результатом и явилась настоящая заметка.

Vi и ViM - классика мира Unix

Не могу сказать, что Vi и его модификация - Vim, показались мне чрезвычайно удобными в использовании. Да простят меня старого закала, но от Vi веет какой-то допетровской Русью. Тем не менее, поскольку Vi присутствует абсолютно во всех Unix-системах и обычно является системным редактором по умолчанию, некоторое представление о нем иметь необходимо.

Основная сложность в освоении Vi для человека, привыкшего к редакторам с более или менее, но все же человеческим лицом, является наличие трех режимов: командного, ввода и построчного редактирования. После запуска программы (а это делается просто: vi имя_файла, существующего или нового) перед вами возникает черный экран с тильдами по левому краю каждой строки (рис. 1).

Текстовый редактор Vim

Рис. 1. Текстовый редактор Vim

Пользователь DOS, помнящий еще о WordPerfect версия 4 и 5 (прекрасный был, к стати, процессор) попытается тут же начать ввод текста - и не получит ничего, кроме звукового cигнала. Поскольку находится в режиме командном, ввода не допускающем. То есть нажатия на клавиши интерпретируются не как коды букв, а как команды программы.

Для перехода в режим ввода нужно нажать клавишу a (app) или i (insert); первая позволяет добавлять текст после курсора, вторая - вставлять перед. Теперь-то можно и печатать буковки, как в любом другом редакторе или процессоре. Можно перемещаться по тексту с помощью стрелок управления курсором.

Следует помнить только, что нажатие таких клавиш, как End и Home, не даст привычного для пользователя DOS результата. И, более того, автоматом переведет редактор в командный режим. Для всякого рода сложных перемещений (на слово влево и в право, в начало и конец строки, на стоку вверх и вниз, и так далее) используются всякого рода нажатия клавиш в командном режиме. То же относится и к операциям удаления и замены слов и текстовых блоков: клавиши delete или insert не окажут никакого действия на выделенные фрагменты; нужно перейти в командный режим и выполнить соответствующие действия уже там.

А вот сохранение файла и выход из него требуют еще одного режима - построчного редактирования. Для этого нужно из режима ввода в командный (нажатием клавиши Escape) и набрать :, а после (без пробела) букву для соответствующего действа; например, w - для сохранения, q - для выхода (если файл был изменен, последует предложение сохранить изменения командой :w) или q! - для выхода без сохранения изменений.

Следует заметить, что далеко не всегда ясен текущий режим редактора. В той версии, к которой я набираю эти строки (Vim) режим ввода маркируется строчкой --INSERT-- внизу экрана; но в общем случае - это не обязательно. Косвенно текущий режим можно определить нажатием клавиши escape: в случае режима ввода это переведет редактор в командный режим, а в командном - просто вызовет звуковой сигнал.

В наших условиях сложность работы с Vi усугубляется русскими буквами: если вы перешли в командный режим непосредственно из кириллической раскладки (да еще и забыли об этом) - никакие его команды работать не будут. Вызывая жалобное попискивание. А поскольку в консоли раскладка клавиатуры не индицируется (по крайней мере, мне неизвестно, как это можно сделать) - можно провести некоторое время в недоумении, пока не сообразишь переключиться на латиницу.

Думаю. сказанного достаточно для обоснования моего мнения: Vi - далеко не самый удачный инструмент для набора длинных связанных текстов. Однако в критических случаях он может оказаться единственным инструментом для правки, скажем, конфигурационных файлов после сбоя системы. И потому не вредно получить о нем некоторое представление. Путем чтения соответствующего раздела в практически любой толстой книжке про Linux (или Unix вообще). EMACS

Текстовый редактор EMACS часто рассматривается как универсальный инструмент, позволяющий решать почти любые задачи - от правки конфигурационных файлов до написания исходников программ в многие тысячи строк. Мы же посмотрим, насколько адекватно он соответствует нашей задаче - ввода и редактирования длинных связанных текстов.

Функционально EMACS существенно ближе к текстовым редакторам DOS. Он имеет один-единственный режим - режим редактирования. Включающийся сразу же после запуска редактора (рис. 2). А всякого рода манипуляции осуществляются с помощью управляющих клавиш Control, Escape и Alt в комбинации с буквенными. Что особенно приятно нашему человеку, комбинации эти работают не зависимо от раскладки клавиатуры.

Редактор EMACS

Рис. 2. Редактор EMACS

В основе концепции EMACS лежит понятие буфер - то есть области оперативной памяти, в которой и осуществляются манипуляции с текстом. При запуске программы по умолчанию открывается пустой буфер. С буфером возможны следующие манипуляции:

  • в него может быть считано содержимое уже существующего файла ([Control+x] - общий компонент для всех операций с буферами и окнами, затем [Control+f] - от слова file, как я понимаю);
  • вновь созданный в буфере текст может быть записан как файл ([Control+x], [Control+s] - вероятно, от Save;
  • несколько текстовых файлов могут быть объединены в одном буфере последовательным выполнением команды ([Control+x] i), за которой следует запрос имени файла.

EMACS позволяет работать в одной консоли с несколькими файлами одновременно.Для этого для каждого файл посредством ([Control+x] b) создается новый буфер со своим именем (которое никакого отношения к имени файла иметь не обязано).

В каждом буфере можно работать с любым количеством окон, сколько их поместится на экране. Разделение экрана на два окна осуществляется командой ([Control+x] 2), переход между окнами командой ([Control+x] o). Фрагменты текста могут переноситься из окна в окно либо штатными командами EMACS, либо путем выделения мышью и вставки в позицию курсора щелчком средней ее клавиши.

Очень приятной особенностью EMACS является нормальное, с точки зрения пользователя DOS, поведение клавиш Home и End, перемещающих курсор, соответственно, в начало и конец экранной (не истинной!) строки. И еще: перенос слов на границе экрана осуществляется без разрыва строки, то есть, в терминологии текстовых процессоров, без образования нового абзаца (возникающего только при нажатии клавиши Enter). Что очень полезно, если в дальнейшем предполагается экспорт в какой-либо текстовый процессор типа Word: искоренение лишних Enter'ов, возникающих при переносе слов во многих редакторах, в Word - занятие не из самых жизнерадостных.

EMACS обладает довольно эффективными инструментами для редактирования введенного текста. Они основываются на понятии блока - то есть текстового фрагмента, расположенного между меткой (вводимой комбинацией [Control+@] и текущим положением курсора. Блок может быть изъят (аналог Cut в Windows) командой [Control+w] и вставлен (в текущем окне или буфере, или в ином другом) командой [Control+y]. Имеется также многоуровневая отмена последовательностю команд ([Control+x] u).

В общем, пользователь, имеющий навыки работы со старыми текстовыми процессорами для DOS, основанными на использовании клавишных комбинаций, способен без большого труда освоить EMACS. А доведя манипуляцию ими до автоматизма - и эффективно его использовать. Недостаток его (впрочем, характерный почти для всех консольных редакторов Linux) - крайне непривычное, для пользователей DOS использование мыши: с ее помощью можно только выделять фрагменты текста, но на текущую позицию курсора она никакого влияния не оказывает. Кроме того, мерцание последнего раздражает (по крайней мере, меня).

Текстовый редактор Pico

Pico - командно-ориентированный редактор, входящий в состав почтовой системы pine. Он очень компактен, что позволяет использовать его на слабых машинах. Все манипуляции в нем осуществляются посредством комбинации Control+буква. Что работает и при кириллической раскладке клавиатуры. Основные клавишные комбинации постоянно присуствуют в нижней части экрана, не требуя чрезмерного напряжения памяти (рис. 3).

Редактор pic

Рис. 3. Редактор pico

Этот редактор не позволяет работать с несколькими файлами или окнами в одной консоли; однако возможна вставка любого числа текстовых файлов с диска в текущий файл.

А так возможности редактирования довольно убоги: можно удалить ([Contol+k] Cut - в том же значении, что и в Windows) строку текста, на которой находится курсор, а затем вставить ее куда либо еще - переместив курсор на новую строку и выполнив команду [Contol+u], то есть UnCut. Есть еще функции поиска, проверки орфографии, а также своеобразно понимаемая опция Justify - вписывание строк, выходящих за границы экрана, в его пределы.

В целом pico, конечно, не пригоден для работы с объемными текстами. Однако, как мне представляется, почти идеален для правки конфигурационных файлов. Поскольку интуитивно более понятен, чем Vi, и много проще в использовании.

Текстовый редактор Joe

Этот редактор многолик. Поскольку способен эмулировать все прочие - и Vi, и Emacs, и pico, а также еще пару. Но собственно Joe - это командно-ориентированный, управляемый путем комбинации Control+буква-[буква]. Что, как и следовало ожидать, не работает при кириллической раскладке клавиатуры. Делая этот редактор малопригодным для работы с объемными русскоязычными документами.

При запуске Joe появляется черный экран, доступный для ввода и редактирования текста. Присутствует также статусная строка, содержащая имя файла, текущие линию и колонку, а также указание для вызова помощи ([Control+k] h); последняя, правда, занимает около трети экрана, но может быть убрана вторичным вводом той же клавишной комбинации (рис. 4).

Редактор Joe

Рис. 4. Редактор Joe

Редактирование текста основывается на понятии блока и не производит впечатления богатства возможностей. Можно отметить начало и конец блока командами ([Control+b] h) и ([Control+k] k), соотвественно.

Редактирование текста основывается на понятии блока и не производит впечатления богатства возможностей. Можно отметить начало и конец блока командами ([Control+b] h) и ([Control+k] k), соответственно, скопировать или переместить его в другое место, а также удалить. Понятия вставки удаленного фрагмента (аналогичного буферу изъятия в EMACS) - нет.

Интересно, что клавиша Home ведет себя, как в редакторах для DOS, то есть перемещает курсор в начало экранной строки. Подсознательно и от клавиши End ожидаешь правильного поведения. Но не тут-то было - вместо этого она вставляет тильду перед позицией курсора. Что крайне раздражает. Хуже этого только необходимость переключаться на латиницу перед выполнением любой манипуляции. В общем, Joe не показался мне пригодным для использования в мирных целях, по крайней мере в русскоязычной стране.

Текстовый редактор Jed

Jed - редактор меню-ориентированный, что делает его, казалось бы, более привычным для пользователя, пришедшего из мира DOS-Windows. Во всяком случае, при запуске можно видеть строку меню достаточно стандартного вида - с пунктами File, Edit, Search, Buffers, Windows, System, Help, с выделенными горячими клавишами, активизация которой происходит по нажатии F10, прямо как в Лексиконе (рис. 5).

Редактор Jed

Рис. 5. Редактор Jed

Однако если Jed был загружен без имени файла, он долго и упорно будет требовать введения такового в командной строке внизу экрана. И на File-Open реагировать не пожелает. Пока не додумаешься выполнить File-Cancel Operation. Только после этого потребный файл можно будет открыть обычным (вернее, привычным) образом.

Дальше - еще интереснее. Ну, то, что ни Home, ни End не работают - ладно, пора уже бы и привыкнуть. Но не работает и delete - удалить введенное можно только клавишей backspace. И меню абсолютно не реагирует на мышь, хотя внутри текста манипуляции мышью осуществляются обычным для Linux-консоли способом.

Как я уже говорил, в меню цветом выделены горячие клавиши, вызывающие соответствующие действия при его активизации. Однако - только при латинской раскладке клавиатуры, что полностью обесценивает эту полезную опцию.

К достоинствам Jed можно отнести возможность работы с несколькими файлами. Что реализуется через новые буферы, аналогично тому, как это сделано в EMACS. Можно также работать с двумя (как будто бы, не больше) окнами. В которых может быть открыт один и тот же файл, или разные.

Предусмотрены также различные режимы (кроме основного, текстового) для поддержки различных языков программирования (C, TeX, Forttan и другие; HTML, к сожалению, среди них нет). Однако это не делает Jed более пригодным для решения поставленной в этой заметке задачи.

Текстовый редактор Midnight Commander

Входящий в состав этой оболочки текстовый редактор - пожалуй, наиболее близкое и родное Linux-создание для старого пользователя DOS. Поскольку напоминает видом редактор из советского народного Командира Нортона. И почти таков же нравом.

Все здесь радует глаз (рис. 6): и привычный синий фон с нерезко белыми буквами, и статусная строка в верхней части экрана, и линейка нумерованных (по функциональным клавишам) операций - внизу. Привычно работают клавиши Home и End, delete и backspace; и щелчок мышью в тексте приводит к перемещению курсора в эту позицию. Правда, в отместку за это не работает вставка выделенного фрагмента по щелчку средней клавиши.

Встроенный редактор Midnight Commander

Рис. 6. Встроенный редактор Midnight Commander

Как и в Нортоне, по умолчанию отключен перенос слов на краю экрана; что можно оценивать двояко: с одной стороны, при экспорте в текстовые процессоры не плодятся лишние абзацы, с другой - редактировать текст, перемещаясь туда-сюда на два-три экрана (никакого горизонтального скроллирования, разумеется, нет) - не верх удобства. Правда, режим переноса можно включить - динамически или на фиксированном числе знаков.

Назначение функциональных клавиш также более или менее совпадает. Хотя в MC есть специфика, касающаяся копирования, перемещения и удаления; так, последнюю операцию можно выполнить только через F8, но не через delete.

Выделение текстовых фрагментов - самое разнообразное, и по клавише F3, и мышью, и клавишами управления курсором при нажатом Shift. Правда, не лучшим образом осуществляется копирование и перемещение: если предназначенный для этого фрагмент выделен мышью, курсор в новую позицию можно переместить только стрелками, иначе выделение пропадет. Но зато - есть выделение прямоугольных столбцов.

Приятна также полная русификация программы. И все сочетания управляющих и буквенных клавиш работают как при латинской, так и кириллической раскладке клавиатуры.

В отличие от оригинального Нортона, я не обнаружил никаких ограничений на размер открываемого файла. По крайней мере, файл размером в 400 Кбайт был открыт безропотно.

Правда, в редакторе MC нет функции создания текстового файла. Его можно вызвать только для просмотра уже существующего файла, хотя бы пустого. Но ведь эта проблема решается просто:

cat > имя_файла ^d

и пустой файл готов. Можно наполнять его своими бесценными мыслями. Нет также и встроенной проверки орфографии. Что, при наличие русского ispell, также не доставляет неудобств.

В общем, редактор хороший. Правда, я не освятил всех его достинств. Но подробно о нем можно прочитать у Виктора Костормина.

Заключение

Как и положено, в заключение проведу небольшое сравнение. Не претендующее не только на полноту, но и на объективность. Поскольку оценка производилась соответственно задачам, поставленным во вступлении. То есть созданию оригинальных текстов содержательного характера.

И потому на первое место я все же поставил бы EMACS. Поскольку набор в нем осуществляется традиционным для DOS способом, освоить управляющие комбинации - большого труда не составляет, использование их достаточно эффективно. А на выходе получается чистый plain text без лишнего разбиения на строки.

Для мелкомасштабного редактирования (скажем, конфигурационных файлов) оправдано использование pico. Редактор из MC также вполне подходит для этой цели. Позволяя, в то же время, и создание оригинальных текстов средней длинны.

Что касается традиционного Vi, на мой взгляд (заранее прошу прощения у его адептов), освоение его специфики нецелесообразно для любого, не впитавшего привычку к этому редактору с молоком матери. Joe практически не имеет специфических особенностей, оправдывающих трудозатраты и неудобства. Ну а меню-ориентированность Jed не искупает неудобства реализации.

Во избежание необоснованных упреков, повторяю, что моя оценка не относится к качеству рассматриваемых редакторов как таковых. А исключительно к применению их к декларированной задаче - сочинению оригинальных текстов содержательного характера. Типа этой статьи, например. Вполне возможно, что применительно к другим задачам любой из забракованных мной редакторов окажется вполне эффективным.

Алексей Федорчук
Писано на Поселке 26 февраля 2000 г.



Copyleft by
Alex Fedorchuk