Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ОС.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
919 Кб
Скачать
☆

Лабораторна робота № 9

Тема: Обробка даних. Редактор vi.

Мета: Ознайомитись з редактором vi.

Завдання:

  1. Створити файл за допомогою редактора vi.

  2. Виконати дії по позиціювання курсору.

  3. Виконати дії по редагуванню тексту.

  4. Виконати дії по вставці тексту у файл.

  5. Виконати дії по видаленню тексту з файлу.

  6. Виконати дії по пошуку заданих символів у файлі.

  7. Виконати дії по заміні заданих символів у файлі

  8. Виконати дії по копіюванню тексту.

Обладнання та матеріали: Операційна система LINUX, ПК, редактор vi, методичні вказівки до лабораторних робіт.

Хід роботи:

  1. Ознайомитись з теоретичними відомостями.

  2. Запустити редактор vi.

  3. Створити файл.

  4. Виконати позиціонування курсору.

  5. Виконати редагуванню тексту.

  6. Провести пошук та заміна символів у тексті файлу.

  7. Здійснити копіювання.

  8. Оформити та захистити звіт лабораторної роботи.

Теоретичні відомості

Текстовий редактор — один з найважливіших інструментів, які пропонує операційна система Linux (як, в єстві, і будь-хто інша). За допомогою редактора можна створювати і змінювати текстові файли, що широко використовуються як:

  • Файли користувача, такі як .login і .cshrc

  • Системні файли

  • Програми командного інтерпретатора

  • Документи

  • Поштові повідомлення

Одними з найпопулярніших редакторів для системи Linux є vi. Він повноекранні; простіше кажучи, в ньому використовується кожний рядок і стовпець екрану терміналу для відображення текстового вмісту файлу. Має багатий набір команд.

Читання і запис файлів

Оскільки створювані текстові файли необхідно зберігати для подальшого використовування, редактор може записувати текст в зовнішній файл. У будь-який момент, коли потрібно внести зміни у файл, редактор може рахувати файл з диска. Чудово, що текстові редактори розроблені так, щоб обробляти файли в ASCII-форматі, так що редактор (наприклад, emacs) може прочитати будь-який файл, записаний іншим редактором (наприклад, vi), і навпаки.

Пошук тексту

Самостійний перегляд рядка за рядком у пошуках окремого слова — непоганий спосіб потренувати здатність концентруватися або різновид самобичування. От чому текстові редактори пропонують різні можливості пошуку. Сюди входить як використовування регулярних виразів (шаблонів), так і фіксованих рядків. Регулярні вирази включають метасимволи (такі як . ? і *), які замінюють невідомі фрагменти тексту.

Копіювання і переміщення тексту

Оскільки не існує ніякої гарантії, що текст після первинного набору залишиться в тому ж вигляді, редактори надають засоби копіювання, вирізування і переміщення (або вставки) блоків тексту. Ці блоки можуть мати розмір від декількох сторінок до одного символу. Відмінність між копіюванням і вирізуванням тексту полягає в тому, що при вирізуванні вибраний блок тексту віддаляється після копіювання в буфер, тоді як при копіюванні цього не відбувається.

Запуск vi

vi викликається з командного рядка набором vi

Екран очищається, і в найлівішому стовпці з'являється стовпець тильд (~). Відбувається редагування порожнього файлу без імені. Текст, який вноситься в цей файл, знаходиться в буфері до тих пір, поки вміст буфера не буде записаний в деякий пойменований файл. Тильда — це спосіб, яким vi повідомляє, що рядок, де знаходиться тильда, не містить тексту.

vi також може бути запущений з вказівкою файлу або списку файлів для редагування:

vi filenamel filename2 filename3 . . .

Звичайно в сеансі роботи з vi редагується один файл. При редагуванні списку файлів vi редагує їх поодинці в тому порядку, в якому вони вказані в командному рядку. Крім того, vi може бути запущений з командного рядка як

vi +n filename

де n представляє номер рядка, в який vi помістить курсор при редагуванні filename. Це зручно для програмістів, що відладжують великі файли початкового коду, коли вимагається швидко перейти до відомого рядка, що містить помилку.

Для ілюстрації роботи редактора vi розглянемо наступний приклад. Введіть

vi asong

в командному рядку і подивитеся, що відбудеться.

