Предыдущий Содержание Следующий

5.8  vi

vi(1) это стандартный текстовый редактор Unix, который используется в основном системными администраторами. Есть несколько версий (клонов) vi: vi, elvis, vile, и vim. Один из них есть практически в любой версии Unix, и Linux. Все эти версии включают идентичный основной набор команд, так что изучив основные команды одного из клонов, вам будет легко перейти к использованию другого.

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

В Slackware Linux, версия vi по умолчанию, это elvis. Другие доступные версии, такие как vim и gvim, доступны, если вы установили соответствующие пакеты. gvim это X Window версия vim, с панелями инструментов, всплывающими меню и диалогами.

5.8.1  Запуск vi

vi может быть запущен из командной строки множеством различных способов:

$ vi


Figure

Такая команда запустит vi с пустым буфером. Вы увидите почти пустой экран. Программа сейчас в ''командном режиме'' и ожидает, пока вы сделаете что -либо. Для обзора различных режимов работы редактора смотрите подраздел 5.8.2. Чтобы выйти из vi напечатайте:

:q

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

Вы можете так же открыть при помощи vi уже существующий файл. Например, чтобы открыть /etc/resolv.conf, вам надо выполнить:

$ vi /etc/resolv.conf

Так же, vi может открыть файл с указанной строчки. Например, вы можете запустить vi со строки 47 /usr/src/linux/init/main.c, выполнив такую команду:

vi +47 /usr/src/linux/init/main.c

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

5.8.2  Режимы vi

vi оперирует в разных режимах, которые используются для выполнения различных задач. Когда вы только запустили vi, вы попадаете в командный режим. Отсюда вы можете выполнять разные команды для манипулирования текстом, перемещаться внутри файла, сохранить, выйти и это ещё не всё. Для изменения текста используется режим вставки (insert). Вы можете переключаться в различные режимы, при помощи комбинаций клавиш, которые описаны ниже.

Командный режим

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

Вероятно, наиболее часто используемая команда командного режима, это переход в режим вставки. Нажмите i и вы попадёте в режим вставки. Курсор изменит свою форму и ''- INSERT -'' высветится в нижней части экрана (в клонах программы это не произойдёт). В этом режиме вы можете вводить текст, и он будет отображаться на экране. Чтобы вернуться в командный режим, нажмите Esc кнопку.

Командный режим так же удобен для перемещения внутри файла. На некоторых системах вы можете использовать стрелки для перемещения. В других системах вам придётся воспользоваться более традиционными ''hjkl''. Вот список того, как эти кнопки используются для перемещений:

h перейти влево на один символ
j перейти вниз на один символ
k перейти вверх на один символ
l перейти вправо на один символ

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

Многие команды, используемые в командном режиме начинаются с двоеточия. Например, для выхода используется :q, как уже упоминалось выше. Двоеточие просто показывает, что это команда, в то время, как ''q'' говорит vi что вы хотите покинуть программу. Другой тип команд представлен комбинацией числа (необязательного) и буквы. Перед такими командами не надо указывать двоеточие, они используются в основном для манипулирования текстом.

Для примера, чтобы удалить одну строку из файла, нажмите dd. Что приведёт к удалению строки, на которой находится курсор. Выполнение команды 4dd укажет vi удалить строку, на которой находится курсор, и три строки после неё. В общем, число указывает vi, сколько раз выполнить команду.

Вы можете комбинировать число с командами перемещения. Например, 10k переместит вас на 10 строк вверх по тексту.

Командный режим так же может быть использован для вырезания и вставки текста, вставки текста, для считывания других файлов в текущий буфер. Копирование текста осуществляется при помощи y кнопки (y от yank). Копирование текущей строки выполняется нажатием yy и может быть использовано с предшествующим числом, для копирования нескольких строк. Затем перейдёте к месту, куда хотите вставить скопированный текст, и нажмите p. Текст будет вставлен в строку, следующую за текущей.

Вырезание текста выполняется при помощи dd и p используется для вставки вырезанного текста обратно в файл. Считывание текста с другого файла, это довольно простая процедура. Просто наберите :r, пробел и имя файла, содержащего текст, который вы хотите вставить. Содержимое файла будет помещено в текущий буфер, со строки следующей за той, на которой находится курсор. Более усовершенствованные клоны vi завершают имена файла, на подобие того, как это работает в оболочке.

Последний вариант использования режима, который будет описан здесь, это поиск. Режим команд позволяет выполнять как простой поиск, так и расширенный поиск с заменой. В этом разделе будет описан только команда простого поиска.

Для поиска нажмите на кнопку / и введите текст, который вы хотите найти. vi будет искать от того места, где находится курсор, в направлении к концу файла, и остановится при нахождении первого совпадения. Заметьте, что не точные совпадения так же заставят vi остановиться. Например, поиск ''the'' заставит vi остановиться на ''then'', ''therefore'' и т.д. Это произойдёт потому, что все эти слова содержат ''the'', но только в начале.

После того, как vi нашёл первое совпадение, вы можете продолжить, поиск следующего, простым нажатием / и ввод. Можно так же задавать поиск в направлении от курсора, к началу файла, для этого вместо слэш вам надо воспользоваться ?. Например, для поиска в обратном направлении ''the'' вам необходимо выполнить команду ?the.

Режим вставки

Вставка и замена текста осуществляется в режиме вставки. Как сообщалось выше, для перехода в этот режим из командного, вам надо нажать i. Далее, весь напечатанный вами текст вводится в текущий буфер. Нажатие Esc вернёт вас в командный режим.

