Редактор vi был написан еще в 1976 году Биллом Джоем, который впоследствии стал одним из основателей Sun Microsystems, и до сих пор используется по умолчанию при работе в текстовом режиме.
Редактор vi может находиться в одном из двух режимов – командном режиме или режиме ввода, причем при запуске активируется командный режим. В данном режиме все набранные символы интерпретируются как команда, причем большинство команд не отображаются. Команды поиска или введенные в режиме совместимости с редактором ed отображаются в последней строке, являющейся служебной.
Для перехода в режим ввода используется команда
a,
i или
o. Текст начнет вводиться в позиции курсора (а), в позиции, следующей за позицией курсора (i), или в начале новой строки, которая появится под текущей строкой (o).
Esc используется для перехода из режима ввода в режим команд,
Если нажатия клавиш передвижения по тексту в режиме ввода интерпретируются некорректно, лучше сначала выйти в командный режим, затем перейти по тексту и снова перейти в режим ввода. Переход по тексту в командном режиме выполняется клавишами передвижения по тексту (стрелками, PageUp, Page Down, Home, End), а также Ctrl-F (forward, вперед на страницу), Ctrl-B (backward, назад на страницу). Если стрелки не работают, можно использовать вместо них клавиши h,j,k,l:
h – влево,
l – вправо,
k – вверх,
j – вниз.
Перед любой командой vi (конечно, когда это имеет смысл), за исключением команд, начинающихся с двоеточия (команды режима совместимости с редактором ed), можно набрать число, которое будет являться требованием повторить идущую за ним команду это число раз.
Все команды режима совместимости с редактором ed могут быть предварены выражением
n,m, где n,m – номера строк, ограничивающих диапазон выполнения команды (вводятся после двоеточия). Если такого выражения нет, команда выполняется для текущей строки.
Обычный поиск выполняется командой
/поисковый запрос. При поиске назад по файлу используется вопросительный знак вместо слэша. Продолжение поиска – слэш или вопросительный знак без запроса. Если в запросе встретится слэш или вопросительный знак, vi сочтет их ограничителем.
Поиск и замена выполняется командой
:s/запрос/на что заменить/. В ней указывается образец для поиска и строка, которой следует его заменить. После завершающего слэша может стоять модификатор
g. Если его не поставить, заменен будет только первый образец в строке. При наличии данного модификатора будут заменены все подстроки, отвечающие образцу.
Выйти из редактора с записью изменений можно с помощью команд
ZZ,
:q и
:wq. Чтобы выйти без записи, нужно выполнить команду
:q!, а если пользователю root требуется записать изменения, даже если нет права записи в файл -
:w!.
Полный список команд можно посмотреть в руководстве по vi (man vi), которое есть в любой Unix-системе.