Шпаргалка по VIM

Vim - консольный текстовый редактор, который можно использовать на нашем сервере для редактирования исходных текстов программ. От других текстовых редакторов он отличается очень широким набором возможностей по редактированию текста. К сожалению, за это приходится платить большей сложностью этого редактора по сравнению с другими.

Характерной особенностью vim-а является наличие нескольких режимов работы, из которых основными являются коммандный и режим редактирования. Также очень полезен визуальный режим (он включается при выделении куска текста с помощью специальных комбинаций клавиш). Когда vim только что запущен, он находится в командном режиме, где он реагирует на некоторые команды (например, :q<enter> выходит из редактора), но категорически не хочет вводить в редактируемый буффер какой-либо текст. Для того, чтобы войти в режим редактирования надо нажать одну из нескольких специальных клавиш (например, i), а для выхода из режима редактирования необоходимо нажать Esc (или Ctrl-C).

Основные команды Vim в командном режиме

:q<enter> выход из реактора. Если в файле есть несохранённые изменения, vim откажется завершать работу
:q!<enter> выход из редактора. Vim завершит работу, даже если в файле есть несохранённые изменения.
:w<enter> записать изменённый файл на диск
:wq<enter> записать изменения на диск и выйти из редактора
стрелки движение по тексту
i вставка в текущей позиции курсора

Основные команды Vim в режиме редактирования

Esc Выход в командный режим
Ctrl+n Автодополнение текста. Если всести слово ca, и в тексте уже есть слова cat и camera, то после Ctrl+n vim предложит два варианта дополнения: cat и camera.
Ctrl+p Аналогично Ctrl+n, но движение по списку дополнения в обратную сторону.
Ctrl+w Удалить слово слева от курсора

Некоторые дополнительные команды Vim в командном режиме

a Перейти в режим вставки с позиции, следующей за курсором.
s Удалить символ под курсором и перейти в режим редактирования в его позиции.
x Удалить символ под курсором.
hjkl Каждая из этих клавиш задаёт направление движения курсора. h - влево, j - вниз, k - вверх, l - влево. Эти клавиши удобны тем, кто печатает вслепую. Для остальных вполне подойдут стрелки.
yy Скопировать текущую строку во внутренний буфер обмена vim.
dd Удалить текущую строку и поместить её во внутренний буфер обмена vim.
p Вставить в позиции, следующей за курсором.
P Вставить в позиции курсора.
% Если курсор находится на символе скобки (){}[], после нажатия % он переместится на парную скобку.
v Начать выделение куска текста. После этого его можно скопировать, удалить и изменять уровень отступов.
V Начать выделение блока текста. Характерной особенностью блочного режима выделения является то, что нельзя выделить часть строки текста, этот режим позволяет выделять только блок из нескольких идущих подряд строк.
= Автоматически выровнять отступ текущей строки относительно предыдущей строки.
>> сдвинуть текущую строку вправо
<< сдвинуть текущую строку влево
D Удалить все символы в текущей строке от позиции курсора и до конца строки.
gg перейти в начало файла
G перейти в конец файла
u отменить последнее изменение
Ctrl+r снова применить последнее изменение (если случайно отменено нужное)

Некоторые дополнительные команды Vim в режиме редактирования

/text<enter> искать в редактируемом файле строку text
?text<enter> искать строку текст в редактируемом файле по направлению от позиции курсора к концу файла.
n найти следующее вхождение по последнему шаблону, по которому производился поиск. Поиск идёт в том же направлении, что и предыдущий поиск
* искать слово, находящееся под курсором, далее в файле.
# искать слово под курсором по направлению к началу файла.
``  
`.  

Команды в визуальном и блочном режиме

= Выровнять отступы для выделенного текста. Чтобы выровнять отступы для всего текста, пеместитесь в начало текста с помощью gg, затем начние блочне выделение V, переместитесь в конец текста G, и выровняйте весь файл с помощью =.
> Сдвинуть выделенный текст вправо
< Сдвинуть выделенный текст влево
d Удалить выделенный текст и поместить его в буфер.
y Скопировать выделенный текст в буфер.