@Malabarba a mentionné l'utilisation du wgrep
paquet 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 ag
package et les wgrep-ag
packages pour réaliser l'édition des résultats «ag» à l'aide du multiple-cursors
package.
Ces packages sont disponibles via Melpa. Vous devez également avoir ag
aka 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 ag
sur votre système et les packages emacs mentionnés ci-dessus.
ag
prend 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 ag
où se trouve la racine du projet est d'y placer un .git
dossier 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-mode
ou utilisez la wgrep
liaison -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-edit
ou de l'utilisation de la liaison par défaut C-c C-e
. Vous pouvez également utiliser query-replace-regexp
pour effectuer cette recherche remplacer.
Je préfère utiliser multiple-cursors
pour 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-e
pour "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-map
to bind-to-my-map
dans my ~/.emacs.d/
.
Lorsque je recherche bind-to-modi-map
dans 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-map
sélectionnez toutes les instances de cette sélection en utilisant M-x mc/mark-all-like-this
et 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 !
.