Предыдущая часть - тут, начало второй части - тут, начало всей темы - здесь.
Хотел затронуть тут следующую, весьма непростую тему "обёртывания" текста, однако, покопавшись ещё в описаниях плагина vim-visual-multi, решил добавить ещё пару слов.
Для начала, у него есть 2 режима работы: "курсорный" и "расширенный". Курсорный - это то же самое, что командный режим работы, расширенный - это примерно как визуальный режим. После назначения нескольких курсоров переключаемся между ними кнопкой tab. Проще говоря, разные режимы позволяют по-разному обрабатывать сочетания клавиш. Просто имейте это в виду.
Я немного поразбирался с возможностями и вынужден констатировать, что работает далеко не всё (то ли я делаю что-то не то, то ли тот факт, что у меня neovim, а не vim оказывает влияние).
Возможно, вы уже знаете эти кнопки в командном режиме, но напомнить их будет не лишним, т.к. они работают и в режиме мультикурсора:
- w - переместить курсор в начало следующего слова, разделённых спецсимволами;
- W - переместить курсор в начало следующего слова или фразы, разделённых пробелами;
- b - переместить курсор в начало предыдущего слова;
- 0 - (ноль) - вернуться в самое начало строки;
- ^ - вернуться в начало 1 слова строки (если слева есть отступы, то курсор будет на начале слова);
- $ - перейти в самый конец строки;
- % - перейти к закрытию скобки;
- o - перемещаться между началом и концом выделения;
- D - удалить часть строки от курсора до конца;
- ^d - удалить часть строки, от курсора до начала;
- A - перейти в конец строки и начать редактирование;
- I - перейти в начало строки и начать редактирование;
- . - повторить последний набор действий (например, ввод текста в конце строки);
- \\R - снять выделение с каждого второго выделенного фрагмента;
- \\C - сменить размер букв (с большого на маленький, с маленького на большой, инвертировать и прочее - в командной строке есть подсказки);
Чуть ниже я буду рассказывать о плагине "обёртывания" - он позволяет выделить какой-то текст или взять строку - и обернуть её, скажем, кавычками или скобками. По нажатию S ( в режиме мультикурсора можно обернуть выделение в скобки (тут можно даже html тэги использовать, например <p>). Но изначально надо плагин поставить. Выглядеть это будет так:
"Обёртывание" текста
Эта штука, поначалу ломающая веру в человечество, иначе непонятно, какому злодею пришло в голову создать столь недружелюбный к пользователю способ обёртывания.
Для начала установим вот этот плагин, а дальше надо просто запомнить несколько сочетаний:
- cs... - заменить одну "обёртку" на другую;
- ds... - удалить обёртку
- ys... - установить обёртку.
Как только поймёте это - сразу станет всё проще. Описание смотрите на страничке плагина, а пока короткая инструкция по вводу команд:
- команда вводится в командном режиме
- команда состоит из нескольких блоков: тип, область применения, символ 1, символ 2
- в некоторых командах символ 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.