Режими vi

В нижній лівій частині екрану можна побачити

"asong" 0 lines, 0 characters

Повідомлення, що з'являються в цьому статусному рядку, описують, що робить vi в даний момент або що тільки що було зроблене. В даному випадку vi повідомляє про те, що він відкрив порожній буфер, вміст якого зберігається (при збереженні) у файлі asong.

В даний момент працює командний режим vi — основна концептуальна особливість при роботі з цим редактором. При редагуванні тексту слід пям'ятати, в якому режимі ви працюєте — в командному або текстовому. В командному режимі будь-яка послідовність символів, що вводиться, інтерпретується як команди vi. В текстовому режимі будь-який символ, що вводиться, поміщається в буфер і відображається на екрані як текст.

Вставка тексту

Існують дві команди для введення тексту в поточному рядку: букви i і а. Ці букви в нижньому регістрі вставляють (i) текст зліва від курсора або додають (а) текст праворуч від курсора. Як і для багатьох інших команд vi, версії цих букв у верхньому регістрі справляють те ж враження, але з невеликими відмінностями: прописні I і А вставляють і додають текст в початок і кінець поточного рядка, відповідно, незалежно від положення курсора.

Після введення будь-якій з цих букв включається режим введення. Будь-який текст, введений в цьому режимі, відображається на екрані.

Для виходу з режиму введення виходить натискувати Esc. Зверніть увагу, що буква i не відобразилася на екрані перед введенням тексту, а це означає, що i була правильно інтерпретована як команда. Крім того, важливо пам'ятати, що не потрібно натискувати Enter після натиснення i, щоб перейти в режим введення.

Вихід з vi

Тепер, коли є деякий текст для файлу, давайте вийдемо з редактора, щоб оцінити результати. Команди, що застосовуються для збереження файлу і виходу з vi, дещо відрізняються від команд i і а, що використовуються при редагуванні тексту, — цим командам необхідно передувати двокрапкою (:).

В даному випадку необхідно виконати збереження і вихід, що насправді проводиться однією командою. Введіть : і в нижній лівій частині екрану з'явиться двокрапка, vi зрозумів, що зараз послідує команда ех, і відобразить символи команди, що залишилися, після двокрапки. Введіть wq і натискуйте Return, vi негайно повідомить, що він записав файл на диск і покаже, скільки рядків містить файл, vi закінчує роботу, і на екрані знову з'являється запрошення командного інтерпретатора. Ще один спосіб зберегти зміни і вийти — ввести ZZ. Різниця між цим методом і використовуванням wq полягає в тому, що при використовуванні ZZ файл пишеться на диск лише в тому випадку, якщо він був змінений після останнього збереження.

Якщо ніяких змін з відкритим файлом не відбулося, вийти з vi можна простим введенням :q. Такий спосіб не спрацює, якщо файл був змінений. Якщо не потрібно зберігати роботу, введіть :q!. Ця команда вимушує vi закінчити роботу незалежно від внесених змін.

Щоб переконатися, що vi зберіг файл asong правильно, використовуйте команду cat для швидкого перегляду вмісту файлу:

% cat asong

Переміщення курсора

Переміщення курсора в vi проводиться наступними чотирма клавішами: h Переміщає курсор на одну позицію вліво

j Переміщає курсор вниз на один рядок

k Переміщає курсор вгору на один рядок

i Перемішає курсор на одну позицію управо

Ці клавіші спрацьовують лише у тому випадку, коли vi знаходиться в командному режимі. Для зручності в більшості версій vi ці клавіші співвіднесені з відповідними їм клавішами із стрілками.

Крім того, vi дозволяє пересуватися по файлу великими "стрибками". Нижче приведені деякі команди для прокрутки більше одного рядка за раз:

Ctrl+u Прокручує пол-экрана вгору

Ctrl+d Прокручує пол-экрана вниз

Ctrl+f Прокручує вниз один повний екран

Ctrl+b Прокручує вгору один повний екран

Розмір цих пересувань істотно залежить від установок терміналу.

Можна також пересунути курсор на певний рядок у файлі. Якщо потрібно перейти на п'ятий рядок, наберіть 5G або :5 в командному режимі. G сама по собі пересуває курсор в кінець файлу. Курсор не рухається, якщо вказане число непридатний (наприклад, введення :10 у восьмирядковому файлі не справляє ніякого враження).

