Опубликован: 22.06.2005 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания IBM
Лекция 9:

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

Работа с файлами

В Emacs, как и в Vim, пользователь редактирует текст не в самом файле, а в буфере. Отличие Emacs в том, что нельзя написать "безымянный" текст и затем сохранить его в файле. При запуске Emacs без параметров открывается специальный буфер – " *scratch* ". Он предназначен для временных заметок – его содержимое будет выброшено при закрытии Emacs. Если нужно создать новый файл – его следует открыть командой " C-x C-f ", точно так же открывается для редактирования уже существующий файл.

После того как Мефодий нажал " C-x C-f ", в минибуфере возникло приглашение: " Find file: ~/ ". Теперь нужно ввести путь к файлу, начиная с текущего каталога (Emacs любезно подсказал его Мефодию). С текстом в минибуфере можно обращаться почти так же, как с командной строкой shell или Vim: редактировать, использовать автодополнение (клавишей Tab ), перемещаться по истории стрелочками вверх/вниз. Мефодий не замедлил воспользоваться этой возможностью и, набрав " te ", нажав Tab и Enter, приступил к редактированию того же " textfile ". Сохранить сделанные изменения можно командой " C-x C-s ".

Когда Мефодий захотел открыть еще один буфер, чтобы выполнить один из своих сценариев, он забыл точное название нужного файла и, набрав " C-x C-f bin/ ", нажал Enter. В окне возник список файлов в подкаталоге " ~/bin ", похожий на вывод ls -l:

File Edit Options Buffers Tools Operate Mark Regexp Immediate Subdir Help
 /home/methody/bin:
 итого 24
 drwxr-xr-x  2 methody methody 4096  Дек 2 15:21 .
 drwx------ 10 methody methody 4096  Дек 2 15:21 ..
 -rwxr-xr-x  1 methody methody   26  Ноя 9 21:34 loop
 -rwxr-xr-x  1 methody methody   23  Ноя 9 21:34 script
 -rwxr-xr-x  1 methody methody   32  Ноя 9 21:34 to.sort
 -rwxr-xr-x  1 methody methody   44  Ноя 9 21:34 two
-RRR:%%-F1 bin (Dired by name)--L5--C51--All--Reading directory /home/methody/bin/...done
Пример 9.9. Emacs. Режим dired

Как указано в строке режима, это Dired, редактор каталогов, режим Emacs, предназначенный для просмотра и изменения каталогов прямо из редактора. В Dired можно выбирать отдельные файлы или группы файлов и производить над ними различные действия: открыть для редактирования, удалить, скопировать, переместить, переименовать по определенной схеме и т. д. Одним словом, Dired – довольно мощное средство для наглядной работы с файловой системой, особенно он удобен для работы с группой файлов. Подробности о командах, доступных в этом режиме, можно найти в руководстве по Emacs.

Перемещение по тексту

В Emacs, как и в Vim, есть понятие " точка " – то место в буфере, где будет происходить вставка или удаление данных. Перемещение по тексту – это перемещение точки. Команды перемещения по структурным элементам текста развиты не менее, чем в Vim – помимо обычных стрелок, действуют команды перемещения в начало и конец строки ( C-a и C-e ), буфера ( M-< и M-> ), предложения ( M-a и M-e ), к предыдущему и следующему слову ( M-f и M-b ), абзацу ( M-{ и M-} ). Различные основные режимы предоставляют специализированные команды для перемещения по структурным элементам текстов на разных языках программирования, разметки и др.

В Emacs несколько видов поиска: существуют отдельные команды для поиска строки и поиска по регулярному выражению. Если требуется найти ближайшее употребление конкретного слова, удобнее всего воспользоваться наращиваемым поиском по команде C-s. Наращиваемый поиск уже встречался Мефодию: так был устроен поиск по истории команд в bash. По мере набора первых символов искомой строки Emacs переносит точку к ближайшему подобному сочетанию символов после курсора. Поиск в обратном направлении (к началу буфера ) осуществляется командой C-r. Наращиваемый поиск можно выполнять по регулярному выражению ( C-M-s ). Все виды наращиваемого поиска в Emacs не различают прописные и строчные буквы.

Изменение текста

