Опубликован: 24.07.2006 | Доступ: свободный | Студентов: 8871 / 1200 | Оценка: 3.95 / 3.75 | Длительность: 41:47:00
ISBN: 978-5-94157-183-3
Лекция 13:

Программы для работы с текстом

Консольные редакторы ASCII-файлов

Начнем с рассмотрения редакторов текстового режима, т. е. работающих в консоли. Говоря о таких редакторах просто нельзя не упомянуть о редакторах vi и Emacs, но более основательно будет рассмотрен встроенный редактор оболочки Midnight Commander - Cooledit.

Редакторы типа 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 (хотя не упомянуть о них не мог).

Редактор Emacs

Наибольшую известность среди редакторов, используемых в Linux, имеет Emacs. Он существует как в варианте для текстового режима, так и в варианте для графической оболочки. Некоторые даже говорят, что Emacs - это не редактор, а образ жизни, а в другом источнике его называют религией. Если вы хотите ближе познакомиться с Emacs, я могу рекомендовать вам недавно вышедший русский перевод книги Р.Столлмана о нем; поищите эту книгу, например, в виртуальном магазине "Болеро". Прекрасное вводное описание этого редактора вы найдете в книге А.Федорчука "Офис, графика, Web в Linux". Я, однако, считаю, что начинающим пользователям для редактирования ASCII-файлов целесообразно использовать CoolEdit - встроенный редактор файлового менеджера Midnight Commander.

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> и откроете пункт меню Файл | Об авторах.

Внешний вид окна редактора Cooledit

увеличить изображение
Рис. 12.7. Внешний вид окна редактора Cooledit

Этот редактор обеспечивает выполнение большинства функций редактирования, присущих полноэкранным редакторам текста. С его помощью можно редактировать файлы практически любого размера, поскольку верхняя граница для размера редактируемого файла составляет 16 Мбайт. Обеспечивается редактирование исполняемых (двоичных) файлов без потери данных.

Поддерживаются следующие возможности:

  • копирование, перемещение, удаление, вырезание и вставка блоков текста;
  • отмена предыдущих операций (по комбинации клавиш <Ctrl>+<U>);
  • выпадающие меню;
  • вставка файлов;
  • макро-определения;
  • поиск и замена по регулярным выражениям (другими словами, по шаблонам, сформированным с использованием специальных символов), а также собственный вариант операций поиска и замены, основанный на функциях scanf-printf;
  • выделение текста комбинацией клавиш <Shift>+<стрелки> в стиле MS Windows - MAC (только для linux-консоли);
  • переключение между режимами вставки-замены символа.

Редактор очень прост и практически не требует обучения (тем более, что можно найти версии, в которых основная часть пунктов меню русифицирована, такая версия была включена, например, в дистрибутив Black Cat 5.2). Для того, чтобы узнать, какие клавиши вызывают выполнение определенных действий, достаточно просмотреть выпадающие меню, вызываемые нажатием клавиши <F9> в окне редактора (рис. 12.8).

Выход в меню Cooledit по клавише <F9>

увеличить изображение
Рис. 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).

Владислав Гермак
Владислав Гермак

Приглашения оболочки

Одна из очень важных переменных имеет имя PS1. Эта переменная задает вид приглашения, которое bash выводит, когда ожидает ввода очередной команды пользователем. По умолчанию этой переменной присвоено значение "\s-\v\$ ".

"\s-\v\$ ". -значиние /v замените /u