Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть V. Текстовый редактор vi
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 20 декабря 2014 г.
Глава 20. Начальные сведения о текстовом редакторе vi
Текстовый редактор vi
установлен практически в каждой системе Unix. При установке дистрибутивов Linux очень часто устанавливается текстовый редактор vim
(улучшенная версия vi - vi improved
), который является аналогичным. Каждый системный администратор должен обладать знаниями относительно работы с текстовым редактором vi(m)
, так как данный редактор является простым инструментом, позволяющим решить возникающие проблемы.
Текстовый редактор vi
не является интуитивным, но после того, как вы научитесь с ним работать, он станет еще одним очень мощным инструментом из вашего арсенала. В состав большинства дистрибутивов также включено приложение vimutator
, которое представляет собой 45-минутный урок по использованию редактора vi(m)
.
Режимы ввода команд и ввода текста
Текстовый редактор vi начинает работу в режиме ввода команд
. При работе в этом режиме вам предоставляется возможность выполнения поддерживаемых редактором команд. Некоторые из команд позволят вам перейти в режим ввода текста
. При работе в этом режиме вы можете редактировать текстовые документы. Клавиша Escape
вернет вас в режим ввода команд.
Таблица 20.1. Переход в режим ввода команд
Клавиша | Действие |
---|---|
Esc | Перевод редактора vi(m) в режим ввода команд. |
Начало редактирования текста (a A i l o O)
Различие между командами A i l o и O заключается в начальной позиции ввода текста. Команда a позволяет продолжить ввода текста после текущего символа, а команда A - после окончания текущей строки. Команда i позволяет начать ввод текста перед текущим символом, а команда I - в начале текущей строки. Команда o позволяет создать новую строку после текущей строки, а команда O - перед текущей строкой.
Таблица 20.2. Переход в режим ввода текста
Команда | Действие |
---|---|
a | Начало ввода текста после текущего символа |
A | Начало ввода текста в конце текущей строки |
i | Начало ввода текста перед текущим символом |
I | Начало ввода текста в начале текущей строки |
o | Начало ввода текста в новой строке, созданной после текущей строки |
O | Начало ввода текста в новой строке, созданной перед текущей строкой |
Замена и удаление символа (r x X)
При работе в режиме ввода команд (в том случае, если вы нажмете клавишу Escape несколько раз, не произойдет ничего страшного) вы можете использовать клавишу x для удаления текущего символа. Символ X в верхнем регистре (или сочетание клавиш Shift+x) позволяет удалить символ слева от курсора. Также при работе в режиме ввода команд вы можете использовать клавишу r для замены одного единственного символа. В случае использования клавиши r вы будете перемещены в режим ввода текста для осуществления одного нажатия на клавишу, после чего вы будете немедленно перемещены в режим ввода команд.
Таблица 20.3. Замена и удаление символа
Команда | Действие |
---|---|
x | Удаление символа, выделенного с помощью курсора |
X | Удаление символа перед курсором |
r | Замена символа, выделенного с помощью курсора |
p | Вставка символа после курсора (в данном случае будет осуществляться вставка последнего удаленного символа) |
xp | Замена местами двух символов |
Отмена и повторение действий (u .)
При работе в режиме ввода команд вы можете отменять ошибочные действия с помощью команды u. Также вы можете повторять эти ошибочные действия с помощью команды . (другими словами, с помощью команды . будет осуществляться повторное выполнение вашей последней команды).
Таблица 20.4. Отмена и повторение действий
Команда | Действие |
---|---|
u | Отменить последнее действие |
. | Повторить последнее действие |
Перенос, копирование и вставка строки (dd yy pP)
При работе в режиме ввода команд с помощью команды dd может осуществляться перенос текущей строки. Команда yy позволяет копировать текущую строку. В результате вы сможете осуществить вставку последней скопированной или перенесенной строки после (p) или до (P) текущей строки.
Таблица 20.5. Перенос, копирование и вставка строки
Команда | Действие |
---|---|
dd | Перенос текущей строки |
yy | Копирование текущей строки (yank yank) |
p | Вставка строки после текущей строки |
P | Вставка строки до текущей строки |
Перенос, копирование и вставка строк (3dd 2yy)
При работе в режиме ввода команд перед вводом команд dd или yy вы можете ввести число, соответствующее необходимому количеству повторений команды. Таким образом, с помощью команды 5dd могут быть перемещены 5 строк, а с помощью команды 4yy могут быть скопированы 4 строки. При этом исполнение последней команды будет сопровождаться уведомлением от vi в нижнем левом углу с текстом "4 line yanked".
Таблица 20.6. Перемещение, копирование и вставка строк
Команда | Действие |
---|---|
3dd | Перемещение трех строк |
4yy | Копирование четырех строк |
Переход в начало и конец строки (0 или ^ и $)
При работе в режиме ввода команд команда 0 или ^ переместит ваш курсор в начало текущей строки, а команда $ - в конец текущей строки. Вы можете добавлять символы 0 и $ к команде d, в результате чего команда d0 позволит удалить все символы, находящиеся между текущим символом и символом в начале строки. Таким же образом команда d$ позволит удалить все символы в диапазоне от текущего символа до символа в конце строки. Аналогично, команды y0 и y$ позволят осуществлять копирование символов до начала и конца текущей строки соответственно.
Таблица 20.7. Переход в начало и конец строки
Команда | Действие |
---|---|
0 | Переход к началу текущей строки |
^ | Переход к началу текущей строки |
$ | Переход к концу текущей строки |
d0 | Удаление символов до начала текущей строки |
d$ | Удаление символов до конца текущей строки |
Объединение двух (J) и более строк
При вводе команды J
в режиме ввода команд будет осуществлено объединение следующей и текущей строк. Кроме того, с помощью команды yyp
вы можете дублировать строку, а с помощью команды ddp
- поменять местами две строки.
Таблица 20.8. Объединение двух строк
Команда | Действие |
---|---|
J | Объединение двух строк |
yyp | Дублирование строки |
ddp | Замена местами двух строк |
Слова (w b)
При работе в режиме ввода команд команда w
позволяет перейти к следующему слову, а команда b
- к предыдущему слову. Команды w и b также могут комбинироваться с командами d и y с целью копирования и переноса слов (dw db yw yb).
Таблица 20.9. Слова
Команда | Действие |
---|---|
w | Переход к следующему слову |
b | Переход к предыдущему слову |
3w | Переход вперед на три слова |
dw | Удаление одного слова |
yw | Копирование (yank) одного слова |
5yb | Копирование пяти слов до курсора |
7dw | Удаление семи слов |
Сохранение (или отказ от сохранения) данных и завершение работы (:w :q :q!)
Ввод символа : позволяет вам передавать инструкции редактору vi (говоря техническим языком, ввод символа двоеточия приводит к открытию редактора ex
). Команда :w
позволяет записать данные (сохранить) в файл, команда :q
- завершить работу с редактором без изменения файла и сохранения данных, а команда :q!
- завершить работу с редактором с отклонением всех изменений. При использовании команды :wq
данные будут сохранены в файл, после чего работа редактора завершится точно также, как и при использовании команды ZZ
в режиме ввода команд.
Таблица 20.10. Сохранение данных и завершение работы с vi
Команда | Действие |
---|---|
:w | Сохранение (запись) данных в файл |
:w имя файла | Сохранение данных в файл с заданным именем |
:q | Завершение работы с редактором |
:wq | Сохранение данных и завершение работы с редактором |
ZZ | Сохранение данных и завершение работы с редактором |
:q! | Завершение работы с редактором (с отклонением внесенных вами изменений) |
:w! | Сохранение данных (и запись данных в защищенный от записи файл) |
Последняя команда применяется в особых случаях. В случае использовании команды :w!
редактор vi
попытается осуществить изменение прав доступа к файлу (chmod
) с целью получения возможности записи данных в файл (данный трюк сработает в том случае, если вы являетесь владельцем файла) и вернет прежние права доступа к файлу в случае успешной записи данных. Эта команда должна всегда успешно выполняться, если вы используете учетную запись пользователя root (и имеете возможность осуществления записи данных в любой файл файловой системы).
Поиск (/ ?)
В режиме ввода команд команда / позволяет вам осуществлять поиск строк в тексте, редактируемом с помощью vi (в качестве поискового запроса может использоваться регулярное выражение). Команда /foo позволяет осуществить поиск строки foo по направлению к концу файла, а команда ?bar - поиск строки bar по направлению к началу файла.
Таблица 20.11. Поиск
Команда | Действие |
---|---|
/строка | Поиск строки по направлению к концу файла |
?строка | Поиск строки по направлению к началу файла |
n | Переход к следующей найденной строке |
/^строка | Поиск строки по направлению к концу файла с начала текущей строки файла |
/строка$ | Поиск строки по направлению к концу файла с конца текущей строки файла |
/br[aeio]l | Поиск слов bral, brel, bril, и brol |
/\<he\> | Поиск слова he (но не слов here или the ) |
Замена всех найденных строк (:1,$ s/foo/bar/g)
Для замены всех найденных строк foo на строки bar в первую очередь следует перейти в режим ex с помощью команды : . После этого следует сообщить редактору vi о том, какие строки следует использовать, например, в случае использования запроса 1,$ будет осуществляться замена всех найденных строк, начиная с первой и заканчивая последней строкой файла. Вы можете использовать запрос 1,5 для обработки только первых пяти строк файла. Запрос s/foo/bar/g позволяет заменить все строки foo на строки bar.
Таблица 20.12. Замена
Команда | Действие |
---|---|
:4,8 s/foo/bar/g | Заменить строки foo на строки bar начиная с 4 и заканчивая 8 строкой файла |
:1,$ s/foo/bar/g | Заменить строки foo на строки bar во всех строках файла |
Чтение файлов (:r :r !cmd)
При работе в режиме ввода команд команда :r foo позволяет осуществлять чтение файла с именем foo, а команда :r !foo - исполнять системную команду foo. Результат исполнения системной команды будет размещен в позиции курсора. Таким образом, команда :r !ls позволяет сохранить список файлов из текущей директории в вашем текстовом файле.
Таблица 20.13. Чтение файлов и вывода команд
Команда | Действие |
---|---|
:r имя файла | Чтение файла с заданным именем и размещение его содержимого в редактируемом текстовом файле |
:r !команда | Исполнение заданной команды и размещение ее вывода в редактируемом текстовом файле |
Текстовые буферы
В редакторе vi используется 36 буферов для хранения текста. Вы можете задействовать их, воспользовавшись символом ".
Таблица 20.14. Текстовые буферы
Команда | Действие |
---|---|
"add | Удалить текущую строку и переместить текст в буфер a |
"g7yy | Скопировать семь строк в буфер g |
"ap | Вставить данные из буфера a |
Работа с множеством файлов
Вы можете осуществлять редактирование множества файлов с помощью текстового редактора vi. Ниже приведены примеры некоторых команд.
Таблица 20.15. Работа с множеством файлов
Команда | Действие |
---|---|
vi файл1 файл2 файл3 | Начать редактирование трех фалов с заданными именами |
:args | Вывести список файлов и указать активный файл |
:n | Начать редактирование следующего файла |
:e | Перейти к последнему отредактированному файлу |
:rew | Сместить указатель открытых файлов на первый файл |
Аббревиатуры строк
С помощью команды :ab
вы можете создавать аббревиатуры строк в рамках редактора vi. Впоследствии следует использовать команду :una
для прекращения использования созданной аббревиатуры.
Таблица 20.16. Аббревиатуры строк
Команда | Действие |
---|---|
:ab строка длинная строка | Создать аббревиатуру строка для строки 'длинная строка' |
:una строка | Прекратить использование аббревиатуры строка |
Соответствия клавиш
Аналогично аббревиатурам, благодаря наличию поддержки команды :map
при работе в режиме ввода команд и команды :map!
при работе в режиме ввода текста, вы имеете возможность использовать соответствия клавиш.
set number
) и деактивации (выполняющейся с помощью команды set nonumber
) режима показа нумерации строк файла. Строка <bar> разделяет две команды, причем команда set number!
предназначена для переключения режима показа нумерации строк файла, а команда set number?
- для вывода сообщения о текущем состоянии.
:map <F6> :set number!<bar>set number?<CR>
Установка значений параметров
:set number (также попробуйте использовать команду :se nu) :set nonumber :syntax on :syntax off :set all (вывод списка, содержащего имена всех параметров конфигурации) :set tabstop=8 :set tx (окончания строк в стиле CR/LF) :set notx
~/.vimrc
в случае использования редактора vim или ~/.exrc
в случае использования стандартного редактора vi.
paul@barry:~$ cat ~/.vimrc set number set tabstop=8 set textwidth=78 map <F6> :set number!<bar>set number?<CR> paul@barry:~$
Практическое задание: vi(m)
-
1. Запустите приложение vimtutor и выполните некоторые или все предложенные задания. При работе с дистрибутивом xubuntu вам, возможно, придется выполнить команду
aptitude install vim
. -
2. Какая комбинация из 3 клавиш, использованная в режиме ввода команд, позволит создать дубликат текущей строки файла?
-
3. Какая комбинация из 3 клавиш, использованная в режиме ввода команд, позволит поменять две строки файла местами (в результате чего строка номер пять станет строкой номер шесть, а строка номер шесть - строкой номер пять)?
-
4. Какая комбинация из 2 клавиш, использованная в режиме ввода команд, позволит поменять местами текущий и следующий символы?
-
5. Редактор vi может работать с макросами. Запись макроса должна начинаться с символа q, после которого должно записываться имя макроса. Таким образом, команда qa приведет к созданию макроса с именем a. Повторное нажатие клавиши q приведет к завершению записи макроса. После этого вы можете вызвать созданный макрос, воспользовавшись символом @ со следующим за ним именем макроса. Попытайтесь использовать следующий пример: i 1 'Клавиша Escape' qa yyp 'Ctrl a' q5@a. (Сочетание клавиш Ctrl a позволяет увеличить значение на 1).
-
6. Скопируйте файл /etc/passwd в вашу домашнюю директорию (~/passwd). Откройте скопированный файл с помощью редактора vi и нажмите Ctrl v. После выделения блока текста с помощью клавиш со стрелками вы сможете скопировать его с помощью команды y или удалить его с помощью команды d. Попытайтесь вставить скопированный блок текста.
-
7. Какое действие выполняется с помощью команды
dwwP
, если курсор находится в начале слова из предложения?
Корректная процедура выполнения практического задания: vi(m)
-
1. Запустите приложение vimtutor и выполните некоторые или все предложенные задания. При работе с дистрибутивом xubuntu вам, возможно, придется выполнить команду
aptitude install vim
. -
vimtutor
-
2. Какая комбинация из 3 клавиш, использованная в режиме ввода команд, позволит создать дубликат текущей строки файла?
-
yyp
-
3. Какая комбинация из 3 клавиш, использованная в режиме ввода команд, позволит поменять две строки файла местами (в результате чего строка номер пять станет строкой номер шесть, а строка номер шесть - строкой номер пять)?
-
ddp
-
4. Какая комбинация из 2 клавиш, использованная в режиме ввода команд, позволит поменять местами текущий и следующий символы?
-
xp
-
5. Редактор vi может работать с макросами. Запись макроса должна начинаться с символа q, после которого должно записываться имя макроса. Таким образом, команда qa приведет к созданию макроса с именем a. Повторное нажатие клавиши q приведет к завершению записи макроса. После этого вы можете вызвать созданный макрос, воспользовавшись символом @ со следующим за ним именем макроса. Попытайтесь использовать следующий пример: i 1 'Клавиша Escape' qa yyp 'Ctrl a' q5@a. (Сочетание клавиш Ctrl a позволяет увеличить значение на 1).
-
6. Скопируйте файл /etc/passwd в вашу домашнюю директорию (~/passwd). Откройте скопированный файл с помощью редактора vi и нажмите Ctrl v. После выделения блока текста с помощью клавиш со стрелками вы сможете скопировать его с помощью команды y или удалить его с помощью команды d. Попытайтесь вставить скопированный блок текста.
-
cp /etc/passwd ~ vi passwd (нажмите Ctrl-V)
-
7. Какое действие выполняется с помощью команды
dwwP
, если курсор находится в начале слова из предложения? -
Команда
dwwP
позволяет менять местами текущее и следующее слова в предложении.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 19. Регулярные выражения | Глава 21. Введение в разработку сценариев |