Вот ситуация, в которой я нахожусь каждый день:
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 .)
3Gdai
. Это почти работает, но оставляет закрывающую скобку для блока.inner_selector
где он находится.2Gdai
. Не хорошо; это удаляет весь блок.outer_selector
.2Gdii
. Это удаляет правильный блок, но не окружающий пробел (т. Е. Эквивалентdip
вместоdap
).2Gf{d%
. Перейти к{
с помощьюf{
, удалить в соответствующую фигурную скобку (d%
). Это удаляет текст из фигурной скобки в строке 2 до соответствующей ему фигурной скобки, но оставляет текст «.inner_selector
».2Gf{v%okd
. Начинается так же, как (4), затем перейдите к началу выделенного текста (o
), растяните на одну строку вверх (k
) и удалите (d
). То же, что (3) выше.3Gvaikojjd
. Выделите текст, выберите одну дополнительную строку вверх (k
), перейдите к нижней части выбранной области (o
), выберите две строки вниз (jj
), удалите (d
). Это работает.
Я могу определить раскладку клавиатуры для последнего и покончить с этим, но прежде чем я это сделаю, я хочу быть уверен, что здесь что-то не пропущено. Поскольку это такая распространенная конструкция кода во многих языках, я удивлен, что так трудно трактовать text { /* multiple lines /* }
как текстовый объект или что для него нет плагина.