Удалить все, что находится между двумя скобками в Vim, включая новые строки

#vim #vi

#vim #vi

Вопрос:

Допустим, у меня есть следующий литерал массива python:

 def f():
    arr = [
        1,          
        2,
        3   
    ]  
  

Я хочу удалить все, что находится в скобках, чтобы оно стало таким:

 def f():
    arr = [] 
  

Как я могу сделать это с минимальными командами в vim?


Это некоторые из моих попыток:

  • Использование di] приведет к удалению текста, но не пустых новых строк, оставляя много пробелов, которые мне пришлось бы удалить:

     def f():
        arr = [         
        ]
      
  • Использование da] приведет к удалению новых строк, а также скобок:

     def f():
        arr =
      

Ответ №1:

Вы можете просто сделать:

 ca[[]<Esc>
  

или:

 ca][]<Esc>
  

Смотрите :help text-objects .

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

1. Просто выполнение ci [ сработало лучше для меня. Оставил скобки.

Ответ №2:

Наведя курсор на первую открывающую скобку ( [ ), нажмите V , а затем % . При этом будет выбран блок, к которому вы затем сможете присоединиться J , за которым следует di[ .

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

1. Легко ли сделать это миллион раз?

Ответ №3:

Выберите строки в визуальном режиме ( v ) и используйте J для удаления новых строк. Затем используйте di[ .

Или, если строк много, di[ сначала, после чего вы перемещаете курсор на верхнюю строку, а затем J . Это потенциально оставит пробел между скобками, который необходимо удалить с помощью x .

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

1. Это довольно хорошо. Я могу va] выделить каждую строку между скобками, J чтобы затем объединить, а затем di] удалить содержимое массива. Итак va]Jdi] в целом.

2. Это тоже отличный способ сделать это.

Ответ №4:

Я считаю, что использование ярлыка для форматирования кода экономит много времени

Если вы установите vim красивее, вы могли бы сделать di[ <leader>p

Например, использование средства форматирования в JS означает, что мне не нужно удалять дополнительный интервал, переходить к концу строки для вставки ; или исправлять отступы и т. Д