Как я могу рассматривать логический блок как текстовый объект в Vim?

299
Sasgorilla

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

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как текстовый объект, или что для него нет плагина.

2

1 ответ на вопрос

1
Camilo Payan

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

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

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

Спасибо Камило! Я не знал о том, чтобы снова нажать V, чтобы выбрать полную строку - крутой трюк. (Хотя я заставил его работать только с `va {V`, а не с` vi {V`.) Вы правы, первый метод отлично работает в моем примере; однако, это не будет работать, если у меня есть несколько `.inner_selectors` и я хочу удалить только один. Sasgorilla 8 лет назад 1