Подтвердить что ты не робот

Удалить из курсора в конец скобки (и т.д.) В vim

Скажем, у меня есть эта строка текста в vim:

(foo bar (baz) qux)
    ^

и мой курсор находится на промежутке между foo и bar, как указано. Я часто нахожу, что в подобных ситуациях я хочу удалить всю правую часть внешнего выражения в скобках (то есть справа от моего курсора), оставив левую сторону неповрежденной. То есть, я бы хотел в итоге:

(foo)

Обычно, я бы выполнил это с помощью dt) ( "delete до )" ), но добавление вложенной вставки вставки усложняет вещи: эта команда оставит меня с (foo) qux). Я мог бы также использовать d2t), но я бы предпочел не вручную подсчитывать количество вложенных круглых скобок. Я мог бы также использовать di), но это удаляет всю внутреннюю часть круглых скобок, оставляя меня с ().

Существует ли движение vim с балансировкой значений i - и a -модифицированных движений, но это относительно текущая позиция курсора?

4b9b3361

Ответ 1

Вы можете использовать движение ]) с d.

d])

Ответ 2

mxF(%d`x

Разрушение:

mx

Установите отметку x (выберите любую понравившуюся вам букву)

F(

Найти предыдущий символ (

%

Переход к совпадению )

d`x

Удалить здесь, чтобы отметить x

Это работает для вашего конкретного случая; Я не уверен, насколько это вообще. Если предыдущий ( не находится в текущей строке, используйте ?(<return>, а не F(.

ИЗМЕНИТЬ:
Я не упоминал d]), потому что не знал об этом.

Мое решение не будет работать для этого случая:

( (before) foo (after) )
              ^

потому что он возвращается к ближайшему (, а не к ближайшему окружению (.