2

Вот ситуация, в которой я нахожусь каждый день:

0  .outer_selector {
1  
2   .inner_selector {
3     margin: 0;
4     padding: 0;
5
6     input { display: none; }
7   }
8
9  } 

Теперь я хочу вырезать и вставить .inner_selector другом месте. Как мне это сделать? Я не могу найти способ быстро удалить логический блок .inner_selector с окружающими его пробелами; то есть эквивалент dap но для этого блока с разделителями-скобками. Вот различные идеи, в порядке возрастания скованности. (Отображения ai и ii осуществляются через плагин vim-indent-obj .)

  1. 3Gdai . Это почти работает, но оставляет закрывающую скобку для блока .inner_selector где он находится.

  2. 2Gdai . Не хорошо; это удаляет весь блок .outer_selector .

  3. 2Gdii . Это удаляет правильный блок, но не окружающий пробел (т. Е. Эквивалент dip вместо dap).

  4. 2Gf{d% . Перейти к { с помощью f{ , удалить в соответствующую фигурную скобку (d%). Это удаляет текст из фигурной скобки в строке 2 до соответствующей ему фигурной скобки, но оставляет текст « .inner_selector ».

  5. 2Gf{v%okd . Начинается так же, как (4), затем перейдите к началу выделенного текста (o), растяните на одну строку вверх (k) и удалите (d). То же, что (3) выше.

  6. 3Gvaikojjd . Выделите текст, выберите одну дополнительную строку вверх (k), перейдите к нижней части выбранной области (o), выберите две строки вниз (jj), удалите (d). Это работает.

Я могу определить раскладку клавиатуры для последнего и покончить с этим, но прежде чем я это сделаю, я хочу быть уверен, что здесь что-то не пропущено. Поскольку это такая распространенная конструкция кода во многих языках, я удивлен, что так трудно трактовать text { /* multiple lines /* } как текстовый объект или что для него нет плагина.

1 ответ1

1

Есть текстовый объект для фигурных скобок, это B или { или } .

Если вы перейдете к пробелу в .outer-selector но из .inner-selector вы увидите, что он выделяет все с помощью Vi{ чтобы выделить все внутри фигурных скобок .outer-selector .

Я также могу поразить только части .inner-selector , запустив Vi{ inside .inner-selector а затем снова нажав V чтобы он занял все полные строки. Это не даст вам пробела вокруг .inner-selector но я подумал, что это может быть также интересно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .