Страницы

Поиск по вопросам

пятница, 28 июня 2019 г.

Выделить в текущей строке всё с первого непробельного символа до последнего

Допустим, у меня есть строчка кода с отступом
promocode.discount_amount
и курсор где-нибудь в районе слова discount_amount
Чтобы выделить всё важное на строке, например, для заворачивания в скобки, я набираю
$v^
Уверен, есть более быстрое решение, но никак не могу его найти.


Ответ

Поправка: чтобы переместиться к последнему непробельному символу, надо использовать g_, а не $
В вашем примере сработает viW (inner WORD, см. :help text-objects). Однако, в общем случае, когда в середине строки могут встречаться пробельные символы, это работать не будет. К сожалению в Vim нет стандартного text-object-а для того, что нам нужно.
Тут нам на помощь придут mapping-и. Будем использовать для нашего «объекта» буквосочетание il (inner line). Никто не мешает использовать один символ, но тогда скорее придется пожертвовать соответствующей стандартной командой. Следующий mapping для visual mode позволяет сделать то, что нам нужно:
:vnoremap il :normal! ^vg_
Теперь при нажатии vil будет выделена «важная» часть строки.
Опционально: сейчас il работает только в visual mode. Можно заставить его работать со всеми командами Vim, которые ожидают на вход movement или text-object (d, y, c, и т.д.). Для этого используются mapping-и для Operator-pending mode (см. :help omap-info):
" внимание, в правой части используется mapping il, который мы определили выше :onoremap il :normal vil
Теперь, в частности, yil копирует «важную» часть строки, а dil — удаляет ее.
Подробнее почитать, как и почему это работает можно в:
Главе Operator-Pending Mappings (и след.) в книге Learn Vimscript the Hard Way Статье Creating new text objects Стандартном :help

Комментариев нет:

Отправить комментарий