Pouvez-vous saisir ou supprimer entre parenthèses dans vi / vim?

Compte tenu de cette ligne de code en C:

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

Existe-t-il un moyen de supprimer ou de retirer la première parenthèse en gras à la parenthèse correspondante? J’ai pensé à df) , mais cela ne vous mènera qu’à la fin du 9.0.

Existe-t-il une méthode similaire pour que vim prenne tout entre les accolades correspondantes, indépendamment des nouvelles lignes?

Diverses motions:%

La commande % saute à la correspondance de l’élément sous le curseur. Positionnez le curseur sur l’ouverture (ou la fermeture) et utilisez y% pour yanking ou d% pour supprimer tout, du curseur à la paren correspondante.

Cela fonctionne parce que % est une “commande de mouvement”, donc il peut être utilisé partout où vim s’attend à une telle commande. De :help y :

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

Par défaut, “item” inclut les parenthèses, les accolades, les parens, les commentaires de style C et diverses instructions de précompilateur ( #ifdef , etc.).

Il y a un plugin pour “Extended% Matching” que vous pouvez trouver sur la page d’accueil de Vim .

Vous pouvez lire la documentation sur % et les commandes de mouvement associées en entrant :help various-motions en mode commande.

sélection d’object

Il existe un autre ensemble de commandes de mouvement que vous pouvez utiliser en mode Visual pour sélectionner divers objects texte.

Pour résoudre votre problème spécifique, procédez comme suit:

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

Disons que votre curseur est positionné sur ^ . Entrez la séquence suivante pour sélectionner la pièce que vous recherchez:

 v2a) 

En premier lieu, vous passez en mode Visual, puis vous spécifiez que vous voulez passer 2 niveaux de parent. Enfin le a) sélectionne “un bloc”. Après cela, vous pouvez utiliser d ou x pour supprimer, etc.

Si vous ne voulez pas inclure les parens externes, vous pouvez utiliser “bloc interne” à la place:

 v2i) 

Voir :help object-select pour la liste complète des commandes associées.

Qu’en est-il de dib ou di( .

Il supprimera le bloc interne (…) où se trouve le curseur.

J’adore les mouvements et les sélections d’ objects texte !

Pour supprimer tout ce qui se trouve à l’intérieur d’une paire de parenthèses, vous pouvez toujours émettre di( et ses dérivés.

Remarque :

Comme @porglezomb l’a suggéré dans son commentaire, vous pouvez utiliser a (“avec”) au lieu de i (“dedans”) pour inclure les parenthèses. Donc, en utilisant da( supprime tout à l’intérieur ( et ) y compris ( et ) .

Supprimer du texte à l’intérieur de la paire de parenthèses externe immédiate:

Donc, pour cette ligne de code

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

en supposant que votre curseur se trouve dans la plage de curseur mentionnée ci-dessus, vous pouvez lancer les commandes suivantes:

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

Suppression de texte à l’intérieur de la nième paire de parenthèses extérieures:

Pour saisir tout ce qui se trouve à l’intérieur de la nième paire de parenthèses, ajoutez simplement n avant la commande ci-dessus. Donc, avec la même position du curseur que ci-dessus,

 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))' 

Vous pouvez utiliser d% pour la suppression et y% pour la récupération.

Placez votre curseur sur la première parenthèse, puis appuyez sur v%y ou v%d .

Essayez ci [block-surround]

Dans votre cas, placez le curseur n’importe où entre les 2 parenthèses que vous avez marquées et essayez les touches: ci (

Comme le dit David Norman,

Placez votre curseur sur la première parenthèse, puis appuyez sur v%y ou v%d .

Explication de http://vimdoc.sourceforge.net/htmldoc/vimindex.html :

 tag note note action en mode normal        
 -------------------------------------------------- ----------------------------
 | v |  v Démarre le mode visuel
 |% |  % 1 trouve le prochain crochet (bouclé / carré) sur
                                        cette ligne et aller à son match, ou aller à
                                        parenthèse de commentaire correspondant, ou aller à la correspondance
 | d |  ["x] d {motion} 2 efface le texte de Nmove [dans le tampon x]

Cela signifie qu’il sélectionnera tout ce qui se trouve entre et entre les deux crochets ( % ) tout en affichant la sélection visuellement ( v ), puis en tirant / copiant y ou en supprimant / coupant d . (Au tampon par défaut.)

Vous pouvez mettre / coller avec p .

Fait cette réponse pour “apprendre moi-même à pêcher” .