Vim для начинающих

Этот пост есть крайне вольный перевод интерактивного учебника OpenVim.Com. После его прочтения вы получите необходимые знания, чтобы приручить этот чудный редактор. Рекомендую при прочтение сразу пробовать ту или иную команду в действии, а после, изучить коротенькую статью от хостинг-провайдера Beget: «Основы работы с редактором VIM». Дальше вы сами поймёте что делать ...

Поехали! ©

Два режима: командный и режим редактирования

Как понятно из заголовка, Vim имеет два основных режима: командный и режим редактирования.


Командный режим (normal)
это режим, в котором мы вводим команды, передвигаемся по тексту и манипулируем им (текстом). Командный режим могут называть «нормальным», «обычным» и ещё как-нибудь, но в рамках этого поста он будет называться командным.
Режим редактирования (insert)
это режим, в котором мы пишем текст как в обычном текстовом редакторе. Режим редактирования могут называть «режимом вставки», «режимом ввода» и ещё как-нибудь, но в рамках этого поста он будет называться режимом редактирования.

Текущий режим, кроме командного, показывается в левом нижнем углу, вот так:

-- INSERT --

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


Чтобы перейти в режим редактирования (insert), нужно нажать i

Чтобы перейти в командный режим, нужно нажать Esc.


Внимание!

Все команды / клавиши, которые будут описываться далее, работают только в командном режиме, так как в режиме редактирования Vim представляет собой обычный текстовый блокнот редактор.

Также учтите, что при вводе команд, раскладка клавиатуры должна быть английской.

Это чтобы вы не думали: «Почему, блин, не работает?».

Передвижение курсора

Помимо использования стандартных стрелок, в Vim можно передвигать курсор с помощью следующих клавиш:

  • h — влево;
  • j — вниз;
  • k — вверх;
  • l — вправо.

Это наверняка сделано для удобства, так как в Vim'е мы всё делаем с помощью клавиатуры и при печати в две руки это весьма, должно быть, удобно.

Передвижение по словам

Для передвижения по словам можно использовать следующие клавиши (регистр не важен):

  • w (word) — переместить курсор на первый символ следующего слова;
  • e (end) — переместить курсор на последний символ слова (текущего или следующего);
  • b (begin) — переместить курсор на первый символ слова (текущего или предыдущего).

Про клавишу e ... Если курсор находится в слове, но не на последнем символе, то при нажатии e он переместиться к концу этого слова. Если курсор находится на последнем символе слова, то он переместится на последний символ следующего слова.

Про клавишу b ... Она работает так же, как и e, только наоборот: базируясь на начале слова.

Передвижение по нескольким словам сразу

Представим, что нам нужно переместиться на три слова вперёд. Можно нажать 3 раза клавишу w, но ещё можно сделать и так: нажать клавишу 3, а затем w.

С остальными клавишами навигации по словам (e и b) это тоже работает ...

Да и чего уж таить ☺: это работает и с клавишами передвижения курсора по символам (h, j, k, l) и многими другими командами, которые будут описаны далее. Пример ... Допустим, мы хотим переместить курсор на 9 символов вперед. Можно нажать 9 раз клавишу l («эль») или , а можно и пойти вышеописанным путём: нажать клавишу 9, а затем l («эль») или .

Размножение текста

Представим, что мы хотим напечатать 30 символов дефиса (-). Как вы понимаете, мы не будем нажимать 30 раз клавишу - и при этом считать, чтобы получить их точное количество. Мы сделаем так:

  1. нажмём клавишу 30, а если быть точнее, то клавиши 3 и 0 ☺;
  2. затем нажмём клавишу i
  3. после нажмём -;
  4. и завершим всё это Esc'ом.

Что мы тут понажимали?

Мы ввели такую комбинацию:

30 → i → - → Esc

Разберём её:

  1. сперва мы ввели нужно количество повторений (число): 3 → 0 = 30;
  2. затем вошли в режим редактирования (insert): i;
  3. после, указали то, что мы хотели бы повторить (в данном случае дефис): -;
  4. и завершили ввод команды, выйдя в командный режим: Esc.

Думаю понятно, что вместо дефиса (-), мы могли напечатать слово или несколько слов, а затем выйти в командный режим (с помощью Esc), и Vim размножил бы тот текст, который мы ввели.

На всякий случай ещё раз по-русски ... Мы говорим Vim'у: 30 раз, вставь (i, insert), вотэтавот (текст), и всё (вышли в командный режим, нажав Esc).

Поиск символа

Давайте найдём следующую, относительно текущего положения курсора, букву «z»:

  1. жмём f (find);
  2. затем — z.

Как вы догадались, чтобы найти предыдущую букву «z», нам следует сделать так: F → z.

Мы находим символ и в тоже время перемещаем курсор к нему. Это так, к сведению.

Ну и как вы поняли ☺, мы можем использовать числа ... Найдёмс следующую третью букву «z»:

  1. жмём 3;
  2. затем — f;
  3. после — z.

Переход к соответствующей скобке

