Je voudrais définir un ensemble de fichiers dans lesquels je peux rechercher et remplacer du texte.
Clarifier:
Je voudrais pouvoir rechercher, par exemple, dans tous les fichiers xk * .tex dans un répertoire donné (et à l'exclusion des fichiers de sauvegarde). Je voudrais également pouvoir changer l'expression, par exemple, "incertitude", en "indétermination" dans tous les fichiers dd * .sh et ee * .cls.
Quelle est la manière standard de procéder?
dired
la recherche et au remplacement sur un sous-ensemble de fichiers dans un répertoire donné.ag
,wgrep
etmultiple-cursors
.Réponses:
Si vous travaillez sur un projet bien défini, vous pouvez utiliser
occur
et utiliser lesgrep
installations de ce projet viaprojectile
. À partir de sa description github, parmi les différents éléments de fonctionnalité offerts parprojectile
, il peut faire:la source
Si tous les fichiers se trouvent dans le même répertoire, vous pouvez suivre ces étapes. Je baserai cela sur le deuxième exemple donné dans les commentaires:
dired
pour ouvrir le répertoire correspondant endired
mode.dired-mark-files-regexp
dans ce répertoire.^dd.*\.sh$
, qui est l' expression rationnelle équivalente àdd*.sh
. Ces fichiers seront désormais marqués d'un*
, et peuvent également apparaître en surbrillance dans une couleur différente en fonction de votre jeu de couleurs.^ee.*\.cls$
) jusqu'à ce que tous les fichiers que vous souhaitez modifier soient marqués.dired-do-query-replace-regexp
les fichiers que vous avez marqués.uncertainty
etindeterminacy
comme chaînes de requête. (Je pense que ce sera sensible à la casse. Si vous avez besoin qu'il soit insensible à la casse, cela peut nécessiter une expression rationnelle, mais je ne suis pas sûr.)Et c'est l'idée. Si vous devez répéter cette opération plusieurs fois dans différents dossiers, vous pouvez enregistrer les étapes 2 à 6 sous forme de macro (appuyez sur C-x (après l'étape 1 et C-x )après l'étape 6). Et même si vous n'êtes pas très à l'aise avec elisp, vous pouvez traduire cette macro en elisp en utilisant
insert-kbd-macro
et essayer de la pirater en une fonction utile.la source
S-q
cela ne signifie passhift+q
, cela signifiesuper+q
. Vous devriez juste écrireQ
si vous voulez direshift+q
. J'ai modifié votre commentaire pour refléter cela.S-q
cela signifieshift+q
;super+q
serait écrits-q
.Vous pouvez utiliser
M-x find-name-dired
pour obtenir un tampon dired contenant des liens vers tous les fichiers correspondant à un modèle de nom donné.Utilisez
M-x find-grep-dired
pour obtenir un tampon dired contenant les fichiers dont le contenu correspond au modèle grep fourni.Il existe de nombreuses autres commandes de ce type; ce qui est le plus approprié dépend de vos besoins, alors pensez à mettre à jour votre question.
Ensuite, vous pouvez parcourir la liste des fichiers à l'aide de macros. Jetez un œil à la réponse de Brian pour un exemple: https://emacs.stackexchange.com/a/9497/2005
la source
Utilisez rgrep et wgrep.
Avec rgrep, vous pouvez rechercher tout un regexp dans des fichiers dont le nom de fichier correspond à un regexp et dans un répertoire (et ses sous-répertoires)
avec wgrep vous pouvez éditer le tampon contenant les résultats de votre recherche rgrep.
la source