@Malabarba a mentionné l'utilisation du wgreppaquet pour éditer les résultats grep / ack / ag.
Je voudrais écrire une présentation détaillée de la façon dont j'utilise le agpackage et les wgrep-agpackages pour réaliser l'édition des résultats «ag» à l'aide du multiple-cursorspackage.
Ces packages sont disponibles via Melpa. Vous devez également avoir agaka the_silver_searcher installé sur votre système.
Cette procédure pas à pas s'applique aux cas où vous recherchez un moyen d'effectuer des modifications sur une seule ligne à tous les emplacements sélectionnés sélectionnés ag.
Installez agsur votre système et les packages emacs mentionnés ci-dessus.
agprend en charge la recherche de fichiers dont le contenu correspond à l'expression régulière spécifiée. La façon la plus simple de savoir agoù se trouve la racine du projet est d'y placer un .gitdossier vide . Effectuez ensuite la recherche à l'aide de M-x ag-project-regexp.
Le tampon de résultats de la recherche ag n'est pas modifiable par défaut. Pour le rendre modifiable, utilisez M-x wgrep-change-to-wgrep-modeou utilisez la wgrepliaison -default C-c C-p.
Maintenant, si vous deviez changer 'abcdef' en 'ghijkl' dans tous vos fichiers, vous rechercheriez 'abcdef' et le tampon de résultats ag affichera toutes les lignes contenant cette chaîne. Ensuite, vous modifiez ce tampon et modifiez ces chaînes manuellement et ces modifications se refléteront dans les tampons de fichier réels lors de l'exécution M-x wgrep-finish-editou de l'utilisation de la liaison par défaut C-c C-e. Vous pouvez également utiliser query-replace-regexppour effectuer cette recherche remplacer.
Je préfère utiliser multiple-cursorspour une refactorisation rapide afin que je puisse voir un retour en temps réel de l'endroit où mes multiples modifications se produisent simultanément. Mettez en surbrillance la chaîne que vous souhaitez remplacer dans ce tampon de résultats ag et appelez M-x mc/mark-all-like-this, puis modifiez-la avec admiration lorsque vous voyez des éléments modifiés en plusieurs points en même temps.
Une fois que vous êtes satisfait des modifications, comme je l'ai mentionné ci-dessus, faites C-c C-epour "refléter" les changements dans les tampons réels. Les tampons ne sont pas encore enregistrés.
Pour enregistrer tous les tampons, je le fais généralement en une seule fois, en utilisant la C-x s !liaison par défaut emacs .
Voici un exemple d'utilisation avec des captures d'écran:
Il montre le processus de remplacement de toutes les instances de bind-to-modi-mapto bind-to-my-mapdans my ~/.emacs.d/.
Lorsque je recherche bind-to-modi-mapdans mon dossier de configuration emacs, j'obtiens le résultat ci-dessous 'ag':
Ce tampon est en lecture seule.
Après M-x wgrep-change-to-wgrep-mode, je souligne, -modi-mapsélectionnez toutes les instances de cette sélection en utilisant M-x mc/mark-all-like-thiset après avoir édité ces sélections -my-map, cela ressemble à ci-dessous:

La surbrillance bleue indique les lignes qui seront modifiées lorsque j'appuie sur C-c C-e.
En frappant C-c C-e, vous pouvez voir le changement reflété dans le fichier réel dans cette capture d'écran:

Je voudrais ensuite enregistrer tous les fichiers modifiés en utilisant C-x s !.