1. Emacs

Emacs - це, мабуть, найпотужніший текстовий редактор з усіх існуючих. Він може робити все, і необмежено розширюється, завдяки своїй вбудованій мови програмування на базі lisp. З допомогою Emacs ви можете бродити по вебу, читати пошту, примати участь у групах новин Usenet, готувати каву та тощо. Це не означає, що з цієї глави ви дізнаєтеся, як усі це робиться, проте ви отримаєте добрі початкові знання про те, як запустити Emacs, відредагувати один чи декілька файлів, зберегти їх і вийти з Emacs.

Якщо після прочитання цього, ви захочете докладніше вивчити Emacs, ви можете зазирнути сюди: Tutorial Introduction to GNU Emacs.

1.1. Коротке представлення

Запускається Emacs з командного рядку наступним чином:

emacs [файл1] [файл2...]

Emacs відкриє кожен файл, зазначений як аргумент, в окремому буфері. Якщо в рядку були вказані два файла, вікно буде автоматично розподілено на два, в першому з яких буде відображено останній з зазначених файлів, а у другому - список доступних буферів. Якщо ви запустите Emacs, не зазначивши в рядку жодного файла, ви опинитесь в буфері під назвою *scratch*. Якщо ви працюєте в X, будуть доступні меню за допомогою миші, а якщо ви в текстовому режимі, ви також можете отримати доступ до меню з допомогою клавіші F10, але в цій главі ми сконцентруємось на роботі з клавіатурою без усяких меню.

1.2. Початок роботи

А тепер настав час зайнятися практикою. Наприклад, давайте почнемо з відкриття двох файлів: file1 і file2. Якщо ці файли не існують, їх буде створено після того, як ви щось в них запишите:

$ emacs file1 file2

Після виконання цієї команди, буде показано наступне вікно:

Рисунок 8.1. Редагування двох файлів одночасно

Редагування двох файлів одночасно

Як ви можете бачити, було створено два буфера. Також у нижній частині екрана (де ви бачите (New file)) знаходиться третій буфер. Це міні-буфер. Ви не можете отримати до цього буферу безпосередній доступ. Вас має бути запрошено до нього Emacs'ом під час інтерактивних операцій. Для зміни поточного буфера, введіть Ctrl-X-O. Ви можете набирати текст як у “звичайному” редакторі, видаляючи символи за допомогою клавіш Del чи Backspace.

Для переміщення курсору ви можете використовувати клавіші зі стрілками, або такі комбінації клавіш: Ctrl-A для переходу на початок рядки, Ctrl-E для переходу в кінець рядки, Alt-< чи Ctrl-Home для переходу до початку буфера й Alt-> чи Ctrl-End для переходу в кінець буфера. Існує багато інших комбінацій, навіть комбінації для клавіш зі стрілками [19].

Щойно ви готові зберегти свої зміни на диск, наберіть Ctrl-XCtrl-S, чи, якщо потрібно зберегти вміст буфера в інший файл, наберіть Ctrl-XCtrl-W. Emacs запитає у вас ім'я файла, в який має бути записано вміст буфера. При цьому ви можете скористатися завершенням, скориставшись для цього клавішею Tab як у bash.

1.3. Обробка буферів

При необхідності ви можете залишити на екрані один буфер. Для цього є два способи:

  • Якщо ви перебуваєте в буфері, який треба приховати, наберіть Ctrl-X0.

  • Якщо ви перебуваєте в буфері, який слід залишити на екрані, наберіть Ctrl-X1.

Для відновлення буфера назад на екран є два способи:

  • наберіть Ctrl-XB і введіть ім'я потрібного вам буфера, або

  • наберіть Ctrl-XCtrl-B. При цьому буде відкрито новий буфер з ім'ям *Buffer List* (список буферів). Ви можете переміщатися по цьому буферу за допомогою послідовності Ctrl-XO, потім виберіть потрібний вам буфер і натисніть клавішу Enter, або введіть у міні-буфері ім'я потрібного буфера. Після того, як ви зробите вибір, буфер *Buffer List* повернеться в фоновий режим.

