2004 г.
Linux для пользователя
Виктор Костромин,
http://rus-linux.net/
Глава 12. Программы для работы с текстом
12.5. Консольные редакторы ASCII-файлов
Начнем с рассмотрения редакторов текстового режима, т. е. работающих в консоли. Говоря о таких редакторах просто нельзя не упомянуть о редакторахы vi и Emacs, но более основательно будет рассмотрен встроенный редактор оболочки Midnight Commander – Cooledit.
12.5.1 Редакторы типа vi
Редактор vi (или его несколько доработанные потомки) по умолчанию включается в любую UNIX-подобную систему, в том числе и во все дистрибутивы Linux. Все приверженцы UNIX, имеющие значительный стаж работы с этими ОС, знают и используют этот редактор. Описание редактора vi вы сможете найти если не в любой, то уж точно в большинстве книг, посвященных UNIX. У редактора vi имеется несколько потомков, которые в чем-то его улучшают и усовершенствуют. Это такие редакторы как Vim, bvi, Nvi, Elvis, Levee, vile, Wily (редактор Vim даже вызывается в Linux по команде vi). Краткий обзор редакторов этого класса вы можете найти в статье А. Фомичева "Текстовые редакторы для ОС UNIX" (Открытые системы, № 4, 1994 г.). Однако для тех пользователей, которые мигрировали в Linux из среды Windows, все эти редакторы вряд-ли покажутся удобными. Причина в том, что в этих редакторах нет привычных меню и подсказок (насколько можно судить по Vim версии 5.3) и надо запомнить множество клавиатурных комбинаций для ввода команд. При этом работа в редакторе организована в виде двух раздельных режимов — ввода текста и ввода команд, и новичок часто просто путает режимы. В общем без печатного руководства за освоение редакторов этого типа я бы вам браться не рекомендовал. И хотя те, кто освоил vi, часто прибегают к его помощи для редактировании простых файлов (особенно, конфигурационных файлов и скриптов), я считаю, что есть более удобные средства, а поэтому не рассматриваю редакторы типа vi (хотя не упомянуть о них не мог).
12.5.2 Редактор Emacs
Наибольшую известность среди редакторов, используемых в Linux, имеет Emacs. Он существует как в варианте для текстового режима, так и в варианте для графической оболочки. Некоторые даже говорят, что Emacs — это не редактор, а образ жизни, а в другом источнике его называют религией. Если вы хотите ближе познакомиться с Emacs, я могу рекомендовать вам недавно вышедший русский перевод книги Р.Столлмана о нем; поищите эту книгу, например, в виртуальном магазине "Болеро". Прекрасное вводное описание этого редактора вы найдете в книге А.Федорчука "Офис, графика, Web в Linux". Я, однако, считаю, что начинающим пользователям для редактирования ASCII-файлов целесообразно использовать CoolEdit — встроенный редактор файлового менеджера Midnight Commander.
12.5.3 CoolEdit — встроенный редактор программы Midnight Commander
CoolEdit — это простая в использовании программа с привычными для большинства пользователей (особенно для тех, кто работал с Norton Commander под DOS или с FAR под WINDOWS) комбинациями управляющих клавиш. Кроме того, надо учитывать, что обычно любая работа с файлом начинается с файлового менеджера, поскольку вначале нужно, как минимум, найти файл. Midnight Commander как раз и является таким файловым менеджером, причем переход к редактированию осуществляется простым нажатием клавиши <F4> после установки подсветки на имя найденного файла. Это мелочь, но удобно. Учитывая изложенные соображения, я начну подробный рассказ о текстовых редакторах именно с CoolEdit.
Встроенный редактор Midnight Commander (рис.12.7) вызывается во время работы в этой программе нажатием клавиши <F4> при условии, что в инициализационном файле Midnight Commander установлена в 1 опция "use_internal_edit". Его также можно вызвать независимо от Midnight Commander просто из командной строки, командой mcedit. Однако его истинное имя все же CoolEdit, в этом вы можете убедиться, если в режиме редактирования нажмете клавишу <F9> и откроете пункт меню Файл | Об авторах.
Рис. 12.7. Внешний вид окна редактора Cooledit
Этот редактор обеспечивает выполнение большинства функций редактирования, присущих полноэкранным редакторам текста. С его помощью можно редактировать файлы практически любого размера, поскольку верхняя граница для размера редактируемого файла составляет 16 Мбайт. Обеспечивается редактирование исполняемых (двоичных) файлов без потери данных.
Поддерживаются следующие возможности:
- копирование, перемещение, удаление, вырезание и вставка блоков текста;
- отмена предыдущих операций (по комбинации клавиш <Ctrl>+<U>);
- выпадающие меню;
- вставка файлов;
- макро-определения;
- поиск и замена по регулярным выражениям (другими словами, по шаблонам, сформированным с использованием специальных символов), а также собственный вариант операций поиска и замены, основанный на функциях scanf-printf;
- выделение текста комбинацией клавиш <Shift>+<стрелки> в стиле MS Windows — MAC (только для linux-консоли);
- переключение между режимами вставки-замены символа.
Редактор очень прост и практически не требует обучения (тем более, что можно найти версии, в которых основная часть пунктов меню русифицирована, такая версия была включена, например, в дистрибутив Black Cat 5.2). Для того, чтобы узнать, какие клавиши вызывают выполнение определенных действий, достаточно просмотреть выпадающие меню, вызываемые нажатием клавиши <F9> в окне редактора (рис. 12.8).
Рис. 12.8. Выход в меню Cooledit по клавише <F9>
Если вы работаете в консоли Linux, для работы с блоками текста можно использовать следующие комбинации клавиш:
- <Shift>+<клавиши стрелок> — выделение блока текста;
- <Ctrl>+<Ins> — копирует блок в файл cooledit.clip;
- <Shift>+<Ins> — производит вставку последнего скопированного в cooledit.clip блока в позицию курсора;
- <Shift>+<Del> — удаляет выделенный блок текста, запоминая его в файле cooledit.clip.
Если у вас установлена программа gpm — драйвер мыши для консоли, то вы можете нажать на левую кнопку мыши в начале выделяемого блока, перенести курсор в конец блока и отпустить кнопку (тем самым выделить текст), а затем перенести курсор туда, куда надо вставить фрагмент, и нажать на правую кнопку мыши для вставки выделенного текста.
Редактор поддерживает макросы. Для того, чтобы определить макрос, нажмите <Ctrl>+<R>, после чего введите строки команд, которые должны быть выполнены. После завершения ввода команд снова нажмите <Ctrl>+<R> и свяжите макрос с какой-нибудь клавишей или комбинацией клавиш, нажав эту клавишу (комбинацию). Макрос будет вызываться нажатием <Ctrl>+<A> и назначенной для него клавиши. Макрос можно также вызвать нажатием любой из клавиш <Alt>, <Ctrl> или <Esc> и назначенной макросу клавиши, при условии, что данная комбинация не используется для вызова какой-либо другой функции.
Макро-команды после определения записываются в файл cedit/cooledit.macros в Вашем домашнем каталоге. Вы можете удалить макрос удалением соответствующей строки в этом файле.
При выполнении операций замены (по функциональной клавише <F4>) вы можете использовать функции поиска и замены scanf для поиска и замены в соответствии с шаблонами формата языка C. Вначале посмотрите man-страницы sscanf и sprintf, чтобы узнать, что такое шаблоны формата и как они работают.
Приведем пример: предположим, вы хотите заменить все вхождения блоков текста, состоящих из открывающей скобки, трех разделенных запятыми чисел, и закрывающей скобки, на блок, состоящий из слова apples, третьего числа исходного блока, слова oranges и потом второго числа из исходного блока. Тогда в диалоговом окне, которое появится при вызове команды замены (<F4>), надо задать следующие шаблоны:
Enter search string
(%d,%d,%d)
Enter replace string
apples %d oranges %d
Enter replacement argument order
3,2
Последняя из этих строк говорит, что третье и второе число должны быть подставлены на места первого и второго аргументов. Рекомендуется все же при осуществлении замены пользоваться опцией "спрашивать подтверждение" ("Prompt on replace"), потому что программа считает совпадениями все случаи, когда число аргументов совпадает с заданным, хотя это не всегда означает полное совпадение. Scanf также не обращает внимания на количество символов пробела.
Встроенный редактор обрабатывает символы из второй половины кодовой таблицы (160+). Но когда редактируете бинарные файлы, лучше установить опцию Биты символов (Display bits) из меню Настройки в положение "7 бит", чтобы сохранить формат файла.
Для того, чтобы описать здесь все функции встроенного редактора, потребовалось бы слишком много места. Да в этом и нет нужды, поскольку для его использования достаточно запомнить, что все основные операции можно выполнить через пункты меню, которое вызывается нажатием клавиши <F9> в окне редактирования. Кроме того, можно прочитать man-страницу по команде man mcedit или info mcedit.
В завершение этой краткой справки по встроенному редактору программы Midnight Commander мне хочется рассказать о том, как осуществляется перенос фрагментов текста из одного файла в другой.
Если вы работаете в консоли, то эта задача решается через меню или с помощью следующих операций:
- отмечаем начало блока с помощью клавиши <F3>;
- перемещаем курсор к концу блока;
- отмечаем конец блока с помощью клавиши <F3>;
- набираем комбинацию <Ctrl>+<Insert>;
- закрываем этот файл, открываем другой;
- ставим курсор туда, куда хотим вставить данный фрагмент, и нажимаем комбинацию клавиш <Shift>+<Insert>.
Все, задача выполнена. Перенос фрагмента текста этим способом может быть произведен из одной виртуальной консоли в другую.
Но все это работает только в консоли. А при работе с тем же редактором в окне графической оболочки та же задача была для меня достаточно долгое время проблемой.
Я не сразу нашел способ ее решения (т. е. переноса фрагмента текста), который работает как в консоли, так и в окне графической оболочки. Этот способ состоит в переносе фрагмента текста через другой файл (по умолчанию используется файл ~/.cedit/cooledit.clip). Выделите фрагмент текста, выберите пункт меню Файл | Копировать в файл (File | Copy to file) и нажмите <Enter>. Затем переходите в другой файл, ставите курсор туда, куда надо вставить фрагмент, и выбираете пункт меню Файл | Вставить файл (File | Insert file).