Замена текста осуществляется несколькими способами. Нажатие r из командного режима позволит вам заменить один символ, подсвеченный курсором. Просто введите новый символ и он займёт место подсвеченного курсором. Сразу же после этого вы вернётесь в командный режим. Нажатие R позволяет вам заменить столько символов, сколько вы пожелаете. Чтобы выйти из режима замещения, просто нажмите Esc и вы попадёте в командный режим.

Есть так же и другой способ переключения между вставкой и заменой. Нажатие кнопки Insert из командного режима переведёт вас в режим вставки. Если вы уже в режиме вставки, кнопка Insert работает, как переключатель между режимом вставки и замены.

5.8.3  Открытие файлов

vi позволяет открывать файлы как из командного режима, так и из командной строки, указав имя файла после имени программы. Чтобы открыть файл /etc/lilo.conf:

:e /etc/lilo.conf

Если вы произвели изменения в текущем буфере и не сохранили их, vi скажет вам об этом. Вы всё же можете открыть файл, без записи текущего буфера, набрав :e!, пробел и имя файла, который вы хотите открыть. Обычно предупреждения программы могут быть проигнорированы указанием восклицательного знака после команды.

Если вы хотите перечитать текущий файл, вы можете сделать это, набрав e!. Это удобно, если вы каким-то образом что-то напортили и хотите перечитать файл.

Некоторые vi клоны (например, vim) позволяют открыть одновременно несколько буферов. Например, чтобы открыть файл 09-vi.sgml в моём домашнем каталоге, в то время, как другой файл уже открыт, я наберу:

:split  /09-vi.sgml

Новый файл отображается в верхней половине экрана, а старый файл отображается в нижней половине. Есть много команд для управления разделённым экраном, и многие из них напоминают EMACS. Лучшей ссылкой по использованию этих команд будет man страница для вашего vi клона.

5.8.4  Сохранение файлов

Для сохранения файлов в vi может быть использовано несколько разных команд. Если вы хотите сохранить текущий буфер в файл randomness, вам надо набрать:

:w randomness

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

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

:w!
:wq!

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

5.8.5  Выход из vi

Один из методов выхода из vi это использование :wq, что приведёт к сохранению текущего буфера перед выходом. Вы так же можете выйти без охранения изменений, при помощи :q или :q!. Последний вариант используется когда вы изменили файл, но не хотите сохранить эти изменения.

Может случиться, что произойдёт сбой при работе вашего компьютера, или программы vi. Тем не менее, оба клона (и elvis и vim) предпримут шаги по минимизированию потерь всех открытых буферов. Оба редактора сохраняют открытые буфера во временный файл. Этот файл обычно называется по аналогии с открытым файлом, но с точкой вначале. Это делает файл скрытым.

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

5.8.6  Настройка vi

Выбранный вами vi клон может быть настроен несколькими способами.

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

Почти все из этих команд могут быть помещены в настроечный файл в вашем домашнем каталоге. elvis ищет .exrc файл, а vim ищет .vimrc файл. Большинство конфигурационных команд, которые могут быть введены из командной строки, могут быть размещены в настроечный файл. Включая установочную информацию, подстановку текста, макросы, и более.

Обсуждение всех этих опций и различий между редакторами, не является целью данной книги, так что если вы заинтересовались расширенными функциями редакторов, загляните в man страницу или зайдите на вэб сайт предпочитаемого вами редактора. Некоторые редакторы (как vim) содержат мощную справочную систему, доступную внутри редактора, по команде :help. Вы так же можете заглянуть в книгу ''Изучаем Редактор vi'' Ламба и Роббинса.

Многие программы в Linux по умолчанию откроют текстовые файлы в vi. Например, редактирование ваших crontab задач загрузит vi по умолчанию. Если вам не нравится vi и хотите, чтобы другая программа запускалась по умолчанию, всё что вам надо сделать, так это установить значение VISUAL переменной окружения равное имени вашего любимого редактора. Для информации по установке переменных окружения смотрите раздел 5.1.3. Если вы хотите, чтобы ваш любимый редактор был редактором по умолчанию при каждом входе в систему, добавьте установку VISUAL переменной в ваш .bash_profile или .bashrc файл.

5.8.7  Кнопки vi

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

Операция Кнопка
влево, вниз, вверх, вправо h, j, k, l
перейти в конец строки $
перейти в начало строки ы
перейти в конец файла G
перейти в начало файла :1
перейти к 47-й строке :47

Table 5.2: Перемещения

Операция Кнопка
удалить строку dd
удалить пять строк 5dd
заменить символ r
удалить символ x
удалить десять символов 10x
отменить последнее действие u
объединить текущую строку со следующей J

Table 5.3: Редактирование

Операция Кнопка
найти äsdf" в тексте после курсора /asdf
искать äsdf"в тексте до курсора ?asdf
повтор последнего поиска в тексте после курсора /
повтор последнего поиска в тексте до курсора ?

Table 5.4: Поиск

Операция Кнопка
выход :q
выход без записи :q!
записать и выйти :wq
записать, без выхода :w
пере-загрузить текущий файл :e!
записать содержимое буфера в файл asdf :w asdf
открыть файл hejaz :e hejaz
загрузить файл asdf в буфер :r asdf
загрузить вывод ls в буфер :r !ls

Table 5.5: Сохранение и выход

5.8.8  Итог

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


Предыдущий Содержание Следующий

File translated from TEX by TTH, version 2.89.
On 24 Apr 2001, 16:43.