Изучаем Linux, 101: Редактирование файлов с помощью vi

Редактор, который всегда под рукой

Из этой статьи вы узнаете, как использовать редактор vi, который входит в состав практически любого дистрибутива UNIX® или Linux®. Вы можете использовать этот материал для подготовки к экзамену LPI 101 программы сертификации на администратора Linux начального уровня или просто для общего развития.

Развить навыки по этой теме

Этот материал — часть knowledge path для развития ваших навыков. Смотри Основы системного администрирования Linux: работа с консолью

Краткий обзор

Из этой статьи вы узнаете об основных приемах работы с редактором vi, который есть практически в каждом дистрибутиве UNIX или Linux. Вы научитесь:

  • Перемещаться по документу с помощью vi.
  • Использовать основные режимы vi.
  • Вставлять, редактировать, удалять, копировать и искать текст.

Об этой серии

Эта серия статей поможет вам освоить задачи администрирования операционной системы Linux. Вы также можете использовать материал этих статей для подготовки к экзаменам первого уровня сертификации профессионального института Linux (LPIC-1).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-1. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит самые последние (по состоянию на апрель 2009 года) цели экзаменов сертификации LPIC-1. Если какая-либо статья отсутствует в перечне, можно найти ее более раннюю версию, соответствующую предыдущим целям LPIC-1 (до апреля 2009 года), обратившись к нашим руководствам для подготовки к экзаменам института Linux Professional Institute.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 101 на администратора начального уровня (LPIC-1) и содержит материалы цели 103.8 темы 103. Цель имеет вес 3.

Предварительные требования

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать базовыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. Иногда различные версии программ выводят результаты по-разному, поэтому содержимое листингов и рисунков может отличаться от того, что вы увидите на вашем компьютере.


Перемещение по документу с помощью vi

Как связаться с Яном

Ян – один из наших наиболее популярных и плодовитых авторов. Ознакомьтесь со всеми статьями Яна (EN), опубликованными на сайте developerWorks. Вы можете найти контактные данные в профиле Яна и связаться с ним, а также с другими авторами и участниками ресурса My developerWorks.

Редактор vi есть практически в каждом дистрибутиве Linux и UNIX. Фактически, если в операционной системе имеется только один редактор, то, скорее всего, это именно vi, поэтому очень важно уметь работать с ним. В этой статье представлены лишь основные команды редактирования vi, а полную информацию о vi вы можете найти в руководстве "vi intro -- the cheat sheet method" (EN) на сайте developerWorks, на соответствующих man-страницах или в одной из многочисленных книг, посвященных этому редактору.

Запуск vi

Сегодня многие дистрибутивы Linux поставляются с редактором vim (Vi IMproved – улучшенный vi), а не с классической версией vi. Редактор vim обратно совместим с vi, и помимо стандартного текстового интерфейса имеет графический интерфейс (gvim). Обычно команда vi является символической ссылкой на программу vim. Существует несколько версий vim: крошечный (tiny), маленький (small), обычный (normal), большой (big) и огромный (huge). Версию vim, которая используется в вашей операционной системе, а также ее возможности, можно узнать с помощью команды

vi --version

В предыдущей статье этой серии "Изучаем Linux, 101: приоритеты исполнения процесса" мы хотели изменить приоритет работающего сценария командной оболочки count1.sh. Если вы пытались сделать это самостоятельно, то, возможно, обнаружили, что команды выполнялись настолько быстро, что вы не успевали изменить приоритет с помощью renice. Итак, давайте начнем работу с редактором vi и добавим в начало сценария строку для вставки 20-секундной паузы, благодаря которой мы сможем успеть изменить приоритет.

Если у вас нет под рукой сценария count1.sh, то можно сделать следующее: откройте окно терминала, перейдите в вашу домашнюю директорию и скопируйте в окно содержимое листинга 1. В результате в вашей домашней директории будет создана поддиректория lpi103-8, содержащая файл сценария count1.sh.

Листинг 1. Сценарий, нагружающий центральный процессор – count1.sh

Кликните, чтобы увидеть код

