Как выйти из Vi? Именно такой вопрос мне чаще всего задают пользователи, впервые запустившие этот замечательный редактор :) Сразу ответ: Esc Esc ZQ или Esc Esc :qa! если ничего сохранять не нужно, Esc Esc ZZ или Esc Esc :w!q если содержимое надо сохранить. Два раза Esc в данном случае позволит вам выйти в нормальный режим из любого состояния редактора.

Нет, редактор VI, а точнее VIM (Vi IMproved), и вправду замечательный, но уж очень необычный. В этой небольшой статье вы не найдете макросов, продвинутого редактирования, настройки и много чего другого. Здесь только самые полезные команды и основы редактора.

Любой админ должен знать хотя бы основы работы в VIM, потому что в большинстве случаев  - это единственный доступный редактор в однопользовательском режиме на упавшей *nix системе. Более того он замечателен уже хотя бы тем, что он есть в установке по-умолчанию почти в любом *nix и, зачастую, используется как основной редактор. Например для правки passwd файла во FreeBSD используется команда vipw.

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

Редактор может находиться в трех режимах и изначально находится в так называемом "нормальном" режиме. В него же можно выйти из любого другого режима нажатием кнопки Esc.

Из нормального режима, в котором производятся операции над текстом и перемещение, можно войти в режим "вставки", в котором и набирается собственно текст. Для этого есть следующие кнопки:

i - вставить текст до курсора
I - вставить текст с начала строки
a - вставить текст после курсора
A - вставить текст с конца строки
o - вставить новую строку ниже
O - вставить новую строку выше
s - замена текущего символа и остаться в режиме вставки
S - замена текущей строки
r - Заменить текущий символ и вернуться в нормальный режим
R - Заменить несколько последовательно расположенных символов

Мощь VIM  в использовании модификаторов команды. Перед любой командой перемещения можно и, зачастую, нужно использовать мультипликатор. То есть 6w - это на 6 слов, а 77j - на 77 строк вниз.

Нужно заметить, что модификаторы часто можно использовать и при других операциях, как например 5S - заменить 5 последующих строк.

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

Если учесть, что стартовая позиция для правой руки - клавиши hjkl, то выбор клавиш становится вполне понятным:

Управление текущей позицией

h - влево (указательный палец сдвигается влево)
j - вниз
k - вверх.
l - вправо.

по строкам

^ или 0 - начало строки
$ - конец строки
w (word) - к началу следующего слова
e (end) - к концу текущего слова
b (begin) - к началу текущего слова и далее к предыдущим словам
G (Go) - переход на строку (по умолчанию на последнюю)

по экрану

H (High) для перехода в верхнюю строку экрана
M (Middle) для перехода в среднюю строку экрана
L (Low) для прехода в нижнюю строку, показанная на экране

по тексту

{ - предыдущий абзац
} - следующий абзац
( - предыдущее предложение
) - следующее предложение
ctrl-b (backward) перемещение на один экран назад
ctrl-f (forward) перемещение на один экран вперед

Закладки

На любую строку можно поставить метку m[A-Z,a-z] и вернуться в любое время на неё '[A-Z,a-z] (то есть одинарная кавычка и название метки).

Операции над текстом

~ - Смениить регистр текущего символа (или стольких, сколько указано в мультипликаторе)
d - Удалить + мультипликатор, например: d$ - всё до конца строки, d8w - 8 слов, d3h - 3 символа вправо, d1G - всё к началу текста.
dd - удалить строку (55dd - 55 строк)
Если быть точнее, то операции удаления - это вырезание текста в буфер, то есть его можно потом вставить.

y (yank) - копировать в буфер (y5w - копировать 5 слов)
yy - копировать в буфер строку (2yy - 2 строки)
p (paste) - вставить из буфера (2p - вставить 2 раза)

Визуальный режим выделения текста

v (visual) - посимвольный режим выделения
V - построчный режим выделения
Ctrl-V - прямоугольный блок текста
Над выделенным фрагментом можно производить все обычные действия.

Undo и redo

u (undo) - Отменить последнее изменение (7u - 7 изменений)
ctrl-r (redo) - Повторить изменение
:earlier 40m - вернуть текст таким, как он был 40 минут назад
:later 20s - передвинуться вперед на 20 секунд по временной шкале изменения текста
:undolist - список правок

Выход, запись изменений

Возвращаясь к теме статьи:
:w (write) запись файла на диск
:q (quit) выход из редактора, если изменения не нужно сохранять, то добавьте !

PS: А вот действительно кошмарные редакторы - это ее и nano IMHO :)

Добавить комментарий
  • Однажды я вписал vi просто в терминал нажал esc и увидел синий экран что то поклацал и перестал работать терминал( :cry:
    К сожалению, из подобного описания ничего не понятно. Может быть выразите свою мысль немного внятнее. Не помешало бы также знать: какая OS, какой терминал, что "поклацал" и что именно перестало работать?

  • Никита

    Жалоба

    Однажды я вписал vi просто в терминал нажал esc и увидел синий экран что то поклацал и перестал работать терминал( :cry: