Добавить в цитаты Настройки чтения

Страница 36 из 113

:%s/строка/Строка/gc

Эта команда вернет содержимое файла в прежнее состояние, но перед каждой заменой vi будет останавливаться и спрашивать подтверждение, выдавая следующее сообщение:

заменить на Строка? (y/n/a/q/l/^E/^Y)

В круглых скобках перечислены возможные варианты ответов, описание которых приводится в табл. 12.6.

Таблица 12.6. Клавиши подтверждения замены

Клавиша

Действие

y

Выполнить замену

n

Пропустить найденное вхождение

a

Выполнить замену этого и всех последующих вхождений

q или ESC

Завершить операцию

l

Выполнить замену этого вхождения и завершить операцию. Сокращенно от last (последняя)

CTRL+E, CTRL+Y

Прокрутить вниз или вверх соответственно. Эти команды удобно использовать для просмотра контекста найденного вхождения перед заменой

Редактирование нескольких файлов

Иногда бывает необходимо редактировать сразу несколько файлов. Например, может понадобиться внести изменения в файлы или скопировать содержимое из одного файла в другой. Редактор vi позволяет открыть несколько файлов, перечислив их в командной строке:

vi файл1 файл2 файл3...

Давайте закроем текущий сеанс работы vi и создадим новый файл для редактирования. Введите :wq, чтобы выйти из vi с сохранением изменений в тексте. Далее, создайте новый файл в домашнем каталоге, который мы будем использовать в наших экспериментах. Создайте файл, захватив в него вывод команды ls:

[[email protected]/* */ ~]$ ls -l /usr/bin > ls-output.txt

Теперь откройте в vi старый и новый файлы:

[[email protected]/* */ ~]$ vi foo.txt ls-output.txt

После запуска vi вы увидите на экране первый файл:

Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.

Строка 2

Строка 3

Строка 4

Строка 5

Переключение между файлами

Чтобы переключиться с одного файла на следующий, выполните ex-команду:

:n

Чтобы вернуться обратно, в предыдущий файл, выполните:

:N

Теперь мы можем переключаться между файлами, но vi проводит политику, запрещающую переключаться между файлами, если в текущем файле имеются несохраненные изменения. Чтобы заставить vi переключиться между файлами с потерей всех несохраненных изменений, добавьте в команду восклицательный знак (!).

В дополнение к методам переключения между файлами, описанным выше, vim (и некоторые версии vi) предоставляет дополнительные ex-команды, упрощающие управление множеством файлов. Например, командой :buffers можно вывести список редактируемых файлов. В этом случае список появляется в нижней части экрана:

:buffers

  1 %a  "foo.txt"                        line 1

  2     "ls-output.txt"                  line 0

Нажмите ENTER или введите команду для продолжения

Чтобы перейти к другому буферу (файлу), введите :buffer и номер искомого буфера. Например, переключиться с буфера 1, содержащего файл foo.txt, на буфер 2, содержащий файл ls-output.txt, можно командой:

:buffer 2

после выполнения этой команды на экране появится второй файл.

Открытие дополнительных файлов для редактирования

Также существует возможность добавлять файлы в текущий сеанс редактирования. Команда :e (сокращенно от edit — редактировать) с именем файла откроет дополнительный файл. Завершите текущий сеанс редактирования и вернитесь в командную строку.

Запустите vi снова, но на этот раз с единственным файлом:

[[email protected]/* */ ~]$ vi foo.txt

Чтобы добавить второй файл, введите:

:e ls-output.txt

и на экране должен появиться второй файл. Первый файл останется открытым в редакторе, в чем легко убедиться:

:buffers

1 #   "foo.txt"                         line 1

2 %a  "ls-output.txt"                   line 0

Нажмите ENTER или введите команду для продолжения

ПРИМЕЧАНИЕ

Файлы, открытые командой :e, недоступны для команд :n и :N. Чтобы переключиться на такие файлы, используйте команду :buffer с номером буфера.



Копирование содержимого из одного файла в другой

Часто в процессе редактирования множества файлов бывает необходимо скопировать фрагмент текста из одного файла в другой. Это легко сделать с помощью обычных команд копирования и вставки, представленных выше. Посмотрим, как можно это осуществить. Сначала, в случае с использованием двух наших файлов, переключитесь на буфер 1 (foo.txt), выполнив команду:

:buffer 1

В результате на экране должно появиться следующее:

Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.

Строка 2

Строка 3

Строка 4

Строка 5

Далее переместите курсор на первую строку и введите yy, чтобы скопировать строку.

Переключитесь на второй буфер командой:

:buffer 2

Теперь на экране должен появиться некий список файлов (здесь показана только часть):

343700

-rwxr-xr-x 1 root root      31316 2011-12-05 08:58 [

-rwxr-xr-x 1 root root       8240 2011-12-09 13:39 411toppm

-rwxr-xr-x 1 root root     111276 2012-01-31 13:36 a2p

-rwxr-xr-x 1 root root      25368 2010-10-06 20:16 a52dec

-rwxr-xr-x 1 root root      11532 2011-05-04 17:43 aafire

-rwxr-xr-x 1 root root       7292 2011-05-04 17:43 aainfo

Переместите курсор на первую строку и вставьте строку, скопированную в предыдущем файле, введя команду p:

343700

Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно..

-rwxr-xr-x 1 root root      31316 2011-12-05 08:58 [

-rwxr-xr-x 1 root root       8240 2011-12-09 13:39 411toppm

-rwxr-xr-x 1 root root     111276 2012-01-31 13:36 a2p

-rwxr-xr-x 1 root root      25368 2010-10-06 20:16 a52dec

-rwxr-xr-x 1 root root      11532 2011-05-04 17:43 aafire

-rwxr-xr-x 1 root root       7292 2011-05-04 17:43 aainfo

Вставка целого файла в другой файл

Кроме того, мы можем вставить файл целиком в другой файл. Для выполнения этого приема завершите сеанс vi и запустите новый, с одним файлом:

[[email protected]/* */ ~]$ vi ls-output.txt

На экране снова появится список файлов:

343700

-rwxr-xr-x 1 root root      31316 2011-12-05 08:58 [

-rwxr-xr-x 1 root root       8240 2011-12-09 13:39 411toppm

-rwxr-xr-x 1 root root     111276 2012-01-31 13:36 a2p

-rwxr-xr-x 1 root root      25368 2010-10-06 20:16 a52dec

-rwxr-xr-x 1 root root      11532 2011-05-04 17:43 aafire

-rwxr-xr-x 1 root root       7292 2011-05-04 17:43 aainfo

Переместите курсор в третью строку и введите следующую ex-команду:

:r foo.txt

Команда :r (сокращенно от read — читать) вставит указанный файл перед позицией курсора. Теперь экран должен выглядеть так:

343700

-rwxr-xr-x 1 root root      31316 2011-12-05 08:58 [

-rwxr-xr-x 1 root root       8240 2011-12-09 13:39 411toppm

Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.

Строка 2

Строка 3

Строка 4

Строка 5

-rwxr-xr-x 1 root root     111276 2012-01-31 13:36 a2p

-rwxr-xr-x 1 root root      25368 2010-10-06 20:16 a52dec

-rwxr-xr-x 1 root root      11532 2011-05-04 17:43 aafire

-rwxr-xr-x 1 root root       7292 2011-05-04 17:43 aainfo

Сохранение результатов работы

И здесь vi предлагает нам несколько способов сохранения отредактированных файлов. Мы уже знакомы с ex-командой :w, но существуют и другие команды, которые могут оказаться полезными.