Листинг 1. Сценарий, нагружающий центральный процессор – count1.sh

mkdir -p lpi103-8 && cd lpi103-8 && {echo 'x="$1"'>count1.shecho 'echo "$2" $(date)'>>count1.shecho 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'>>count1.shecho 'echo "$2" $(date)'>>count1.sh
}

Для редактирования существующего файла наберите команду vi, указав имя этого файла в качестве параметра. Подробную информацию о различных опциях вы можете найти на man-страницах или в разделе Ресурсы, а пока давайте запустим редактор без каких-либо опций:
vi count1.sh
В результате должен открыться файл count1.sh. Вы должны увидеть нечто похожее на листинг 2. Если вы используете vim, то некоторые слова или символы могут быть выделены цветом. В редакторе vim имеется режим выделения цветом (отсутствующий в оригинальном vi), который может быть включен в вашей системе по умолчанию.

Листинг 2. Редактирование сценария count1.sh в vi
x="$1"
echo "$2" $(date)
while [ $x -gt 0 ]; do x=$(( x-1 ));done
echo "$2" $(date)
~
~
~
~
"count1.sh" 4L, 84C        1,1     All

Редактор vi начал разрабатываться еще в те времена, когда не все терминальные клавиатуры имели клавиши управления курсором, поэтому в vi вы можете делать все с помощью клавиш, расположенных на стандартной буквенно-цифровой клавиатуре, а также нескольких специальных клавиш, таких как Esc и Insert. Тем не менее, вы можете настроить vi на использование дополнительных клавиш современной компьютерной клавиатуры; большинство клавиш из имеющихся на вашей клавиатуре выполняют в vi какие-то полезные действия. Благодаря своему наследию, а также медленным подключениям старых терминалов, vi имеет заслуженную репутацию редактора, в котором используются краткие и загадочные команды. Давайте начнем с рассмотрения комбинаций клавиш, предназначенных для навигации по файлам.

Перемещение

Следующие команды предназначены для перемещения по файлу:

h
Перейти на один символ влево в текущей строке.
j
Перейти к следующей строке.
k
Перейти к предыдущей строке.
l
Перейти на один символ вправо в текущей строке.
w
Перейти к следующему слову в текущей строке.
e
Перейти к концу текущего слова в текущей строке.
b
Перейти к началу текущего слова в текущей строке.
Ctrl-f
Прокрутить одну страницу вперед.
Ctrl-b
Прокрутить одну страницу назад.

Если вы наберете перед любой из этих команд число, то команда будет выполнена указанное количество раз. Это число называется счетчиком повторений или просто счетчиком. Например, команда 5h переместит курсор на пять символов влево. Счетчики повторений можно использовать со многими командами vi.

Перемещение по строкам

Следующие команды предназначены для перехода к определенным строкам файла.

G
Перейти к определенной строке файла. Например, команда 3G перемещает курсор к строке 3. Команда G без каких-либо параметров перемещает курсор к последней строке файла.
H
Перейти к определенной строке относительно верхнего края экрана. Например, команда 3H перемещает курсор к третьей строке относительно верхнего края экрана.
L
Подобна команде H, но отсчет происходит относительно последней строки экрана. Таким образом, команда 2L перемещает курсор на вторую строку относительно нижней строки экрана.

Поработайте с этими командами и научитесь свободно использовать их. Если в процессе работы что-то пойдет не так, то всегда можно выйти из vi. Как это сделать, рассказывается далее.

Выход из vi

Всегда необходимо уметь выйти из редактора. Это позволит не испортить важный файл, если при его редактировании вы допустите какую-либо критическую ошибку. Из vi можно выйти следующими способами: с сохранением изменений, без сохранения изменений, с перезапуском редактирования файла с самого начала. Если приведенные ниже команды не работают, то проверьте, не находитесь ли вы в режиме вставки, о котором вы узнаете чуть позже. Если вы сомневаетесь, то нажмите клавишу Esc для выхода из режима вставки и возврата в режим команд, в котором эти команды должны работать.