Якщо ви закінчили роботу з файлом і хочете позбутися пов'язаного з ним буфера, наберіть Ctrl-XK. Після цього Emacs запитає у вас, який із буферів він має закрити. За умовчанням це буде буфер, якому ви в даний момент перебуваєте. Якщо ви хочете позбутися іншого буфера, введіть його ім'я чи натисніть TAB: Emacs відкриє ще один буфер з ім'ям *Completions* (завершення), пропонуючи список можливих варіантів. Підтвердить свій вибір клавішею Enter.

Ви також у будь-який час можете відновити на екрані два видимих буфера. Для цього наберіть Ctrl-X2. За умовчанням новий створений буфер буде копією поточного буфера (який, наприклад, дозволяє вам редагувати великий файл в різних місцях “одночасно”). Для переміщення між буферами використовуйте описані вище команди.

Ви в будь-який час можете відкривати нові файли за допомогою Ctrl-XCtrl-F. Emacs спитає у вас ім'я файла, і ви знову можете скористатися автозавершенням, якщо знайдете це більш зручнішим.

1.4. Копіювання, вирізання, вставка, пошук

Припустимо, що ви перебуваєте в такій ситуації: Рисунок 8.2, “Emacs, перед копіюванням текстового блоку”.

Рисунок 8.2. Emacs, перед копіюванням текстового блоку

Emacs, перед копіюванням текстового блоку

Спочатку потрібно виділити блок, який ви хочете скопіювати. У цьому прикладі ми хочемо скопіювати ціле речення. Першим кроком буде установка курсору на початок області для копіювання. За умови, що курсор знаходиться в тієї ж позиції, що й на Рисунок 8.2, “Emacs, перед копіюванням текстового блоку”, послідовність команд буде наступною: Ctrl-Space (Control + клавіша пробіл). Emacs виведе в міні-буфері повідомлення Mark set (Мітку встановлено). Потім перейдіть на початок рядки, натиснувши Ctrl-A. Область, виділена для копіювання чи вирізання - це вся область між міткою і поточним положенням курсору, отже, в даному випадку це буде цілий рядок тексту. Доступні дві послідовності команд: Alt-W (для копіювання) чи Ctrl-W (для вирізання). Якщо ви виконуєте копіювання, Emacs відразу поверне курсор на позицію мітки, щоб ви могли бачити виділену область.

І на завершення, перейдіть в буфер, в який ви хочете скопіювати текст, і натисніть Ctrl-Y. При цьому ви отримаєте наступний результат:

Рисунок 8.3. Копіювання тексту в emacs

Копіювання тексту в emacs

Насправді те, що ви нині зробили, називається копіюванням тексту в kill ring. Цей kill ring містить області, скопійовані чи вирізані з моменту запуску Emacs. Будь-яка щойно скопійована чи вирізана область поміщається у початок kill ring. Послідовність Ctrl-Y лише “вставляє” область на початок. Якщо ви хочете отримати доступ до будь-якої іншої області, натисніть Ctrl-Y, потім натискайте Alt-Y доти, доки, поки не отримаєте потрібний текст.

Для пошуку тексту перейдіть в потрібний буфер і натисніть Ctrl-S. Emacs запитає, який рядок необхідно знайти. Для продовження пошуку в поточному буфері цього рядка просто жміть знову Ctrl-S. Коли Emacs досягне кінця буфера і не знайде більше збігів, ви можете натиснути Ctrl-S ще раз, щоб знову розпочати пошук від початку буфера. Натискання на Enter закінчує пошук.

Для пошуку і заміни натисніть Alt-%. Emacs запитає, який рядок треба знайти, на що його замінити, і буде вимагати підтвердження для кожного знайденого збігу.

Для скасування дії натисніть Ctrl-XU чи Ctrl-Shift--, що виконає відкат назад на попередню операцію. Ви можете скасувати стільки операцій, скільки потрібно.

1.5. Вихід з emacs

Комбінація клавіш для цього - Ctrl-XCtrl-C. Якщо ви не зберегли зроблені зміни, Emacs запитає у вас, хочете ви зберегти буфери чи ні.



[19] Emacs було розроблено для роботи на самих різноманітних машинах, деякі з яких оснащені клавіатурами без клавіш зі стрілками. Це ще більш справедливим для Vi.