Наши партнеры

UnixForum





Библиотека сайта 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! при работе в режиме ввода текста, вы имеете возможность использовать соответствия клавиш.

В примере ниже показана методика настройки редактора с целью задействования клавиши F6 для активации (выполняющейся с помощью команды set number) и деактивации (выполняющейся с помощью команды set nonumber) режима показа нумерации строк файла. Строка <bar> разделяет две команды, причем команда set number! предназначена для переключения режима показа нумерации строк файла, а команда set number? - для вывода сообщения о текущем состоянии.
:map <F6> :set number!<bar>set number?<CR>

Установка значений параметров

Значения некоторых параметров конфигурации редактора vim могут быть установлены непосредственно при работе с ним.
: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. Введение в разработку сценариев