Найти тему
Сделай игру

NVIM он же NeoVim для разработчика. Часть 2.4

Оглавление

Традиционно: начало эпопеи, начало 2 главы, предыдущая часть.

Итак, перейдём к более интересным вещам, упрощающим разработку. Это, наверное, будет не особо интересно тем, кто не пишет под web, а вот тем, кто пишет - скорее всего будет весьма интересно.

Позвольте представить - Emmet

Если коротко, то это плагин, который позволяет на основе краткой записи создать весьма себе удобную html разметку. И живёт он тут. Ну что тянуть, устанавливаем его и проверяем, что умеет.

Работать с ним довольно просто: вводишь шаблон (о них позже) и жмёшь комбинацию ctrl+y, (да, в конце надо нажать запятую).

Выглядит это примерно вот так:

Генерация HTML на основании шаблонов emmet
Генерация HTML на основании шаблонов emmet

Если вы не умеете пользоваться emmet ещё, но хотели бы научиться - вот документация. Там всё довольно просто.

Попробуем создать небольшую структуру (.my-class>span#id${Span-titl$}):

Пример использования class, id и нумерованного перечисления
Пример использования class, id и нумерованного перечисления

Как видите, он довольно легко превратился во вполне себе читаемый HTML. Вообще, в описании есть довольно много возможностей (читать тут), однако они не то, чтобы все работают как хотелось бы. Но это, по большому счёту, и не особо нужно: указанная выше модель взаимодействия и так весьма эффективна.

Передвижение строк

Это не слишком часто используемая функциональность, когда строчку надо поднять вверх или спустить вниз. Чаще всего это требуется проделать сразу с несколькими строками, но в NVIM это проделать без глубокого проникновения в способы и средства управления текстом сделать не получится.

Но можно двигать по одной строчке (это не так привычно, но тоже вполне себе часто используемая функциональность).

Чтобы сдвинуть строку на 1 позицию вверх, используется команда :m-2, а чтобы сдвинуть на 1 позицию вниз :m+1 (не спрашивайте, почему наверх -2 - там своя логика).

Но это, конечно, неудобно. Привяжем кнопки:

" сдвинуть строку вверх
nnoremap <S-Down> :m+1<CR>
" сдвинуть строку вниз
nnoremap <S-Up> :m-2<CR>

Shift+вниз - сдвинет строку вниз, shift+вверх - поднимет её наверх. Всё просто.

Смещение строки
Смещение строки

Быстрая прокрутка страницы

Это когда надо быстро пролистать. Мы привыкли использовать PageUp/PageDown и они работают. Но есть альтернатива:

  • ctrl+f / ctrl+b - постраничное листание вперёд / назад;
  • ctrl+d / ctrl+u - листание по пол-страницы вперёд / назад;
  • :10 - перейти сразу на 10 строку.

Сперва я хотел что-то для прокрутки при помощи мышки, но потом решил, что это, наверное, не совсем то, что нужно в консольном редакторе.

Ну и зная общее количество строк - можно прикинуть, на какую перейти, чтобы оказаться примерно в нужном месте.

Макросы

Эту тему я сознательно откладывал на самый конец просто потому, что она самая многобещающая.

Работает это так:

  1. Включаешь запись макроса
  2. Выполняешь какие-то действия
  3. Останавливаешь запись макроса
  4. Запускаешь макрос - и действия повторяются

Это особенно удобно, когда надо обработать большой набор данных, выполнив над всеми одинаковую процедуру. Например, в каждой строке убрать в конце точку с запятой. С мультикурсором это выполнить нетрудно, но если строк очень много - это становится проблематичным. Так что - макросы. Приступим.

Чтобы запустить запись макроса, надо набрать команду qa, где a - это регистр, в который надо записать макрос. Регистров много, можно использовать команды q1, qd или qt для записи, если вам нужно много макросов. Кстати, если набрать команду :registers - то можно увидеть заполненные и используемые регистры. Я, например, у себя увидел макросы для emmet и мультикурсоров.

Когда запись макроса началась, можно увидеть соответствующее уведомление в командной строке:

Записываю в регистр z
Записываю в регистр z

После того, как запись началась, можно делать любые действия: редактировать текст, применять команды, копировать и вставлять. Главное помнить, что все действия записываются относительно, а не абсолютно. То есть, если вы сместились на N строчек вверх и скопировали оттуда текст, а затем вставили его в строку, то при выполнении макроса на следующей строке - произойдёт смещение на те же самые N строк и скопируется то, что там будет. Выполнение макроса будет происходить, так же, с того места, где находится курсор. Иными словами, позиционирование критично.

Когда все действия выполнены - надо закончить запись - команда q.

Теперь можно использовать @a запустит записанный макрос a, а @@ запустит последний запущенный макрос.

Более того, можете почитать эту инструкцию. Там описано, что вы можете составлять макросы и записывать их в файл конфигурации и даже привязывать к ним горячие клавиши, чтобы потом выполнять. Но я этого делать, конечно, не буду.

Ещё одна крайне важная деталь. Вам может потребоваться запустить макрос много раз. Скажем, 33. И это можно легко сделать. Достаточно ввести команду 33@a - для вызова макроса, записанного в регистр а 33 раза.

Применение макросов
Применение макросов

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

Промежуточные итоги

На этом вторую часть можно заканчивать. Надо будет дополнительно оценить, какую функциональность я использую, а какую нет и, возможно, дополнить. Но что совершенно определённо надо сделать - так это свести в таблицу то, что я описал и добавить туда некоторые стандартные комбинации, которые хорошо бы знать, но вниманием я их обошёл.