НОУ ІНТУІТ, Лекція, Текстовий редактор Vi
Переміщення текстом
Команд у командному режимі чимало – майже всі літери та безліч поєднань виду Ctrl+літера. Навіть для переміщення вліво, вниз, вгору та вправо на одну позицію зарезервовані літери hjkl. Це, звичайно, на випадок, якщо клавіші-стрілки у терміналу відсутні або видають казна-що. Клавіші h і l означають відповідно "вліво" та "вправо" (замість них можна використовувати звичні Backspace та пробіл), клавішу j можна розглядати як гачок вниз; тоді k не потребує пояснення. У vi дуже багато командпереміщенняза текстом. Переміщення – це зміна точки редагування, яка найчастіше прив'язана до якогось елемента структури тексту: наступне слово, пропозиція, парна дужка і т.п. властиво помилятися.
Наприклад, переміщення за словами – w (word, перехід початку наступного слова), b (back word, початку попереднього слова) і e (end, наприкінці поточного слова) – варто довірити vi . Словами у разі вважаються ланцюжка букв, цифр і знаків " _ " (схоже визначенняідентифікаторау мові Си). Великі W, B і E вважають словами ланцюжка будь-яких нерозділювачів (схоже визначенняпараметрав shell). Переміщувати курсор можна запропозиціями(команди ")" та "("). Пропозиції закінчуються відповідним розділовим знаком і роздільником після нього. Переміщення поабзацям– команди " > " і " < " (абзаци поділяються порожнім рядком; саме порожнім: рядок, що містить лише пробіли чи табуляції, не підходить).
Пошук шаблону в тексті – також команда переміщення. Задати шаблон і пошукати його можна за допомогою команди "/". Для введення шаблону vi використовуєкомандний рядок, щоб користувачеві було видно, що він набирає. Шаблон – це, звичайно, регулярне вираження, але можна вимкнути налаштування magic ( :set nomagic ), тоді будь-який символ у шаблоні буде вважатися звичайним. Vi шукаєвпередза текстом; якщо шаблон не знайдено, виводиться повідомлення та пошук продовжується зпочаткуфайлу. Пошукназадза текстом задається командою "?". Повторний пошук того самого шаблону в ту ж сторону - команда n (next), а пошук того ж шаблонув іншу сторону- N .
У будь-якому випадку користувач вільний експериментувати зодноюкомандою, як йому заманеться: навіть у самій ортодоксальній версії vi є команда u -undo. Кожен може помилитися: замість 10 набрати 100, замість z - x або неправильно скласти шаблон для пошуку із заміною. Якщо текст, що вийшовзмінений, не подобається – треба повернути його в попередній стан. Скасувати можна лише одне – останнє – дію з текстом. Якщо дотримуватись певної внутрішньої дисципліни і не вчинятинеобдуманихдій, одного рівня має бути достатньо. У vim - сучасній версії vi, що володіємасоюдодаткових можливостей, все-таки вбудували нескінченний undo. На наш погляд, це компроміс між додатковою зручністю та суворою дисципліною.
Гніздові команди
Переміщенням у гніздовій команді може бути не тільки w, а будь-яка команда переміщення. Наприклад, досить зручні команди виду c/шаблон (змінити текст від курсору до знайденого шаблону) або d100G (видалити рядки від поточного до сотого). Між іншим, абревіативність команд vi дозволяєчитатиїхні повні імена: наприклад, попередня команда читається delete 100 Go , а якась c7w - change 7 words.
Дотепна гніздова команда"!". Після команди переміщення вона запитає у командному рядку ім'я утиліти-фільтра (нагадаємо, щофільтру UNIX – це програма, яка читає зі стандартного введення та пише на стандартний висновок). Рядки, що визначаються командою переміщення, vi передасть цій утиліті і результат підставитьзамістьних. Отже, відсортувати всі рядки до кінця файлу простіше простого: достатньо ввести команду !Gsort . Є гніздові команди > і , які зсувають групу рядків на один стандартний крок (vi-налаштування shiftwidth).