103.8 Урок 1
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
103 GNU та команди Unix |
Тема: |
103.8 Основи редагування файлів |
Урок: |
1 з 1 |
Вступ
У більшості дистрибутивів Linux vi
- абревіатура від “visual” - попередньо встановлений і стандартний редактор у середовищі оболонки. Vi — інтерактивний текстовий редактор, він показує вміст файлу на екрані під час його редагування. Таким чином, він дозволяє користувачеві переміщатися та вносити зміни в будь-якому місці документа. Однак, на відміну від візуальних редакторів із графічного робочого столу, редактор vi
є програмною оболонкою з комбінаціями клавіш для кожного завдання редагування.
Альтернатива vi
, яка називається vim
(покращений vi), іноді використовується як сучасна заміна vi
. Серед інших удосконалень vim
пропонує підтримку підсвічування синтаксису, багаторівневого скасування/повторення та редагування кількох документів. Хоча vim
більш винахідливий, він повністю зворотно сумісний з vi
, що робить обидва однаковими для більшості завдань.
Стандартний спосіб запустити vi
- це вказати йому шлях до файлу як параметр. Щоб перейти безпосередньо до певного рядка, його номер має бути позначений знаком плюс, як у vi +9 /etc/fstab
, щоб відкрити /etc/fstab/
і помістити курсор на 9-й рядок. Без числа знак плюс сам по собі розміщує курсор на останньому рядку.
Інтерфейс vi
дуже простий: весь простір, доступний у вікні терміналу, зайнято для представлення файлу, який зазвичай надається як аргумент команди, користувачеві. Єдиними візуальними підказками є рядок нижнього колонтитула, що показує поточне положення курсору, і тильда ~
, що вказує, де закінчується файл. Існують різні режими виконання для vi
, де змінюється поведінка програми. Найпоширенішими є: режим вставки та звичайний режим.
Режим вставки
Режим вставки простий: текст з’являється на екрані під час введення на клавіатурі. Це тип взаємодії, який більшість користувачів очікує від текстового редактора, але це не те, як vi
спочатку представляє документ. Щоб увійти до режиму вставки, користувач повинен виконати команду вставки в звичайному режимі. Клавіша Esc завершує режим вставки та повертається до звичайного режиму, стандартного режиму vi
.
Note
|
Якщо вам цікаво дізнатися більше про інші режими виконання, відкрийте :help vim-modes-intro |
Звичайний режим
Звичайний режим – також відомий як командний режим – це те, як vi
запускається за замовчуванням. У цьому режимі клавіші клавіатури пов’язані з командами для завдань навігації та маніпулювання текстом. Більшість команд у цьому режимі є унікальними клавішами. Деякі клавіші та їх функції в звичайному режимі:
0
,$
-
Перехід до початку і кінця рядка.
1G
,G
-
Перехід до початку та кінця документа.
(
,)
-
Перехід до початку та кінця речення.
{
,}
-
Перехід до початку і кінця абзацу.
w
,W
-
Перехід до слова і перехід до слова, включаючи розділові знаки.
h
,j
,k
,l
-
Вліво, вниз, вгору, вправо.
e
orE
-
Перехід до кінця поточного слова.
/
,?
-
Пошук вперед і назад.
i
,I
-
Вхід до режиму вставки перед поточною позицією курсору та на початку поточного рядка.
a
,A
-
Вхід до режиму вставки після поточної позиції курсору та в кінці поточного рядка.
o
,O
-
Додавання нового рядку і вхід до режиму вставки в наступному або в попередньому рядку.
s
,S
-
Видалення символу під курсором або всього рядку і перехід до режиму вставки.
c
-
Зміна символу(ів) під курсором.
r
-
Заміна символу під курсором.
x
-
Видалення виділених символів або символу під курсором.
v
,V
-
Початок нового виділення з поточного символу або всього рядка.
y
,yy
-
Копіювання (витягування) символу(ів) або всьго рядку.
p
,P
-
Вставка скопійованого вмісту після або перед поточною позицією.
u
-
Скасування останньої дії.
Ctrl-R
-
Повторення останньої дії.
ZZ
-
Закривання та збереження.
ZQ
-
Закривання без збереження.
Якщо попереду стоїть цифра, команда буде виконана стільки ж разів. Наприклад, натисніть 3yy
, щоб скопіювати поточний рядок плюс два наступних, натисніть d5w
, щоб видалити поточне слово та наступні 4 слова, і так далі.
Більшість завдань редагування є комбінаціями кількох команд. Наприклад, послідовність клавіш vey
використовується для копіювання виділення, починаючи з поточної позиції до кінця поточного слова. Повторення команд також можна використовувати в комбінаціях, тому v3ey
копіює виділення, починаючи з поточної позиції, до кінця третього слова звідти.
vi
може організувати скопійований текст у регістрах, дозволяючи одночасно зберігати різний вміст. Регістр визначається символом, перед яким стоїть "
, і після створення він зберігається до кінця поточного сеансу. Послідовність клавіш "ly
створює регістр, що містить поточний вибір, який буде доступний за допомогою ключа l
. Потім регістр l
може бути вставлений "lp
.
Існує також спосіб встановити користувацькі позначки у довільних позиціях уздовж тексту, що полегшує швидкий перехід між ними. Позначки створюються натисканням клавіші m
, а потім клавіші для адресації поточної позиції. Після цього курсор повернеться у позначене положення, коли буде натиснуто '
, а потім вибрана клавіша.
Будь-яку послідовність клавіш можна записати як макрос для майбутнього виконання. Макрос можна записати, наприклад, щоб помістити виділений текст у подвійні лапки. Спочатку вибирається рядок тексту і натискається клавіша q
, а потім відповідна клавіша, щоб зв’язати макрос, наприклад, d
. У рядку нижнього колонтитула з’явиться рядок recording @d
, що вказує на те, що запис увімкнено. Передбачається, що деякий текст уже виділено, тому першою командою є x
, щоб видалити (і автоматично скопіювати) виділений текст. Натискається клавіша i
, щоб вставити дві подвійні лапки в поточну позицію, потім Esc
повертається до нормального режиму. Останньою командою є P
, щоб повторно вставити видалений вибір безпосередньо перед останньою подвійною лапкою. Повторне натискання q
завершить запис. Тепер макрос, що складається з послідовності клавіш x
, i
, ""
, Esc
і P
, виконуватиметься щоразу, коли клавіші @d
натискатимуться у звичайному режимі, де d
ключ регістру, пов’язаний з макросом.
Однак макрос буде доступним лише під час поточного сеансу. Щоб зробити макроси постійними, їх слід зберегти у файлі конфігурації. Оскільки більшість сучасних дистрибутивів використовує vim як сумісний з vi редактор, файл конфігурації користувача — ~/.vimrc
. Усередині ~/.vimrc
рядок let @d = 'xi""^[P'
встановить у регістрі d
послідовність ключів у одинарних лапках. Той самий регістр, який раніше був призначений для макросу, можна використовувати для вставки його послідовності ключів.
Команди з двокрапкою
Звичайний режим також підтримує інший набір команд vi
: команди з двокрапкою. Команди з двокрапкою, як зрозуміло з назви, виконуються після натискання клавіші двокрапки : у звичайному режимі. Команди з двокрапкою дозволяють користувачеві виконувати пошук, зберігати, виходити, запускати команди оболонки, змінювати налаштування vi
тощо. Щоб повернутися до звичайного режиму, потрібно виконати команду :visual
або натиснути клавішу Enter без будь-якої команди. Деякі з найбільш поширених команд з двокрапкою вказані тут (перший символ не є частиною команди):
:s/REGEX/TEXT/g
-
Замінює всі входження регулярного виразу
REGEX
наTEXT
у поточному рядку. Він приймає той самий синтаксис командиsed
, включаючи адреси. :!
-
Виконує наступну команду оболонки.
:quit
or:q
-
Вийти з програми.
:quit!
or:q!
-
Вийти з програми без збереження.
:wq
-
Зберегти і вийти.
:exit
or:x
or:e
-
Зберегти та вийти, якщо потрібно.
:visual
-
Повернутися до режиму навігації.
Стандартна програма vi
здатна виконувати більшість завдань редагування тексту, але також будь-який інший неграфічний редактор можна використовувати для редагування текстових файлів у середовищі оболонки.
Tip
|
У користувачів-початківців можуть виникнути труднощі із запам’ятовуванням всіх командних клавіш |
Альтернативні редактори
Користувачі, які не знайомі з vi
, можуть мати труднощі з адаптацією до нього, оскільки його робота не є інтуїтивно зрозумілою. Простішою альтернативою є GNU nano
, невеликий текстовий редактор, який пропонує всі основні функції редагування тексту, такі як скасування/повторення, виділення синтаксису, інтерактивний пошук і заміна, автоматичний відступ, номери рядків, завершення слів, блокування файлів, резервне копіювання файлів та підтримка інтернаціоналізації. На відміну від vi
, усі натискання клавіш просто вставляються в документ, який редагується. Команди в nano
надаються за допомогою клавіші Ctrl або клавіші Meta (залежно від системи, Meta – Alt або ⌘).
Ctrl-6
абоMeta-A
-
Починає новий вибір. Також можна створити виділення, натиснувши Shift і перемістивши курсор.
Meta-6
-
Копіює поточне виділення.
Ctrl-K
-
Вирізає поточне виділення.
Ctrl-U
-
Вставляє скопійований вміст.
Meta-U
-
Відміняє дію.
Meta-E
-
Повторює дію.
Ctrl-\
-
Замінює текст у виділенні.
Ctrl-T
-
Починає сеанс перевірки орфографії для документа або поточного вибору.
Emacs — ще один дуже популярний текстовий редактор для середовища оболонки. Хоча текст вставляється просто шляхом його введення, як у nano
, навігація по документу здійснюється за допомогою команд клавіатури, як у vi
. Emacs містить багато функцій, завдяки яким він став більше, ніж просто текстовий редактор. Це також інтегроване середовище розробки (IDE, Integrated Development Environment), здатне компілювати, запускати та тестувати програми. Emacs можна налаштувати як клієнт електронної пошти, новин або RSS, що робить його потужним функціональним набором.
Сама оболонка запускатиме текстовий редактор за замовчуванням, зазвичай vi
, щоразу, коли це необхідно. Наприклад, коли для редагування cronjobs виконується crontab -e
. Bash використовує змінні сеансу VISUAL
або EDITOR
, щоб знайти текстовий редактор за замовчуванням для середовища оболонки. Наприклад, команда export EDITOR=nano
визначає nano
як текстовий редактор за замовчуванням у поточному сеансі оболонки. Щоб зробити цю зміну постійною в сеансах, команду слід включити до ~/.bash_profile
.
Вправи до посібника
-
vi
найчастіше використовується як редактор файлів конфігурації та вихідного коду, де відступи допомагають ідентифікувати частини тексту. Виділення можна зробити з відступом вліво, натиснувши<
, і вправо, натиснувши>
. Які клавіші потрібно натиснути в звичайному режимі, щоб зробити відступ поточного виділення на три кроки ліворуч? -
Можна вибрати весь рядок, натиснувши
V
у звичайному режиміvi
. Однак символ закінчення нового рядка також включається. Які клавіші слід натискати в звичайному режимі, щоб вибрати від початкового символу до символу нового рядка, не включаючи його? -
Як потрібно виконати
vi
у командному рядку, щоб відкрити~/.bash_profile
і перейти безпосередньо до останнього рядка? -
Які клавіші слід натиснути в звичайному режимі
vi
, щоб видалити символи з поточної позиції курсору до наступного символу крапки?
Дослідницькі вправи
-
vim
дозволяє виділяти блоки тексту довільної ширини, а не лише розділи з цілими рядками. Натиснувши Ctrl+V у звичайному режимі, виділення здійснюється шляхом переміщення курсору вгору, вниз, вліво та вправо. Використовуючи цей метод, як можна було б видалити блок, що починається з першого символу поточного рядка та містить наступні вісім стовпців і п’ять рядків тексту? -
Сеанс
vi
був перерваний через несподіваний збій живлення. Під час повторного відкриття файлуvi
запитує користувача, чи хоче він відновити файл підкачки (автоматична копія, зробленаvi
). Що повинен зробити користувач, щоб відмовитися від цього? -
У сесії
vim
рядок був попередньо скопійований до регіструl
. Яка комбінація клавіш запише макрос в регістрa
, щоб вставити рядок у регістрl
безпосередньо перед поточним рядком?
Підсумки
Цей урок охоплює стандартний текстовий редактор для середовища оболонки Linux: редактор vi
. Незважаючи на те, що vi
лякає необізнаного користувача, він має функції, які роблять його хорошим вибором для технічного та нетехнічного редагування тексту. В уроці розглядаються наступні теми:
-
Основне використання та корисні функції
vi
. -
Що таке
vim
, покращенийvi
, та інші альтернативні редактори. -
Як визначити текстовий редактор за замовчуванням для середовища оболонки.
Розглянуті команди та процедури:
-
Редактор
vi
та його покращена версіяvim
. -
Основне редагування тексту у
vi
. -
Альтернативні редактори
emacs
таnano
.
Відповіді на вправи до посібника
-
vi
найчастіше використовується як редактор файлів конфігурації та вихідного коду, де відступи допомагають ідентифікувати частини тексту. Виділення можна зробити з відступом вліво, натиснувши<
, і вправо, натиснувши>
. Які клавіші потрібно натиснути в звичайному режимі, щоб зробити відступ поточного виділення на три кроки ліворуч?Клавіші
3<
, тобто три кроки ліворуч. -
Можна вибрати весь рядок, натиснувши
V
у звичайному режиміvi
. Однак символ закінчення нового рядка також включається. Які клавіші слід натискати в звичайному режимі, щоб вибрати від початкового символу до символу нового рядка, не включаючи його?Клавіші
0v$h
, що означає0
(«перейти до початку рядка»),v
(«початок вибору символа»),$
(«перейти до кінця рядка») іh
(«повернутися на одну позицію назад»). -
Як потрібно виконати
vi
у командному рядку, щоб відкрити~/.bash_profile
і перейти безпосередньо до останнього рядка?Команда
vi + ~/.bash_profile
відкриє файл і помістить курсор на останній рядок. -
Які клавіші слід натиснути в звичайному режимі
vi
, щоб видалити символи з поточної позиції курсору до наступного символу крапки?Ключі
dt.
, що означаютьd
(«почати видалення»),t
(«перехід до наступного символу»)) та.
(«символ крапки»).
Відповіді до дослідницьких вправ
-
vim
дозволяє виділяти блоки тексту довільної ширини, а не лише розділи з цілими рядками. Натиснувши Ctrl+V у звичайному режимі, виділення здійснюється шляхом переміщення курсору вгору, вниз, вліво та вправо. Використовуючи цей метод, як можна було б видалити блок, що починається з першого символу поточного рядка та містить наступні вісім стовпців і п’ять рядків тексту?Комбінація
0
,Ctrl-V
і8l5jd
виділить та видалить відповідний блок. -
Сеанс
vi
був перерваний через несподіваний збій живлення. Під час повторного відкриття файлуvi
запитує користувача, чи хоче він відновити файл підкачки (автоматична копія, зробленаvi
). Що повинен зробити користувач, щоб відкинути файл підкачки?Натисніть
d
, коли з’явиться запитvi
. -
У сесії
vim
рядок був попередньо скопійований до регіструl
. Яка комбінація клавіш запише макрос в регістрa
, щоб вставити рядок у регістрl
безпосередньо перед поточним рядком?Комбінація
qa"lPq
, що означаєq
(«почати запис макросу»),a
(«призначити регістрa
для макросу»),"l
(«вибрати текст у регістріl
»),P
(«вставити перед поточним рядком») іq
(«завершити запис макросу»).