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?
Pour supprimer une fonction entière, y compris sa définition, telle que:
function tick() {
// ...
}
f{
devrait le faire, ou simplement$
.V%d
(ligne visuelle, déplacer vers la paire correspondante, supprimer).Si vos fonctions ressemblent à ceci:
function tick()
{
// ...
}
J
(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.)V%d
(ligne visuelle, déplacer vers la paire correspondante, supprimer.)ou
V[Down]%d
(ligne visuelle, déplacez d’une ligne vers le bas, déplacez vers la paire correspondante, supprimez.)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.
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 }
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
.
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.
Si votre fonction était séparée par les lignes vides, tapez simplement:
dip
ce qui signifie "supprimer le paragraphe intérieur".
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][
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.
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