Краткий обзор редактора vi (vim – vi improved).
1) Общие сведения. Редактор vi имеет 3 режима работы: перемещение по тексту (основной режим), режим ввода текста и режим ввода команд. Плюс экспресс-команды основного режима.
Переход из основного режима в режим ввода текста осуществляется по магическим клавишам (см. ниже). Переход в режим ввода команд - по символу ":". Возврат в основной режим происходит по нажатию клавиши "Esc".
2) Основной режим (режим просмотра). В основном режиме можно перемещать курсор по тексту, осуществлять поиск по образцу и выполнять экспресс-команды. Для перемещения по тексту годятся стрелочки (®,,,¯), пробел и буквы j, k,h и l. Клавиши "Home" и "End", как правило, работают и перемещают курсор в начало и конец строки, но более традиционно это перемещение выполняется по символам "0" и "$". В границах текущей строки можно перейти к указанному символу (например, z): вперед - fz или назад – Fz. Символы «(» и «)» переведут курсор к началу и концу предложения, символы «{» и «}» - к началу и концу абзаца.
Сочетание (одновременное нажатие) клавиш "Shift" и "g" (просто G) перемещает курсор на последнюю строку, с помощью последовательности NG (N - любое число, необязательно однозначное) можно перевести курсор на строку с номером N. Перейти к заданному образцу текста можно по сочетанию «/text» (в направлении от начала файла к концу) или «?text» (в направлении от конца файла к началу).
Повтор поиска выполняется по нажатию клавиши «N».
Экспресс-команды позволяют легко и быстро выполнять несложные действия, не выходя из режима перемещения по тексту:
ZZ | Выход из редактора с сохранением изменений |
[n]dd | Удалить n строк, начиная с текущей строки, в неименованный буфер |
[n]yy | Скопировать n строк, начиная с текущей строки, в неименованный буфер |
P или p | Вставить содержимое неименованного буфера перед(после) текущей строки |
[n]x | Удалить n символов, начиная с символа под курсором в неименованный буфер |
d[n]w | Удалить n слов в неименованный буфер |
~ | Изменить регистр символа под курсором |
J | Соединить текущую строку со следующей строкой |
Неименованный буфер затирается при следующей записи в него. Если необходимо сохранить несколько удаленных фрагментов, нужно использовать именованные буферы. Например, скопировать 3 строки в буфер «x» и восстановить их из него: “x3yy, затем “xp.
3) Режим ввода текста. В режиме ввода текста можно вводить текст (с различными нюансами). Переход выполняется по нажатию магических клавиш, нюансы зависят от избранного способа перехода:
Символы Перехода | Мнемоника | Нюансы |
A, a | append | Текст будет добавлен – в конце строки (A) или сразу после курсора (a) |
I, i | insert | Текст будет вставлен – в начале строки (I) или перед курсором (i) |
O, o | open | Ввод начнется с новой строки до/после текущей |
C, c | change | Изменить текущую строку полностью (C) или частями (с). Части нужно указывать: w – слово, 2w – 2 слова, $ - до конца строки. |
S, s | substitute | Переход в режим ввода текста с заменой текущей строки/символа под курсором |
R, r | replace | Заменить произвольное число символов (R) или символ под курсором (r) (без выхода из основного режима) |
4) Режим ввода команд. Для сохранения изменений на диске, перехода к редактированию другого файла или глобального редактирования нужно перейти в режим ввода команд. Это команды строчных редакторов-предшественников vi (ed, ex). Нужно отметить, что vi – строчный редактор, в нем все строки редактируемого файла адресуются своими номерами, однако возможна и контекстная адресация. Знак «$» означает последнюю строку в файле (а также конец текущей строки, все зависит от контекста команды). Команды контекстной замены, удаления, копирования и перемещения строк требуют указания диапазона адресов. Если последний отсутствует, команда применяется только к текущей строке. Так, например, чтобы удалить текущую строку, нужно ввести команду :d. Если же хочется удалить 100 первых строк файла, нужно набрать команду :1,100d. Команда :/grand/d удалит ближайшую за текущей строку, содержащую строку “grand”. Чтобы удалить все строки с заданным образцом, необходимо отметить образец меткой g - :g/grand/d (метка v меняет смысл глобализации на обратный). В образцах и контекстных адресах допускаются ограниченные регулярные выражения. Символы «^» и «$» обозначают начало и конец строки соответственно.
Редактировать можно несколько файлов сразу, указав их имена в строке вызова редактора. Кроме того, любой файл можно вызвать в редактор во время сеанса его работы. Для перехода в режим ввода команд необходимо ввести символ «:». В улучшенном vi поддерживается история команд, сохраняемая даже между сеансами редактирования. Перемещаться по списку истории можно клавишами «↑» и «↓». Команда help загружает справочное руководство по редактору.
Команда | Значение |
.= | Узнать номер текущей строки. |
= | Узнать номер последней строки файла. |
q, q! | Выход из редактора с/без сохранения сделанных изменений. |
w, w!, wq, w имя_файла | Записать сделанные изменения в файл; записать изменения, несмотря на отсутствие прав на запись в файл; сделать это с последующим выходом из редактора; записать наредактированное в файл с указанным именем. |
r имя_файла | Считать указанный файл и разместить его содержимое после текущей строки. |
e имя_файла | Перейти к редактированию указанного файла. |
U | Откат назад – отмена последнего изменения. |
!команда_shell | Выполнить указанную команду интерпретатора, не выходя из редактора. |
[g][адрес]s/образец/замена/[g] [диапазон_адресов]s/образец/замена/[g] | Замена образца на строку замены в указанных номерами или контекстным адресом строках. Образец может быть шаблоном, строка замены только строкой. Если после строки замены не указана опция g, заменяется только первое вхождение образца в строке. |
[v][адрес]s/образец/замена/[g] | Выполнить замену во всех строках, не соответствующих указанному контекстному адресу. |
диапазон_адресовmномер_строки | Переместить строки в указанном диапазоне за указанную строку. |
диапазон_адресовtномер_строки | Скопировать строки из указанного диапазона за указанную строку. |
Vi (vim) поддерживает подцветку текста и автоматическое форматирование, предоставляя некоторые удобства для создание программ. Это вкупе со свойством исполнения команд оболочки делает его похожим на платформу для работы программиста, но все-таки его главное назначение– быстрая правка конфигурационных файлов, так как это единственный экранный редактор, доступный даже в однопользовательской моде.


