Опубликован: 27.07.2006 | Доступ: свободный | Студентов: 4413 / 1103 | Оценка: 4.28 / 4.13 | Длительность: 26:56:00
Специальности: Программист
Лекция 4:

Обработка документов

Редактирование

Чтобы редактировать файл, вы должны дать команду редактору считать его и подготовить буфер, содержащий копию текста файла. Эта операция называется обращением к файлу. Команды редактирования применяются непосредственно к тексту в буфере, то есть к копии внутри Emacs. Ваши изменения появятся в самом файле только после сохранения буфера. Как уже отмечалось, для обращения к файлу служит команда C-x C-f. Если вы обращаетесь к файлу, который уже был открыт, то новый буфер не создается.


Можно стартовать Emacs с указанием конкретного имени файла, например "emacs file.txt &". В этом случае редактор создаст буфер и загрузит в него содержимое указанного файла (если файл с таким именем отсутствует, то будет создан пустой буфер), после чего можно сразу приступать к редактированию.

После внесения изменений в буфер нужно сохранить его содержимое. Сохранение буфера в Emacs означает запись его содержимого обратно в файл, с которым связан этот буфер. Для этого служит команда C-x C-s.

Если буфер содержит изменения, которые не были сохранены в файл, то о буфере говорят, что он изменен (или модифицирован). Это означает, что изменения будут потеряны, если буфер не сохранить. Признаком того, что буфер изменен, служат две звездочки в статусной строке окна редактора.

Emacs время от времени (основываясь на подсчете нажатых вами клавиш) самостоятельно записывает все модифицированные буфера. Эта операция называется самосохранение или автосохранение. При автосохранении создается файл, имя которого отличается от имени исходного файла наличием в начале и конце имени символа " # ". Например, буфер, связанный с файлом exam.txt, будет сохранен в файл #exam.txt#. Когда вы сохраните буфер, Emacs удалит автосохраненный файл.

Для создания и редактирования документа можно воспользоваться строкой меню, расположенной в верхней части окна Emacs. Строка меню содержит следующие пункты:

  • Buffers - служит для перемещения по ранее созданным буферам с файлами;
  • Files - это меню дублирует команды работы с файлами;
  • Tools - служит для выполнения множества различных действий; отметим, что оно содержит возможность работы с несколькими буферами;
  • Edit - при редактировании документа можно воспользоваться этим меню, среди функций есть возможность проверки орфографии (Spell);
  • Search - это меню нужно для поиска фрагментов текста в документе,
  • HTML (или TeX, Java и т. д.) - появляется, если Emacs "узнал" расширение файла, в этом случае предоставляются дополнительные возможности, специфические для файлов с данным расширением (так, например, если это файл с расширением html, то появляются возможности вставки наиболее распространенных команд разметки гипертекста);
  • Help - меню помощи

Выделять и копировать текст удобно с помощью мыши. Выделенный фрагмент текста можно удалить, щелкнув на нем правой кнопкой мыши, а также вставить в любую часть документа нажатием на среднюю кнопку мыши или путем выполнения команды C-y или Shift+Insert.

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

Перечислим некоторые команды редактора Emacs для работы с текстом. Если вы ошиблись при вводе какой-либо команды, то комбинация клавиш C-g прервет ее ввод.

Команда Назначение
DEL Удалить знак перед позицией курсора
C-d Удалить знак после позиции курсора
C-k Уничтожить все до конца строки
M-d Уничтожить слово
M-DEL Уничтожить предыдущее слово
C-y Восстановить последний уничтоженный текст
C-a Переместить курсор в начало строки
C-e Переместить курсор в конец строки
M-f Переместить курсор на слово вперед
M-b Переместить курсор на слово назад
C-n Переместить курсор на строку вниз
C-p Переместить курсор на строку вверх
M-l Перевести слово в нижний регистр
M-u Перевести слово в верхний регистр
M-c Перевести слово в нижний регистр с первой заглавной буквой
C-x u Отменить действие последней команды (откатка)
C-_ То же самое
Esc число команда Повторить указанное число раз команду

Для проверки орфографии нужно в меню Edit выбрать пункт Spell и указать язык, на котором будем осуществлять проверку. После этого выполнить команду Check Buffer из этого же пункта меню. Редактор Emacs будет выводить на экран пронумерованный список слов для замены; указав номер нужного слова, вы автоматически исправите ошибку. Если вы не хотите изменять существующее слово, нужно нажать клавишу Space. Очень удобен режим Incremental Mode, при котором проверка орфографии происходит в реальном времени, одновременно с просмотром или вводом текста: все слова с неверным написанием немедленно подчеркиваются.

Как и в других редакторах, в Emacs есть команды для поиска вхождений в текст какой-либо строки. Необычность их в том, что они являются наращиваемыми. Наращиваемый поиск начинается, как только вы набрали первый знак строки поиска. По мере того, как вы набираете строку поиска, Emacs показывает вам, где эта строка может быть найдена. C-s начинает наращиваемый поиск вперед; C-r используется для поиска назад.

