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

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

Оглавление

Предыдущая часть - тут, начало второй части - тут, начало всей темы - здесь.

Хотел затронуть тут следующую, весьма непростую тему "обёртывания" текста, однако, покопавшись ещё в описаниях плагина vim-visual-multi, решил добавить ещё пару слов.

Для начала, у него есть 2 режима работы: "курсорный" и "расширенный". Курсорный - это то же самое, что командный режим работы, расширенный - это примерно как визуальный режим. После назначения нескольких курсоров переключаемся между ними кнопкой tab. Проще говоря, разные режимы позволяют по-разному обрабатывать сочетания клавиш. Просто имейте это в виду.

Я немного поразбирался с возможностями и вынужден констатировать, что работает далеко не всё (то ли я делаю что-то не то, то ли тот факт, что у меня neovim, а не vim оказывает влияние).

Возможно, вы уже знаете эти кнопки в командном режиме, но напомнить их будет не лишним, т.к. они работают и в режиме мультикурсора:

  • w - переместить курсор в начало следующего слова, разделённых спецсимволами;
  • W - переместить курсор в начало следующего слова или фразы, разделённых пробелами;
  • b - переместить курсор в начало предыдущего слова;
  • 0 - (ноль) - вернуться в самое начало строки;
  • ^ - вернуться в начало 1 слова строки (если слева есть отступы, то курсор будет на начале слова);
  • $ - перейти в самый конец строки;
  • % - перейти к закрытию скобки;
  • o - перемещаться между началом и концом выделения;
  • D - удалить часть строки от курсора до конца;
  • ^d - удалить часть строки, от курсора до начала;
  • A - перейти в конец строки и начать редактирование;
  • I - перейти в начало строки и начать редактирование;
  • . - повторить последний набор действий (например, ввод текста в конце строки);
  • \\R - снять выделение с каждого второго выделенного фрагмента;
  • \\C - сменить размер букв (с большого на маленький, с маленького на большой, инвертировать и прочее - в командной строке есть подсказки);

Чуть ниже я буду рассказывать о плагине "обёртывания" - он позволяет выделить какой-то текст или взять строку - и обернуть её, скажем, кавычками или скобками. По нажатию S ( в режиме мультикурсора можно обернуть выделение в скобки (тут можно даже html тэги использовать, например <p>). Но изначально надо плагин поставить. Выглядеть это будет так:

Многочисленное "обворачивание" выделений скобками или тэгами
Многочисленное "обворачивание" выделений скобками или тэгами

"Обёртывание" текста

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

Для начала установим вот этот плагин, а дальше надо просто запомнить несколько сочетаний:

  1. cs... - заменить одну "обёртку" на другую;
  2. ds... - удалить обёртку
  3. ys... - установить обёртку.

Как только поймёте это - сразу станет всё проще. Описание смотрите на страничке плагина, а пока короткая инструкция по вводу команд:

  1. команда вводится в командном режиме
  2. команда состоит из нескольких блоков: тип, область применения, символ 1, символ 2
  3. в некоторых командах символ 2 не используется;

Области применения:

  • w - слово, от позиции курсора, до конца;
  • iw - слово целиком, независимо от позиции курсора;
  • 3w - 3 слова, от позиции курсора, до конца;
  • 3iw - слова целиком, независимо от позиции курсора;
  • s - строка целиком;

Для начала несколько примеров установки обёртывания:

  • ysw( - обернуть часть слова от положения курсора до конца слова скобками с пробелами: ab*cd -> ab( cd ) | * - курсор;
  • ysiw) - тут будет обёрнуто всё слово целиком (iw) и скобки будут добавлены без пробелов: ab*cd -> (abcd) | * - курсор;
  • yss{ - обернуть угловыми скобками всю строку: abc* dsf -> { abc dsf };
  • yiw<p> - обернуть слово html-тэгом <p>: tit*le -> <p>title</p>;

Замена обёртывания (для примера, будем менять " на {):

  • cs"{ - заменить кавычки на фигурные скобки ("AAA" -> { AAA });
  • cst! - заменить теги вокруг строки на ! (<p>123</p> -> !123!);

Удаление обёртки:

  • ds{ - удалить обётывание строки фигурными скобками.
Пример использования
Пример использования

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

Ctrl+Enter

Довольно удобный приём, когда жмёшь в процессе редактирования строки ctrl+enter - приводит к созданию строки снизу и переводу туда курсора. Надо сказать, это я использую довольно часто. Но вот в NVIM это выполнить можно нажав кнопку o в командном режиме.

Сворачивание кода

Это довольно удобный функционал, когда часть документа, которая не используется в настоящий момент, просто сворачивается и не занимает экран. И подходящий шаблон я нашёл: nvim-ufo. Однако есть и встроенные возможности для свёртывания кода, а для плагина, что я упомнянул, потребуется ставить ещё один менеджер плагинов - Packer.nvim.

Итак, про сворачивание можно почитать тут. Если коротко, то есть несколько способов сворачивать код: manual (по умолчанию), indent, expr, marker, syntax, diff.

Я выберу indent - сворачивание по принципу отступов. Привычно. Прочитать про управление можно тут, а я продолжу. Дополню свой файл конфигурации следующими строчками:

set foldmethod=indent
set shiftwidth=4

Что это значит: это значит, что код будет сворачиваться по принципу отступа размером 4 пробела. Каждые 4 пробела - один уровень.

  • zM - свернёт все функции в их сложенные версии
  • zr - развернёт первый уровень свёртывания, но не вложенные
  • zR - развернёт все уровни
  • zo / zO - развернуть 1 уровень / все уровни на курсоре
  • zc / zC - cвернуть 1 уровень / все уровни на курсоре

Фух, ну и намучился я с этими отступами. Да и вообще, с NVIM`ом: те простые вещи, к которым давно уже привык, внезапно, перестали работать как привычно. Особенно тяготит работа с буфером обмена. Более того, они стали требовать запоминания куда больше комбинаций на все случаи жизни. Когда закончу все эти статьи - соберу всё в одну таблицу и приколочу в золочёной рамке на стену до тех пор, пока не выучу.

Ну ничего, это просто момент слабости. Оставайтесь с нами. Сейчас мы зальём чистейший спирт в баки нашего звездолёта и устремимся к покорению новых вершин neovim.