:q!
Завершить редактирования файла с отменой всех изменений. Эта команда очень часто используется при возникновении трудностей.
:w!
Записать файл (независимо от того, был ли он изменен или нет). Предпринимается попытка перезаписать существующие файлы, файлы с доступом только для чтения или другие неперезаписываемые файлы. В качестве параметра можно указать имя, под которым будет сохранен исходный файл, который вы начинали редактировать. Зачастую безопаснее не использовать символ !, если вы не уверены на все 100% в том, что вы сделали.
ZZ
Записать файл, если он был изменен, а затем выйти из редактора. Эта команда обычно используется для нормального выхода из vi.
:e!
Редактировать текущую копию файла на диске. Выполняется повторная загрузка файла с отменой всех внесенных изменений. Эту команду можно также использовать в тех случаях, когда файл на диске по какой-то причине был изменен и вам требуется использовать его последнюю версию.
:!
Запустить команду интерпретатора. Наберите команду и нажмите клавишу Enter. По завершении работы команды вы увидите ее вывод и приглашение вернуться в редактор vi.

Примечания.

  1. Когда вы набираете двоеточие (:), курсор перемещается в нижнюю строку экрана, в которой можно набирать команду и ее параметры.
  2. Если в вышеперечисленных командах пропустить восклицательный знак, то можно получить сообщение о ошибке, например, о невозможности сохранения изменений или записи в конечный файл (если вы редактируете файл с доступом только на чтение).
  3. Существуют длинные формы команд : (:quit, :write, :edit), однако используются они редко.

Режимы vi

Редактор vi может работать в двух режимах.

Режим команд
В режиме команд вы перемещаетесь по файлу и редактируете файл, выполняя такие операции, как поиск, удаление, изменение текста и так далее. Обычно vi запускается в режиме команд.
Режим вставки
В режиме вставки вы набираете новый текст, начиная с позиции курсора. Для возврата в режим команд нажмите клавишу Esc.

Эти два режима определяют поведение редактора. Все, что вы набираете в режиме вставки, считается текстом, который необходимо вставлять в файл. Если вы пытаетесь набрать команду, и ничего не происходит (или символы появляются под курсором), то, вероятно, вы забыли нажать клавишу Esc для выхода из режима вставки.


Редактирование текста

Теперь, когда вы умеете открывать файлы в редакторе vi, перемещаться по ним и выходить из vi, пришло время узнать, как редактировать текст в файле.

Изменение текста

Для вставки, удаления или изменения текста используйте следующие команды. Заметьте, что некоторые из них могут быть записаны как в верхнем, так и в нижнем регистре (описание будет дано ниже).

i
Перейти в режим вставки перед символом в текущей позиции. Наберите текст и нажмите клавишу Esc для возврата в режим команд. Используйте команду I для вставки текста в начале текущей строки.
a
Перейти в режим вставки после символа в текущей позиции. Наберите текст и нажмите клавишу Esc для возврата в режим команд. Используйте команду A для вставки текста в конце текущей строки.
c
Изменить текущий символ и перейти в режим вставки для ввода символов замены.
o
Вставить новую строку после текущей строки. Используйте команду O для вставки новой строки над текущей строкой.
cw
Удалить оставшуюся часть текущего слова и перейти в режим вставки для его замены. Используйте счетчик повторений для замещения нескольких слов. Используйте команду c$ для замены оставшейся части строки.
dw
То же самое, что и cw (и c$), но без перехода в режим вставки.
dd
Удалить текущую строку. Используйте счетчик повторений для удаления нескольких строк.
x
Удалить символ в позиции курсора. Используйте счетчик повторений для удаления нескольких символов.
p
Поместить последний удаленный текст после текущего символа. Используйте команду P, чтобы поместить текст перед текущим символом.
xp
Полезная команда из комбинации x и p. Замещает символ в позиции курсора символом, находящимся справа от него.

Поиск текста

Вы можете искать текст в файле, используя регулярные выражения.

/
Используйте регулярное выражение после символа / для прямого поиска в файле.
?
Используйте регулярное выражение после символа ? для поиска в файле в обратном направлении.
n
Используйте n для повторения последнего поиска в любом из направлений.

