Je l'ai fait de commencer à le faire en utilisant « argdo » dans vim. Tout d'abord, définissez les args:
:args **/*.java
Le « ** » traverse toutes les subdir et les « args » les jeux à la liste de arg (comme si vous lanciez vim avec tous ces fichiers comme arguments à vim, par exemple: vim package1/One.java package1/Two.java package2/One.java)
Puis violon avec tout ce que les commandes que je dois faire la transformation que je veux, par exemple:
:/^package.*$/s/$/\rimport package.name.*;/
Les actes de « /^package.*$/ » comme une adresse pour le s » ordinaire ///"substitution qui le suit; le "/ $ /" correspond à la fin de la ligne du paquet; le "\ r" est d'obtenir un retour à la ligne.
Maintenant, je peux automatiser cela sur tous les fichiers, avec argdo. Je frappe « : », puis uparrow pour obtenir la ligne ci-dessus, puis insérez « argdo » il devient:
:argdo /^package.*$/s/$/\rimport package.name.*;/
Ce « argdo » applique et que chaque fichier à transform dans la liste des arguments.
Ce qui est vraiment bien au sujet de cette solution est qu'il est pas dangereux: il n'a pas réellement changé les fichiers encore, mais je peux les regarder pour confirmer qu'il a fait ce que je voulais. Je peux annuler sur des fichiers spécifiques, ou je peux quitter si je n'aime pas ce qui est fait (BTW: J'ai mappé^n et^p à: n et: N afin que je puisse parcourir rapidement les fichiers). Maintenant, je les commets avec ": wa" - "écrire tous" les fichiers. À ce stade, je peux encore annuler des fichiers spécifiques, ou les finesse selon les besoins.
Cette même approche peut être utilisée pour d'autres refactoring (changer par exemple une signature de méthode et demande à elle, dans de nombreux fichiers).
BTW: Ceci est maladroit: « s/$/\rtext/
» ... Il doit y avoir une meilleure façon d'ajouter du texte de la ligne de commande de vim ...
Merci, c'est ce que j'ai trouvé après avoir vu la réponse du chaos, sauf pour l'espace non significatif entre "1i" et "import". Je ne savais pas que c'était autorisé - c'est beaucoup plus clair. sed peut ajouter après les lignes correspondantes, comme sed -ie "/^paquet/un import package.name. *;" Eg.java # mais il va correspondre à toute autre ligne commençant par package aussi, pas seulement la première ... – 13ren