vi також дозволяє перемістити курсор на одне слово за один раз. Слово визначається як будь-яка послідовність символів, що не містить пропуску. Щоб перейти до початку наступного слова в поточному рядку, натискуйте w. Натискуйте Ь, щоб перемістити курсор до початку поточного або попереднього слова.

Видалення тексту

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

Для видалення слова використовується команда dw. Якщо необхідно видалити слово праворуч від курсора, введіть dw. Можна також видалити декілька слів за раз. Наприклад, команда 4dw видаляє наступні чотири слова в поточному рядку.

Можна видаляти рядки по одній або задати діапазон рядків, що видаляються. Для видалення поточного рядка введіть dd. Команда 4dd видаляє чотири рядки (поточний рядок і ще три під нею). dG видаляє всі рядки до кінця файлу, починаючи з поточною.

В поточному рядку можна видаляти в будь-якому напрямі: d^ видаляє назад до початку рядка; d$ (або D) видаляє вперед до кінця рядка.

Щоб видалити окремі символи, використовуються команди х — для видалення символу над курсором і X — для видалення символу зліва від курсора. Обидві ці команди можуть застосовуватися з цифровим модифікатором: наприклад, 4х видаляє поточний символ і ще три символи справа.

Небажані зміни, такі як видалення, можуть бути негайно виправлений командою і. Ця команда "відкатує" останнє зроблене редагування.

Копіювання і переміщення тексту

Для переміщення частин тексту по файлу в загальному випадку потрібне виконання трьох кроків.

  • "Скидання" тексту в буфер.

  • Переміщення курсора в те місце, куди потрібно вставити текст.

  • Вставка тексту з буфера в потрібне місце.

Скидання тексту означає копіювання його або в пойменований, або в безіменний буфер. Безіменний буфер — це тимчасове місце для зберігання інформації в пам'яті, яке постійно перезаписується подальшими скиданнями, vi має 26 пойменованих буферів, відповідних кожній букві (англійського) алфавіту.

Для скидання поточного рядка в безіменний буфер застосовуються команди уу або У. Ці команди можуть бути модифікований цифрою, вказуючою, скільки рядків нижче за курсор повинні бути скинено

