Удалить от курсора до конца круглого (и т. Д.) В vim - PullRequest
16 голосов
/ 25 августа 2011

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

(foo bar (baz) qux)
    ^

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

(foo)

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

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

Ответы [ 2 ]

14 голосов
/ 25 августа 2011

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

d])
3 голосов
/ 25 августа 2011
mxF(%d`x

Разбивка:

mx

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

F(

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

%

Перейти к соответствию )

d`x

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

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

EDIT
Я не упомянул d]), потому что я не знал об этом.

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

( (before) foo (after) )
              ^

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

...