Редактор Emacs позволяет производить автоматическую замену одного фрагмента текста на другой. Для этого необходимо выполнить команду M-x, после чего в окне минибуфера вводятся следующие данные (каждый ввод завершается нажатием клавиши Enter ):

  1. команда replace-string ;
  2. фрагмент текста, который вы хотите заменить;
  3. фрагмент, на какой производится замена

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

Клавиатурные макросы

В редакторе Emacs возможно использование специальных макрокоманд (или макросов), которые позволяют многократно повторять один раз введенную последовательность действий.

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

Команда Назначение
C-x ( Начать ввод макроса
C-x ) Закончить ввод макроса
C-x e Выполнить макрос

Макрос сохраняется в памяти редактора до тех пор, пока не будет определен новый макрос. Если вы хотите сохранить макрос клавиатуры дольше, чем до следующего определения, то ему нужно дать имя командой M-x name-last-kbd-macro. Введите команду (можно пользоваться клавишей Tab для автопродолжения), нажмите Enter, затем введите имя макроса. Для выполнения именованного макроса наберите M-x и имя макроса.

Рассмотрим на примерах приемы создания макросов.

Пример

Заменить указанную букву в тексте многоточием, а саму букву поместить в конце слова, окружив ее фигурными скобками, например, для буквы "о" в слове "выполнить" получить "вып...лнить{о}". Для этого необходима следующая последовательность команд:

  • переместиться к требуемой букве;
  • C-x ( - начать ввод макроса;
  • стрелка вправо;
  • C-пробел - установить метку;
  • стрелка влево;
  • C-w - удалить все с текущей позиции до метки;
  • ... - вставить три точки;
  • M-f - переместиться к концу слова;
  • { - ввести левую фигурную скобку;
  • C-y - вставить последний уничтоженный текст;
  • } - ввести правую фигурную скобку;
  • C-x ) - закончить ввод макроса.

После этого можно выполнить макрос при помощи комбинации клавиш C-x e. Сохраним данный макрос под именем one.

Теперь создадим макрос для обратной задачи: вставить вместо многоточия '...' в слове букву, стоящую в фигурных скобках в конце слова, т. е. заменить "вып...лнить{o}" на "выполнить". Приведем макрос, решающий данную задачу.

1. C-x ( 5. C-r ... 9. Backspace
2. C-s { 6. Enter 10. стрелка влево
3. стрелка влево 7. C-y 11. Backspace
4. C-k 8. Esc 3 C-d 12. C-x )

Отметим, что команда Esc 3 C-d трижды выполняет операцию удаления символа. Сохраним макрос под именем two.

Мы получили два макроса, выполняющие взаимно обратные преобразования. Убедитесь в этом, последовательно выполнив один макрос за другим: для выполнения первого наберите M-x one, для второго - M-x two.

Дополнительные возможности

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

Сначала отметим одну удобную возможность, предоставляемую редактором - это автопродолжение при вводе команд в строке минибуфера. Набрав начало длинной последовательности символов, воспользуйтесь клавишей Tab для показа возможных продолжений команды.

Emacs может работать и как настольный календарь. Чтобы войти в этот режим, наберите M-x calendar. Окно разделится на два, в нижнем из них будет показан календарь на три месяца, отцентрированный на текущем месяце с выделенной текущей датой. Изображение календаря автоматически прокручивается, когда вы сдвигаетесь за пределы видимой части. Ниже перечислены некоторые команды для работы с календарем.

Команда Назначение
o Запрашивает месяц и год, а затем центрирует трехмесячный календарь вокруг этого месяца
p d Выводит номер выбранного дня в году
Shift+s Показывает времена восхода и заката Солнца
Shift+m Выводит даты и времена всех четвертей Луны для показанного трехмесячного периода
q Выходит из календаря

Если вы заскучали, можете попробовать M-x hanoi. Как видно из названия команды - это реализация известной головоломки "Ханойская башня". Если вам очень скучно, то задайте численный аргумент, например, M-x hanoi 5.

Игра в крестики-нолики на бесконечной доске потребует от вас личного участия. Она запускается командой M-x gomoku ; выигрывает тот, кто сумеет построить ряд из 5 элементов.

M-x dunnet запускает большую приключенческую игру.

Если вас расстроили, запустите знаменитую программу Eliza (пример программы, моделирующей искусственный интеллект). Она выполняет функции психотерапевта, который готов помочь вам разобраться в ваших проблемах. Введите M-x doctor для запуска, а каждый свой ответ доктору заканчивайте двойным нажатием на клавишу Enter. Завершить сеанс общения с психотерапевтом следует при помощи команды quit.

Задания

  1. Запустите информационную систему и просмотрите документацию к командам Emacs.
  2. Создайте директорию Text и установите для нее следующие права доступа: для себя - чтение, запись, выполнение; для остальных - выполнение. Скопируйте в данную директорию файлы notepad.txt, kedit.txt, kwrite.txt. Переименуйте файл notepad.txt в файл windows.txt
  3. Создайте и выполните макросы для выполнения следующих действий:
    • добавление десяти пробелов в начало каждой строки;
    • удаление каждого второго слова.
Дмитрий Фаттахов
Дмитрий Фаттахов
Виктория Бельгесова
Виктория Бельгесова

Добрый день. Как получить удостоверение о прохождении данного курса?