Работа с файлами
В 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
(html,
txt)
Как указано в строке режима, это 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), в
которых доступны дополнительные возможности графического
пользовательского интерфейса: меню, иконки и пр.