Подвійні лапки (") указують команді скидання переписати вміст пойменованого буфера а. При введенні замість рядкової прописної букви А в кінець буфера додаються три рядки. Концепція переписати або приєднати працює для всіх пойменованих буферів однаково.

Пересунувши курсор в кінець файлу командою :$, можна вставити вміст безіменного буфера в кінець файлу. Це робиться за допомогою команди р, яка вставляє вміст буфера праворуч від курсора (Р проводить вставку зліва від курсора). Команда вставки може також звертатися до пойменованого буфера тим же способом, що і команда скидання:

Скидання також може виконуватися по словах за допомогою команди yw. Ця команда також може використовувати пойменовані буфера і виконуватися з цифровими модифікаторами.

Пошук і заміна тексту

Пошук тексту в vi може проводитися вперед або назад. Пошук завжди починається з поточної позиції курсора і продовжується в початок або в кінець файлу, залежно від того, який напрям використовується. Іншими словами, пошук "прокручує" файл.

Для ілюстрації можливостей пошуку можна використовувати файл asong. Для пошуку у файлі asong слова "bay" введіть

/bay

і натискуйте Return. Зверніть увагу, що це — команда статусного рядка. Команда /bay відображається в статусному рядку, а курсор переміщається на перше входження рядка "bay" в прямому напрямі. Хочте знайти ще одне входження? Введіть символ /. Ця команда продовжує пошук "bay" в прямому напрямі і поміщає курсор на наступному збігу. Кожного разу при натисненні клавіші / vi намагається знайти збіг із заданим рядком символів. Досягши кінця файлу vi повертається назад і продовжує пошук з початку файлу.

Можна також проводити пошук у зворотному напрямі за допомогою команди ?. Вона працює за тим же принципом, що і команда /, але в протилежному напрямі.

Можна продовжити пошук командою n, яка завжди продовжує пошук в тому ж напрямі, що і попередній. Команда N проводить пошук того ж рядка символів, але у зворотному напрямі.

Команда пошуку застосовується описаним вище способом (/ або ?), але додаються квадратні дужки, щоб вказати vi, що проводиться пошук регулярних виразів з використанням укладених в дужки символів. Наприклад, пошук вперед з першого рядка файлу asong всіх рядків, що містять підрядок "еr", здійснюється командою:

/[*]еr[*]

Перший збіг vi знаходить в слові "Where". Якщо ввести n, vi переміщає курсор на слово "watermelon", і т.д. Можна також вказати набори символів або діапазони для збігу символів. Спробуйте ввести наступне:

/[а-z]у

Ця команда у файлі asong знаходить рядки "bу" і "mу", а також будь-яке слово, що містить ці символи (наприклад, "bay"). Такий пошук працює, тому що заданий діапазон символів розглядається як пронумерований діапазон значень ASCII. Таким чином, можна також включити діапазон цифр (наприклад, 0-9). Тепер спробуйте наступну команду:

/[Мm]y

Ця команда знаходить рядки "My" і "mу".

Одним з самих загальних застосувань пошуку є заміна одного слова (або рядки символів) іншим. Це виконується командою ех, що передує двокрапкою. Щоб проглянути весь файл asong, знайти в ньому рядки "Down" і замінити їх рядками "Up", введіть

:%s/Down/Up/g

; Символ s указує на операцію пошуку % означає проглядання всього файлу, "Down" — рядок, який потрібно знайти, "Up" — новий рядок, а g указує vi, що пошук повинен продовжуватися до тих пір, поки не залишиться інших збігів із зразком. Без g vi проведе заміну тільки першого збігу, який він знайде. Ця команда також працює з шаблонами для рядка, який потрібно знайти, і рядки заміни.

Команди позиціонування курсору

Команда

Дія команди

Позиціонування на символ

h

Переміщає курсор на один символ вліво

l

Переміщає курсор на один символ вправо

BACKSPACE

Переміщає курсор на один символ вліво

SPACEBAR

Переміщає курсор на один символ управо

fx

Здійснює пошук вказаного символу x праворуч від поточної позиції курсору

Fx

Здійснює пошук вказаного символу x зліва від поточної позиції курсору

tx

Здійснює переміщення курсору управо на символ до вказаного символу x

Tx

Здійснює переміщення курсору вліво на символ до вказаного символу x

;

Повторює попередній пошук символу. Команда ; запам'ятовує символ і шукає наступну появу символу в поточному рядку

,

Повторює попередній пошук символу, але у зворотному напрямі

j

Переміщає курсор вниз на один рядок

k

Переміщає курсор вгору на один рядок

-

Переміщає курсор на один рядок вгору, позиціонуючи його на першому ненульовому символі

+

Переміщає курсор вниз на один рядок і позиціонує на перший непорожній символ

<CR>

Переміщає курсор вниз на один рядок і позиціонує на перший непорожній символ

Позиціонування на рядок

$

Перемістити курсор на останній символ в рядку

0(нуль)

Перемістити курсор на перший символ в рядку

^

Перемістити курсор на перший ненульовий символ в рядку

Позиціонування на слово

w

Переміщає курсор до початку наступного слова

W

Ігнорує всі знаки пунктуації і переміщає курсор на наступне після пропуску слово

e

Переміщає курсор на останній символ в наступному слові

E

Переміщає курсор на останній символ в слові. Ігнорує всі символи пунктуації за винятком пропуску

b

Переміщає курсор до першого символу попереднього слова

B

Використовується подібно команді b, за винятком того, що слова розділяються тільки символами пропуск і новий рядок

Позиціонування на пропозицію

(

Переміщає курсор в початок поточної пропозиції

)

Переміщає курсор в початок наступної пропозиції

Позиціонування на параграф

{

Перемістити курсор в початок поточного параграфа, який обмежується порожнім рядком

}

Перемістити курсор в початок наступного параграфа

Позиціонування у вікні

H

Перемістити курсор до першого рядка екрану

M

Перемістити курсор до середнього рядка екрану

L

Перемістити курсор до останнього рядка екрану

Команди створення тексту

Команда

Функція

a

Створити текст після курсору

A

Створити текст в кінці поточного рядка

i

Створити текст перед курсором

I

Створити текст перед першим ненульовим символом в поточному рядку

o

Створити текст з початку нового рядка, розташованого під поточним рядком

O

Створити текст з початку нового рядка, розташованого над поточним рядком

<ESC>

Повернути vi в командний режим з режиму введення тексту

Команди видалення тексту

Команда

Функція

Режим введення

BACKSPACE

Видалити поточний символ

1w

Видалити поточне слово

@

Видалити поточний рядок нового тексту або видалити весь новий текст в поточному рядку; командний режим

u

Відмінити останню команду

U

Відновити поточний рядок в колишньому стані

x

Видалити поточний символ

ndx

Видалити n-ый об'єкт тексту x

dw

Видалити слово над курсором і наступний за ним пропуск, або знак пунктуації

dW

Видалити слово і пунктуацію над курсором з подальшим за ним пропуском

dd

Видалити поточний рядок

D

Видалити частину рядка праворуч від курсору

d)

