Как фильтровать визуальный выбор?

Предположим, что у нас есть хороший текст:

Hello world

и мы выбираем world в визуальном режиме. Затем мы могли бы фильтровать визуальный выбор с помощью блестящей команды, подобной этой:

:'<,'>!echo foobar

Однако это заменит всю строку foobar, а не только world. Почему это, и как мы можем просто заменить world?

Ответ 1

Команда фильтра :! всегда работает на всех строках (эта старая, как исходная vi, вложение команд Ex, начинающихся с :), а диапазон '<,'> также указывает только строки.

Вы можете использовать почтенный vis plugin для достижения вашего результата; он предлагает команду :B, которая ограничивает следующую команду визуально выбранным текстом.

:'<,'>B !echo foobar

Плагин работает для всех видов команд Ex; Тем не менее, для :substitute в пределах выделения вы также можете использовать специальный \%V атом.