Традиционно: начало эпопеи, начало 2 главы, предыдущая часть.
Итак, перейдём к более интересным вещам, упрощающим разработку. Это, наверное, будет не особо интересно тем, кто не пишет под web, а вот тем, кто пишет - скорее всего будет весьма интересно.
Позвольте представить - Emmet
Если коротко, то это плагин, который позволяет на основе краткой записи создать весьма себе удобную html разметку. И живёт он тут. Ну что тянуть, устанавливаем его и проверяем, что умеет.
Работать с ним довольно просто: вводишь шаблон (о них позже) и жмёшь комбинацию ctrl+y, (да, в конце надо нажать запятую).
Выглядит это примерно вот так:
Если вы не умеете пользоваться emmet ещё, но хотели бы научиться - вот документация. Там всё довольно просто.
Попробуем создать небольшую структуру (.my-class>span#id${Span-titl$}):
Как видите, он довольно легко превратился во вполне себе читаемый 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 строку.
Сперва я хотел что-то для прокрутки при помощи мышки, но потом решил, что это, наверное, не совсем то, что нужно в консольном редакторе.
Ну и зная общее количество строк - можно прикинуть, на какую перейти, чтобы оказаться примерно в нужном месте.
Макросы
Эту тему я сознательно откладывал на самый конец просто потому, что она самая многобещающая.
Работает это так:
- Включаешь запись макроса
- Выполняешь какие-то действия
- Останавливаешь запись макроса
- Запускаешь макрос - и действия повторяются
Это особенно удобно, когда надо обработать большой набор данных, выполнив над всеми одинаковую процедуру. Например, в каждой строке убрать в конце точку с запятой. С мультикурсором это выполнить нетрудно, но если строк очень много - это становится проблематичным. Так что - макросы. Приступим.
Чтобы запустить запись макроса, надо набрать команду qa, где a - это регистр, в который надо записать макрос. Регистров много, можно использовать команды q1, qd или qt для записи, если вам нужно много макросов. Кстати, если набрать команду :registers - то можно увидеть заполненные и используемые регистры. Я, например, у себя увидел макросы для emmet и мультикурсоров.
Когда запись макроса началась, можно увидеть соответствующее уведомление в командной строке:
После того, как запись началась, можно делать любые действия: редактировать текст, применять команды, копировать и вставлять. Главное помнить, что все действия записываются относительно, а не абсолютно. То есть, если вы сместились на N строчек вверх и скопировали оттуда текст, а затем вставили его в строку, то при выполнении макроса на следующей строке - произойдёт смещение на те же самые N строк и скопируется то, что там будет. Выполнение макроса будет происходить, так же, с того места, где находится курсор. Иными словами, позиционирование критично.
Когда все действия выполнены - надо закончить запись - команда q.
Теперь можно использовать @a запустит записанный макрос a, а @@ запустит последний запущенный макрос.
Более того, можете почитать эту инструкцию. Там описано, что вы можете составлять макросы и записывать их в файл конфигурации и даже привязывать к ним горячие клавиши, чтобы потом выполнять. Но я этого делать, конечно, не буду.
Ещё одна крайне важная деталь. Вам может потребоваться запустить макрос много раз. Скажем, 33. И это можно легко сделать. Достаточно ввести команду 33@a - для вызова макроса, записанного в регистр а 33 раза.
Тут я использовал копирование индекса в каждой строке и вставлял его внутрь id. Как видно, я записываю действия над 1 строкой, а ко всем остальным применяю их автоматически.
Промежуточные итоги
На этом вторую часть можно заканчивать. Надо будет дополнительно оценить, какую функциональность я использую, а какую нет и, возможно, дополнить. Но что совершенно определённо надо сделать - так это свести в таблицу то, что я описал и добавить туда некоторые стандартные комбинации, которые хорошо бы знать, но вниманием я их обошёл.