Gostaria de definir um conjunto de arquivos no qual posso pesquisar e substituir o texto.
Esclarecer:
Eu gostaria de poder pesquisar, por exemplo, em todos os arquivos xk * .tex em um determinado diretório (e excluindo arquivos de backup). Eu também gostaria de poder alterar a expressão, por exemplo, "incerteza", para "indeterminação" em todos os arquivos dd * .sh e ee * .cls.
Qual é a maneira padrão de fazer isso?
dired
como encontrar e substituir um subconjunto de arquivos em um determinado diretório.ag
,wgrep
emultiple-cursors
.Respostas:
Se você estiver trabalhando em um projeto bem definido, poderá usar
occur
egrep
instalações dentro desse projeto viaprojectile
. Cribbing de sua descrição do github, entre os vários bits de funcionalidade oferecidos porprojectile
, ele pode fazer:fonte
Se todos os arquivos estiverem no mesmo diretório, você poderá seguir estas etapas. Baseamos isso no segundo exemplo dado nos comentários:
dired
para abrir o diretório relevante nodired
modo.dired-mark-files-regexp
nesse diretório.^dd.*\.sh$
, que é o equivalente a regexpdd*.sh
. Esses arquivos agora serão marcados com um*
e também podem aparecer destacados em uma cor diferente, dependendo do seu esquema de cores.^ee.*\.cls$
), até que todos os arquivos que você deseja editar sejam marcados.dired-do-query-replace-regexp
nos arquivos que você marcou.uncertainty
eindeterminacy
como as cadeias de consulta. (Acho que isso diferencia maiúsculas de minúsculas. Se você precisar fazer distinção entre maiúsculas e minúsculas, isso pode exigir uma regexp, mas não tenho certeza.)E essa é a ideia. Se você precisar repetir isso algumas vezes em pastas diferentes, poderá gravar as etapas 2 a 6 como uma macro (pressione C-x (após a etapa 1 e C-x )após a etapa 6). E mesmo que você não se sinta muito à vontade com o elisp, você pode converter essa macro em elisp usando
insert-kbd-macro
e tentar cortá-la em uma função útil.fonte
S-q
não significashift+q
, significasuper+q
. Você deveria apenas escreverQ
se quis dizershift+q
. Eu editei seu comentário para refletir isso.S-q
significashift+q
;super+q
seria escritos-q
.Você pode usar
M-x find-name-dired
para obter um buffer direcionado contendo links para todos os arquivos que correspondem a um padrão de nome específico.Use
M-x find-grep-dired
para obter um buffer direcionado contendo os arquivos cujo conteúdo corresponde ao padrão grep fornecido.Existem muitos outros comandos desse tipo; o mais adequado depende dos seus requisitos, por isso, considere atualizar sua pergunta.
Em seguida, você pode percorrer a lista de arquivos usando macros. Dê uma olhada na resposta de Brian para um exemplo: https://emacs.stackexchange.com/a/9497/2005
fonte
Use rgrep e wgrep.
Com o rgrep, você pode procurar todos por uma regexp em arquivos cujo nome de arquivo corresponde a uma regexp e dentro de um diretório (e seus subdiretórios)
Com o wgrep, você pode editar o buffer que contém os resultados da sua pesquisa do rgrep.
fonte