В Emacs есть множество команд, позволяющих пользователю выполнять меньше действий при редактировании текста. Если пользователь осознает, что набрал что-то неправильно, он может разом удалить последнее слово ( M-Del ) или предложение ( C-x Del ). Можно уничтожать и вперед: до конца слова ( M-d ) и предложения ( M-k ). Emacs хранит не только последний удаленный фрагмент, но и все предыдущие, формируя список удалений. Только что уничтоженный текст можно вставить командой C-y. После этого его можно заменить предыдущим уничтоженным фрагментом – M-y. Можно двигаться и далее назад по списку удалений, повторяя M-y.

Хорошо продуманы команды для перестановки частей текста вокруг точки: двух знаков ( C-t ), слов ( M-t ), строк ( C-x C-t ). Команда M-t не перемещает знаки препинания между словами, поэтому " потеха, дело " превратится в " дело, потеха ".

Прямо из Emacs можно вызвать программу проверки орфографии (" M-x ispell-buffer ") или даже включить проверку "на лету", когда неправильно написанные слова выделяются другим цветом (" M-x flyspell-mode "). Можно проверить написание отдельного слова, в котором находится точка (" M-x $ ") или завершить недописанное слово, основываясь на орфографическом словаре (" M-x Tab ").

В Emacs так много специальных команд для изменения текста, что команды поиска и замены бывают нужны не так часто. Произвести замену строки всюду в буфере можно по команде " M-x replace-string что заменить Enter на_что_заменить Enter ", а для замены регулярного выражения существует аналогичная команда " M-x replace-regexp ".

Если нужно заменить строку только в некоторых случаях, пригодится команда M-%, запрашивающая подтверждение о замене при каждой найденной строке. Аналогичная команда для регулярных выраженийC-M-%.

Любые изменения в тексте можно отменить командой C-_ (нужно нажать Ctrl, Shift и " - ").

Работа с фрагментами текста

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

  • переместить точку (курсор) на один конец нужного фрагмента;
  • нажать M-Пробел (установить метку );
  • переместить точку к другому концу нужного фрагмента.

Теперь можно выполнять команду редактирования – она будет применена именно к выделенной области. Например, C-w удалит текст области, а M-w скопирует его. Вставить удаленный или скопированный фрагмент можно командой C-y.

Есть группа команд, позволяющих работать с меткой более эффективно: установить метку после конца следующего слова ( M-@ ), пометить текущий абзац ( M-h ) или весь буфер (" C-x h "). Различные основные режимы предоставляют команды для пометки структурных элементов текста, например, разделов документа, определения функции (в тексте программы) и т. п. Все положения метки хранятся в списке пометок, перенести точку в любое из предшествующих положений метки можно, нужное количество раз повторив команду " C-u C-@ ".

Область. Непрерывный отрезок текста, ограниченный точкой с одной стороны и меткой с другой.

Как и в Vim, в Emacs можно использовать для хранения информации регистры. В регистре Emacs можно сохранить позицию в буфере и затем перейти к этой позиции (" C-x r Пробел x " записывает позицию точки в регистр " x ", а " C-x r j x " переходит в эту позицию). В регистре можно сохранить текст из области (" C-x r s x " сохраняет область в регистре " x ", " C-x r i x " – вставляет текст из этого регистра ). В регистрах также можно хранить числа, имена файлов, конфигурацию окон. Подробности, как всегда, в руководстве.

Настройка Emacs

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

Просто текстовые редакторы

И в Vim, и в Emacs интегрировано множество средств для автоматизации процесса редактирования. Эти редакторы становятся удобны в том случае, если прежде чем делать что-то вручную, пользователь обращается к руководству и находит в нем способ выполнить свою задачу максимально быстро и с минимальными затратами ручного труда. Однако если пользователя не устраивает такой принцип работы (когда нужно часто читать документацию и думать, как организовать так, чтобы "ручную" работу выполнял компьютер), Vim и Emacs будут не самым лучшим выбором. Для обычного редактирования текста вручную лучше выбрать один из текстовых редакторов с простым и привычным интерфейсом: в дистрибутивах Linux можно найти огромное количество таких текстовых редакторов с большими или меньшими возможностями: mcedit, joe, pico (часть почтовой программы pine ) – всех не перечислить. Есть редакторы, которые предназначены для работы не в терминале, а в графической среде (например, nedit ), у тех же Vim и Emacs есть графические варианты (GVim и Emacs-X11 или XEmacs), в которых доступны дополнительные возможности графического пользовательского интерфейса: меню, иконки и пр.

Аягоз Имансакипова
Аягоз Имансакипова
Тимур Булатов
Тимур Булатов

С момента выхода курса прошло достаточно много времени, и хотелось бы понимать, насколько курс является актуальным на сегодняшний день.