Kun je tussen haakjes in vi/vim pakken of verwijderen?

Gezien deze regel code in C:

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));

Is er een manier om het eerste vetgedrukte haakje naar het overeenkomende haakje te verwijderen of eruit te trekken? Ik dacht aan df), maar daarmee kom je pas net na de 9.0.

Is er een vergelijkbare manier om vim alles tussen bijpassende beugels te laten pakken, ongeacht nieuwe regels?


Antwoord 1, autoriteit 100%

Hoe zit het met dibof di(.

Het verwijdert het innerlijke(…) blok waar de cursor staat.

Ik ben dol op tekstobjectbewegingen en selecties!


Antwoord 2, autoriteit 71%

Verschillende bewegingen: %

Het %commandospringt naar de wedstrijd van het item onder de cursor. Plaats de cursor op het openende (of sluitende) haakje en gebruik y%om te rukken of d%om alles te verwijderen, van de cursor tot het overeenkomende haakje.

Dit werkt omdat %een “bewegingscommando” is, dus het kan overal worden gebruikt waar vim zo’n commando verwacht. Van :help y:

["x]y{motion}       Yank {motion} text [into register x].  When no
                    characters are to be yanked (e.g., "y0" in column 1),
                    this is an error when 'cpoptions' includes the 'E'
                    flag.

Standaard bevat “item” haakjes, accolades, haakjes, opmerkingen in C-stijl en verschillende precompiler-instructies (#ifdef, enz.).

Er is een plug-in voor “extended % matching” die je kunt vinden op de Vim-startpagina.

Je kunt de documentatie over %en gerelateerde bewegingscommando’s lezen door :help various-motionsin opdrachtmodus.

object-select

Er is nog een reeks bewegingsopdrachten die u in de visuele modus kunt gebruiken om verschillende tekstobjecten te selecteren.

Om uw specifieke probleem op te lossen, doet u het volgende:

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                   ^

Stel dat je cursor op ^staat. Voer de volgende volgorde in om het onderdeel te selecteren dat u zoekt:

v2a)

Eerst gaat vnaar de visuele modus, daarna geeft u aan dat u 2niveaus van haakjes omhoog wilt gaan. Ten slotte selecteert de a)“een blok”. Daarna kunt u dof xgebruiken om te verwijderen, enz.

Als u de buitenste haakjes niet wilt opnemen, kunt u in plaats daarvan “binnenste blok” gebruiken:

v2i)

Zie :help object-selectvoor de volledige lijst met gerelateerde commando’s.


Antwoord 3, autoriteit 18%

Als u alles tussen haakjes wilt verwijderen, kunt u altijd di(en zijn afgeleiden gebruiken.

Opmerking:

Zoals @porglezomb in zijn opmerking suggereerde, kun je a(“samen met”) gebruiken in plaats van i(“binnen”) om de haakjes op te nemen. Dus het gebruik van da(verwijdert alles binnen (en )inclusief (en ).

Tekst verwijderen tussen het onmiddellijke buitenste paar haakjes:

Dus voor deze regel code

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                ^       ^
                                |       |
                                 \_______\___---> Cursor range

ervan uitgaande dat uw cursor zich binnen het bovengenoemde cursorbereik bevindt, kunt u de volgende opdrachten geven:

di(   --> Deletes '5.0/9.0'
ci(   --> Substitutes '5.0/9.0'
yi(   --> Yanks '5.0/9.0'

Tekst tussen het n-de buitenste paar haakjes verwijderen:

Om alles binnen het n-de buitenste paar haakjes te pakken, voeg je gewoon ntoe voor het bovenstaande commando. Dus, met dezelfde cursorpositie als hierboven,

2di(   --> Deletes '(5.0/9.0) * (fahr-32)'
2ci(   --> Substitutes '(5.0/9.0) * (fahr-32)'
2yi(   --> Yanks '(5.0/9.0) * (fahr-32)'
3di(   --> Deletes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3ci(   --> Substitutes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3yi(   --> Yanks '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'

Antwoord 4, autoriteit 8%

Je kunt d%gebruiken om te verwijderen en y%om te rukken.


Antwoord 5, autoriteit 4%

Plaats uw cursor op het eerste haakje en druk vervolgens op v%yof v%d.


Antwoord 6, autoriteit 2%

Probeer ci[block-surrounder]

In jouw geval, plaats de cursor ergens tussen de 2 haakjes die je hebt gemarkeerd en probeer de toetsen: ci(

Other episodes