Видалити поточну пропозицію від поточної позиції курсору до кінця

d}

Видалити поточний параграф від поточної позиції до кінця

Команди зміни тексту

Команда

Функція

r

Замінити поточний символ

R

Замінити ті символи, які введені в режимі ESCAPE

s

Видалити символ, під яким розташований курсор і додати текст. Для закінчення режиму введення натискуйте клавішу ESCAPE

S

Замінити всі символи в рядку

cc

Замінити всі символи в рядку

ncx

Замінити n об'єктів тексту типу x (пропозиція, параграф)

cw

Замінити слово або символи, що залишилися, в слові на новий текст

C

Замінити символи, що залишилися, в рядку від курсору до кінця рядка

Команди витягання та приєднання тексту

Команда

Функція

p

Поміщає вміст тимчасового буфера, отриманий за допомогою команди у і команд видалення, в текст після курсору

yy

Створює копію рядка тексту і поміщає в тимчасовий буфер

nyx

Створює копію n-го об'єкту тексту типу x і поміщає її в тимчасовий буфер

"xyn

Поміщає копію об'єкту тексту типу n у в регістр з ім'ям x

"xp

Поміщає вміст регістра x після курсору

Команди порядкового редактору

Команда

Функція

:

Означає, що наступна за нею команда є командою відрядкового редактора

:sh<CR>

Тимчасове повернення до shell для виконання команд shell

^d

Повернення з тимчасового shell в поточне вікно vi для продовження редагування

:n<CR>

Перехід до n-ой рядка буфера

:x,yw data<CR>

Записати рядки від номера x до номера у в новий файл data

:$<CR>

Перехід до останнього рядка буфера

:.,$d<CR>

Видалити всі рядки в буфері, починаючи з поточною і до послед- їй рядки

:r shell.file<CR>

Вставити вміст shell.file після поточного рядка в буфері

:s/text/new_words/<CR>

Замінити першу появу символів text в поточному рядку на new_words

:s/text/new_words/g<CR>

Замінити кожну появу символів text в поточному рядку на new_words

:g/text/s//new_words/g<CR>

Замінити кожну появу символів text у файлі на new_words

Команди завершення

Команда

Функція

ZZ

Записати буфер у файл, якщо після останнього запису в буфері були зроблені зміни, і завершити роботу з vi

:wq<CR>

Записати буфер у файл і завершити роботу з vi

:w filename<CR>

Записати буфер в новий файл filename

:q<CR>

і завершити роботу з vi

:w! filename<CR>

Перезаписати вміст буфера у вужі

:q<CR>

існуючий файл filename і завершити роботу з vi

:q!<CR>

Завершити роботу з vi без запису буфера у файл, навіть якщо вміст буфера змінювався

:q<CR>

Завершити роботу з vi без запису буфера у файл, якщо буфер не змінювався

Контрольні питання:

  1. Що таке редактор vi?

  2. Яке основне призначення редактора?

  3. Які існують команди завершення?

  4. Як здійснюється пошук?

  5. Як здійснюється переміщення курсору?

  6. Як здійснюється видалення тексту?

  7. Як здійснюється запуск редактора?

  8. Як здійснюється вихід з редактора?

Література:

  1. Паркер Тим. Linux 5.2. Энциклопедия пользователя: Пер. с англ./Тим Паркер – К.: Издательство «ДиаСофт», 1999. – 688 с., стор. 202-209.