Wie kann ich einen logischen Block in Vim als Textobjekt behandeln?

351
Sasgorilla

Hier ist eine Situation, in der ich jeden Tag bin:

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

Jetzt möchte ich das .inner_selectorwoanders schneiden und einfügen . Wie kann ich es tun? Ich kann keine Möglichkeit finden, den logischen .inner_selectorBlock mit dem umgebenden Leerzeichen schnell zu löschen . dh das Äquivalent zu dapaber für diesen durch Klammern getrennten Block. Hier sind verschiedene Ideen, in zunehmender Reihenfolge der Frömmigkeit. ( aiund iiZuordnungen erfolgen über das Plugin vim-indent-obj .)

  1. 3Gdai. Das funktioniert fast, lässt aber die schließende Klammer für den .inner_selectorBlock, wo er ist.

  2. 2Gdai. Nicht gut; Dadurch wird der gesamte .outer_selectorBlock gelöscht .

  3. 2Gdii. Dadurch wird der richtige Block gelöscht, nicht jedoch der umgebende Leerraum (dh das Äquivalent von dipstatt dap).

  4. 2Gfals Textobjekt zu behandeln, oder dass es dafür kein Plugin gibt.

2

1 Antwort auf die Frage

1
Camilo Payan

Es gibt ein Textobjekt für geschweifte Klammern, es ist Boder {oder }.

Wenn Sie in den Whitespace hinein gehen, .outer-selectoraber außerhalb .inner-selector, können Sie alles Vi{auswählen, um alles innerhalb der .outer-selectorgeschweiften Klammern auszuwählen .

Ich kann auch nur die .inner-selectorTeile treffen, indem ich nach Vi{innen renne .inner-selectorund dann Verneut treffe, um sie dazu zu zwingen, alle Linien zu ergreifen. Das bringt Sie nicht in den Leerraum, .inner-selectoraber ich dachte, es könnte auch interessant sein.

Danke Camilo! Ich wusste nicht, wie ich erneut V schlagen würde, um die komplette Linie auszuwählen - cooler Trick. (Obwohl ich es nur mit "va Sasgorilla vor 8 Jahren 1