web-dev-qa-db-fra.com

Sélection de la définition de fonction entière dans Vim

J'essaie Vim pour tout travail d'édition de texte depuis presque une semaine maintenant. Je souhaite connaître le moyen le plus rapide de sélectionner une définition de fonction C.

Par exemple, si j'ai une fonction comme celle-ci:

void helloworlds( int num )
{
    int n;
    for ( n = 0; n < num; ++n ) {
        printf( "Hello World!\n" );
    }
}

Comment pourrais-je supprimer toute la définition, y compris le nom de la fonction?

45
Jacky Boen

Pour supprimer une fonction entière, y compris sa définition, telle que:

function tick() {
        // ... 
}
  • Aller à la ligne avec le nom de la fonction.
  • Déplacez le curseur sur l'accolade d'ouverture,f{devrait le faire, ou simplement$.
  • Appuyez surV%d(ligne visuelle, déplacer vers la paire correspondante, supprimer).

Si vos fonctions ressemblent à ceci:

function tick() 
{
        // ... 
}
  • Aller à la ligne avec le nom de la fonction.
  • Appuyez surJ(join la ligne actuelle avec la ligne suivante. Ceci place également votre curseur sur le dernier caractère de la ligne résultante, {, celui dont nous avons besoin pour la commande suivante.)
  • Appuyez surV%d(ligne visuelle, déplacer vers la paire correspondante, supprimer.)

ou

  • Aller à la ligne avec le nom de la fonction.
  • Appuyez surV[Down]%d(ligne visuelle, déplacez d’une ligne vers le bas, déplacez vers la paire correspondante, supprimez.)
16
Nick Zalutskiy

Vous pouvez utiliser ce raccourci pour supprimer non seulement la fonction, mais également les lignes entre accolades, c’est-à-dire le code entre les instructions if-else, tandis que, pour les boucles, etc.

Appuyez sur Shitf + v [vous mettra en mode visuel] au début/à la fin de l'accolade.

Puis appuyez sur] +} i.e] + Shitf] - Si vous êtes au démarrage.

Ensuite, appuyez sur [+ {i.e [+ Shitf [- si vous êtes dans l’accolade).

Ensuite, DEL pour supprimer les lignes sélectionnées.

4
Manikanda raj S

Utilisez ce moyen simple

   1.Go to the function definition 
   2.dd  - delete function definition 
   3.d    -start delete operation 
   4.shift+5(%) - delete the lines between { to }
4
Kalanidhi

Le moyen le plus simple et le plus direct est le suivant (fonctionne n'importe où dans la fonction):

v   enter visual mode
{   move to first brace in function (may have to press more than once)
o   exchange cursor from top to bottom of selection
}   extend selection to bottom of function
d   delete selected text

La séquence de commande complète serait v{o}d. Notez que vous pouvez effectuer d'autres opérations en plus de supprimer de la même manière. Par exemple, pour copier la fonction, utilisez y (yank) au lieu de d.

3
Tyler Durden

Si vous souhaitez installer les plugins vim-textobj-function , vous obtiendrez vif pour Visual Select Inside Function et vaf pour Visual Select A Function. 

daf va supprimer la fonction, la ligne avec la signature et le corps de la fonction ({})

Les objets texte définis par ce plugin sont plus spécifiques et ne dépendent pas du corps de la fonction beign, mais d’un bloc de texte contigu ou de { beign placé au premier caractère de la ligne. 

L'inconvénient est que vous dépendez d'un plugin externe. 

2
ecerulm

Si votre fonction était séparée par les lignes vides, tapez simplement:

dip

ce qui signifie "supprimer le paragraphe intérieur".

1
wzFelix

Condition préalable: placez-vous quelque part dans la fonction . Passez à la dernière accolade fermante de la première ligne à l'aide de

[]

Supprimez ensuite l’accolade fermante suivante sur la première ligne à l’aide de

d][
0
Hope

Une autre solution consiste à aller à la ligne du début de votre fonction et à appuyer sur: Vj% (ou V%% si votre style place l'accolade ouvrante sur la même ligne). Cela vous met en mode Visual-Line et le pourcentage vous amène à l'accolade de fermeture correspondante. Dans le second style, le premier% vous amène à l'accolade d'ouverture sur la ligne que vous avez sélectionnée et le second à l'accolade de fermeture correspondante. 

Fonctionne également pour les parenthèses, les crochets, les commentaires multilignes de style C et les directives de préprocesseur.

Voir le manuel pour plus d'informations.

0
gvkv

manière non-visuelle:

d/^}/e

... supprimer en recherchant } à la ligne beining, y compris pour suppression.

sans /e (non mentionné dans les réponses ci-dessus), la solution est incomplète.

avec /e - la recherche va jusqu'à la fin du match, donc la parenthèse fermante correspond à inclus , et la commande convient également pour le retrait:

y/^}/e
0
Asain Kujovic