Представим, что у нас есть текст со скобками: (), {}, []; и что наш курсор находится на открывающей скобке, например, на открывающей фигурной: {. Мы хотим переместиться к соответствующей закрывающей скобке — вводим процент (%, Shift+5) и мы там ☺.

Почему выбрали процент?.. Видимо, потому что над слешем (/) и под ним одинаковые кружки: ◦.

Когда мы находимся на открывающей скобке и вводим процент, то мы перемещаем курсор на соответствующую закрывающую скобку. Когда мы находимся на закрывающей скобке и нажимаем процент, то мы перемещаем курсор на соответствующую открывающую скобку.

Переход к началу и концу строки

Чтобы перейти к началу строки, нужно нажать 0 (ноль). Типа первый символ, в программировании ведь всё начинается с нуля.

Чтобы перейти к концу строки, нужно нажать $ (доллари © ☺). Как и регулярных выражениях.

Поиск текущего слова (слова под курсором)

Чтобы найти следующее текущее слово, то есть слово, на котором сейчас находится курсор, нужно нажать *.

Чтобы найти предыдущее текущее слово, нужно нажать #.

Переход к началу / концу текста и переход к указанной строке

Чтобы перейти к началу текста (в начало файла), нужно нажать 2 раза клавишу g.

Чтобы перейти к концу текста (в конец файла), нужно нажать G.

Чтобы перейти к определённой строке, нужно набрать номер строки, а затем нажать G.

Букву «G» выбрали, видимо, потому что что-то типа «go».

Поиск текста

Для поиска текста нужно нажать / (слеш), ввести искомый текст и нажать Enter.

Поиск осуществляется с учётом регистра.

Чтобы перейти к следующему совпадению, нужно нажать n; к предыдущему — N.

Чтобы искать по регулярному выражению, нужно проэкранировать спецсимволы регулярных выражений обратным слешем (\). То есть, например, такой шаблон: (a|b); в Vim'е будет выглядеть так: \(a\|b\).

Вставка новой строки

Чтобы вставить новую строку после строки, на которой сейчас находится курсор, нужно нажать o.

Чтобы вставить новую строку перед строкой, на которой сейчас находится курсор, нужно нажать O.

После вставки новой строки Vim переходит в режим редактирования.

Удаление символа под курсором и слева от него

Чтобы удалить символ под курсором, нужно нажать x или Delete.

Чтобы удалить символ слева от курсора, нужно нажать X.

Думаю, вы догадались, как можно удалить несколько символов сразу ☺. Даю подсказку: сначала вводим число, а затем нажимаем x или X (в зависимости от того, в каком направлении мы хотим удалять символы).

Замена символа под курсором не переходя в режим редактирования

Чтобы заменить символ под курсором и при этом не переходить в режим редактирования, нужно нажать r и ввести нужный символ.

Удаление

Для удаления строки под курсором, нужно нажать 2 раза d.

Команда d на самом деле не удаляет контент, а вырезает его; то есть его позже можно вставить в нужное место с помощью команды p. Вырезанная строка вставится после строки (на новой строке), на которой находится курсор.

Как вы догадались ☺, эту команду можно комбинировать командами передвижения по словам w, e и b. А ещё и с количеством. Например, чтобы удалить несколько последовательностей, нужно:

  1. нажать d;
  2. затем ввести число;
  3. после нажать одну из клавиш: w, e или b.

Повторение последней команды

Для повторения последней команды, нужно нажать . (точку).

Визуальный режим

В Vim есть ещё один интересный режим: визуальный (visual). В этом режиме мы можем выделять текст, чтобы потом с ним что-нибудь сделать. Давайте попробуем ...

Сперва немного логики действий ... Допустим, мы хотим выделить кусок текста и удалить его; так мы работаем:

  1. устанавливаем курсор начало текста, который нужно удалить;
  2. переходим в визуальный режим;
  3. с помощью уже известных нам команд навигации (h, j, k, l, w, e и b) выделяем текст;
  4. удаляем, нажав d.

Чтобы перейти в визуальный режим, как не трудно догадаться по слову «visual», нужно нажать v.

Выход и сохранение

Чтобы сохранить изменения, нужно в набрать :w; то есть сначала нажать :, затем ввести w (или write) и нажать Enter.

Чтобы выйти из Vim, нужно ввести :q (или :quit).

Чтобы сохранить и сразу выйти, как вы поняли, можно набрать :wq.

Vim настойчив и он не даст вам уйти с помощью команды :q, если вы не сохранили изменения; однако если вы введёте :q! (то есть :q и !), то он вас выпустит без записи изменений в файл.

Отмена и повтор действий

Чтобы отменить последнее действие, нужно нажать u.

Чтобы повторить отменённое действие, нужно нажать Ctrl+R.

Вызов справки

Чтобы вызвать справку, нужно ввести команду :h (или :help).

Чтобы закрыть справку, нужно набрать :q.

Чтобы вывести справку по конкретной команде, нужно набрать :h и через пробел ввести команду. Например, команда к переходу к справке по d и dd соответственно будет выглядеть так:

:h d
:h dd

Вместо послесловия

Дополнительного материала в интернете хватает. На Хабре вроде неплохие статьи были. Так что дерзайте.

Не забыли про статью от Beget'а, о которой я говорил в начале поста?