Редактор Vim

Редактор vim (Vi IMprooved) является развитием vi (VIsual editor). В настоящее время в большинстве дистрибутивов под именем vi поставляется именно vim. В CentOS поставляются три пакета vim-minimal – vi, vim-enhanced – собственно vim и vim-common, набор макросов и вспомогательных программ. Благодаря набору макросов осуществляется подсветка синтаксиса для многих языков программирования, запуск программ на компиляцию, просмотр определения переменных и макросов и т.п.

Редактор имеет 5 режимов (modes):
«Нормальный»: текст не вводится, клавиши h,j,k,l (или стрелки) перемещают курсор, все остальные клавиши и их последовательности выполняют различные команды;
«Вставки/замены»: обычное экранное редактирование. Стрелки могут или не работать в зависимости от программы удаленного доступа;
«Визуальный» или «Выделения»: режим выделения текста с помощью клавиш перемещения курсора или специальных меток;
«Повтора»: после ввода числа в нормальном режиме следующая команда выполнится соответствующее количество раз. Например 5dd пять раз выполнит команду удаления строки;
«Командный»: для ввода команд, для которых не назначены управляющие клавиши.

Клавиша <Esc> (иногда – два нажатия) возвращает из любого режима в «нормальный».
i, a, R, o, O – переводит из «нормального» режима в режим «вставки».
Двоеточие из «нормального» режима переводит в «командный» режим.
Число переводит из «нормального» режима переводят в режим «повтора».
Символы v, V и Ctrl v – переводят из «нормального» режима в «визуальный».

Команды vim для программиста

Включить выключить автовыравнивание строк:
:set autoindent (:set ai)
:set noautoindent (:set noai)

Включить выключить подсветку синтаксиса:
:syntax on
:syntax off

Установить язык программирования если vim не распознал его автоматически:
set syntax=sh

Запустить make в текущем каталоге:
:make [param]

Перед запуском make желательно установить автоматическое сохранения редактируемых файлов перед компиляцией:
:set autowrite on

После завершения компиляции:
:cl - список ошибок
:cc [num] - показать ошибку с номером num или текущую
:cn - следующая ошибка
:cp - предыдущая ошибка

В режиме редактирования:
[i – просмотреть определение (первое вхождение в тексте) переменной
[d – просмотреть определение макроса (в языке Си)
% – найти парную скобку

Ctl-n или Ctrl-p – автодополнение, подстановка слов из имеющейся программы (а в Си и из заголовочных файлов) по введенным первым буквам
Ctrl-X Ctrl-L- автодополнение строки

Простые команды Vi

А любом режиме Esc, чтобы вернуться в нормальный. На некоторых клавиатурах Esc срабатывает с задержкой, поэтому kexit вводить Esc Esc/

В нормальном режиме:
:help [command] - просмотреть подсказку по vim в целом или посвященную команде command.
:q - выйти если в файле не было изменений
:wq, :x - записать и выйти
:q! - выйти без сохранения

u – UNDO последнее действие
U – UNDO вся строка
Ctrl-R – REDO

Переход в режим выделения
v - режим выделения символов и строк
V - режим выделения строк
Ctrl v - режим выделения прямоугольного блока символов

В визуальном режиме можно выделить блок, а затем
d – удалить в буфер (del)
с – удалить в буфер и перейти в режим вставки (cut)
y – копировать в буфер без удаления (yank)

Удаление в буфер
x - один символ
dw - слово
dd - строка

Вставка из буфера

p – вставить (paste) перед курсором
P - p – вставить после курсора

Переход в режим редактирования
i - перейти в режим вставки с позиции курсора
a - перейти в режим вставки с позиции после курсора
o - добавить пустую строку ниже и перейти в режим вставки
O - добавить пустую строку выше и перейти в режим вставки
R - перейти в режим замены
rx - заменить текущий символ на x

Позиционироваться в файле
:nnn - перейти на строку с номером nnn. :0 – начало файла, :$ или G – конец файла
) или ( – следующее или предыдущее предложение
} или { – то же для параграфа
]] или [[ – то же для секции, функции
% – ответная скобка (matching)
`` – предыдущее местонахождение, с точностью до символа
'' (два апострофа) – то же, с точностью до строки

Метки, к которым всегда можно вернуться:
mx – пометить текущую позицию буквой “x” (буква, разумеется, любая)
`x – перейти к метке “x”
'x – перейти к строке с меткой “x”

Поиск/замена:
/text – искать “text” ниже текущей позиции
?text – то же, но выше
n – повторить поиск в том же направлении
N – то же, но в обратном направлении
* – найти и пометить слово такое же, как под курсором ниже по файлу
# – то же, но выше по файлу

:[address]s/text/replacement/[gci] – в строках заданных address заменить “text” на “replacement”. Опции: g (Global)-все, c (Confirm) – с запросом, i (case Insensitive) -игнорируя регистр