Все вышеперечисленные команды можно предварять счетчиком повторений. Так, команда 3/x (так же, как и команда /x, после которой следует 2n) будет искать третье вхождение x, начиная с текущей позиции. Аналогично, команда 2/^e будет искать вторую строку, начинающуюся на e, относительно текущей позиции.

Обратите внимание на то, что при достижении конца файла поиск продолжится с начала файла.

Справочная информация

Еще одна полезная команда vi – это команда справки, которую можно вызвать, набрав :help. Справка открывается в самом редакторе vi; используйте команду :q, чтобы закрыть справку и продолжить работу. Если вам необходима информация по какой-то определенной тематике (например, перестановка строк), то попробуйте добавить соответствующее слово после команды :help, например, :help wrap.

Собираем все вместе

В начале статьи мы собирались добавить строку в наш файл count1.sh. Чтобы сохранить исходный файл и записать его измененную версию под именем count2.sh, мы можем использовать команды редактора после того, как откроем этот файл при помощи команды vi. Заметьте, что обозначение <Esc> соответствует нажатию клавиши Esc.

Листинг 3. Команды редактора для добавления строки в файл count1.sh
1GOsleep 20<Esc> :w! count2.sh :q

Эти команды выполняют следующие действия:

1G
Переход в первую строку файла.
O
Добавление новой строки над текущей строкой и переход в режим вставки.
sleep 20
Текст, который необходимо добавить.
<Esc>
Нажатие клавиши Esc для возврата в режим команд.
:w! count2.sh
Запись файла на диск.
:q
Выход из vi.

Все просто, когда знаешь, как.

Эта статья последняя из серии статей по теме 103 экзамена LPI 101 на администратора начального уровня (LPIC-1). Ссылки на остальные статьи этой серии вы можете найти в перечне материалов для подготовки к экзаменам LPIC-1.

Ресурсы

Научиться

  • Оригинал статьи: Learn Linux, 101: File editing with vi (EN).
  • Используйте перечень материалов для подготовки к экзаменам LPIC-1 (EN) для поиска статей developerWorks, которые помогут вам подготовиться к сдаче экзаменов программы сертификации LPIC-1, основанной на целях по состоянию на апрель 2009 года.
  • На Web-сайте программы сертификации LPIC (EN) вы найдете подробные цели, списки задач и примерные вопросы всех трех уровней сертификации на администратора Linux-систем профессионального института Linux. В частности, на этом сайте представлены цели экзаменов LPI 101 и LPI 102 по состоянию на апрель 2009 года. Всегда обращайтесь к Web-сайту программы сертификации LPIC, чтобы узнать последние цели.
  • Просмотрите всю серию статей для подготовки к экзаменам института LPI (EN) на сайте developerWorks, основанных на предыдущих целях, определенных до апреля 2009 года, чтобы изучить основы администрирования Linux и подготовиться к экзаменам для получения сертификата администратора Linux.
  • В нашем руководстве по vi "vi intro -- the cheat sheet method" (EN) (developerWorks, декабрь 2000 г.) Даниель Роббинс объясняет, как использовать vi для редактирования текста, работы в режиме вставки, копирования и вставки текста, а также рассказывает о том, как использовать важные расширения vim, такие как визуальный режим и многооконное редактирование.
  • Узнайте больше о написании сценариев для редактора vim, начав со статьи "Scripting the Vim editor, Part 1: Variables, values, and expressions" (EN) (developerWorks, май 2009 г.).
  • Прочитайте статью "Основные задачи для начинающих Linux-разработчиков" (EN) (developerWorks, март 2005 г.) – из нее вы узнаете, как открыть окно терминала или командной оболочки, а также о многом другом.
  • Web-сайт Linux Documentation Project (EN) содержит большое количество полезной документации, в особенности, HOWTO-руководств.
  • Посмотрите все советы по Linux (EN) и руководства Linux (EN) на сайте developerWorks.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=765122
ArticleTitle=Изучаем Linux, 101: Редактирование файлов с помощью vi
publish-date=10132010