Pesquise e substitua através de um projeto multifile no AUCTeX?


8

Estou prestes a adotar o Emacs para ser o único editor que uso em tudo o que estou escrevendo, incluindo documentos do LaTeX. Eu vim do editor WYSIWYG, que serviu bastante bem a esse propósito, a saber, o TexStudio ou o TXS. Para a transição do TXS para o Emacs, ainda estou faltando a maneira como o TXS lida com a execução de uma pesquisa massiva de consulta regexp e substitui por destacar as correspondências e restrições da pesquisa apenas para esses .texarquivos relacionados ao projeto . Sinto muita falta disso no Emacs agora. Veja uma captura de tela do TXS abaixo:

Consulta ao TeXStudio em um projeto LaTeX com vários arquivos insira a descrição da imagem aqui

Gostaria de enfatizar os pontos no fluxo de trabalho a serem alcançados no Emacs:

  1. Pesquisa e Substituição de Consulta RegExp apenas nos .texarquivos relacionados ao projeto .
  2. Destacando as partidas
  3. Uma visão geral dos resultados destacados, todos juntos em um layout gerenciável (semelhante à visualização de log do MagitEmacs quando você pressiona lseguido por outro lou simplesmente como C-x dno modo Dired
  4. Como saber quantas correspondências de substituição ou inspeção são feitas ou permanecem e uma maneira de retomar a consulta, caso seja interrompida por um pressionamento de tecla desajeitado que interrompe a consulta
  5. Uma maneira limpa de sair dessa consulta bagunçada fechando e salvando todos os arquivos relacionados e retornando ao estado antes de chamar essa consulta

Eu li este post, mas minha intenção é ser mais parecido com CWque qualquer pessoa possa compartilhar seu melhor fluxo de trabalho para realizar esse trabalho comum. Minha abordagem atual como segue:

Primeiro fluxo de trabalho

  1. O modo Dired % gmarcará todos os arquivos que contêm essa regexp. Contras: isso inclui arquivos pares não relacionados ao projeto, incluindo arquivos que não são .tex.
  2. C-x 3 abre um novo buffer, mantendo um olho no primeiro buffer como minha visão geral da orientação de quais arquivos marcados eu tenho que consultar no novo buffer individualmente
  3. Executando a consulta por C-c q. Possui opções muito agradáveis, como !substituir tudo sem perguntar, além de destacar correspondências no arquivo aberto. Mas isso significa que eu tenho que executar a mesma consulta todas as vezes e para cada arquivo marcado.
  4. Depois de fazer todos os arquivos marcados, apertei C-x s !para salvar tudo em um toque de tecla. Ufa!

insira a descrição da imagem aqui

Segundo fluxo de trabalho - preferencial

  • Marcar todos os .texarquivos usando % mno modo Dired por regexp, a fim de marcar apenas .texarquivos, então, basicamente, a execução \.texme levará até lá.
  • C-x 3 igual ao anterior para manter um buffer para visão geral e outro para consulta
  • A execução Qem Dired, que é consulta, substitui regexp apenas nos arquivos marcados . Como alternativa, Aé apenas a consulta de pesquisa regexp. Uma consulta completa será executada e um menu de ajuda ?será fornecido generosamente
  • C-x s !salve e feche toda a bagunça. Caso contrário, eu tive que fechar os arquivos abertos, um por um, o que é tedioso. Espero que exista uma maneira de fechar apenas aqueles que incomodamos.

insira a descrição da imagem aqui

Como aproximar a consulta de pesquisa / substituição de expressões regulares do TXS em vários arquivos?

Nota

  • Emacs 24.4 no Windows 7

Atualmente, esta pergunta tem uma votação "estreita" por ser muito ampla, com a qual estou inclinado a concordar. Você poderia, por favor, restringir a questão a uma versão mais discreta (talvez ao longo das linhas de "como eu aproximo a pesquisa de consulta regexp do TeXStudio em vários arquivos")? "Qual é o seu melhor fluxo de trabalho?" é muito amplo e provavelmente produzirá respostas longas e baseadas em opiniões.
Dan

Não posso escrever uma resposta completa agora, mas você deve procurar no wgrep.
Malabarba

@ Malabarba, considere atualizar seu comentário para uma resposta se você acha que isso atenderá aos critérios mencionados na publicação.
doutorado

Respostas:


3

Se eu entendi corretamente, você deseja procurar padrões de texto no seu projeto, então você pode usar o Projectile junto com o Helm.

  • M-x helm-projectile-grep
  • Digite padrão de texto ou padrão de regex.
  • Veja resultados atualizados para cada caractere digitado.

Aqui está uma demonstração de helm-projectile-grep:

helm-projectile-grep

Você pode salvar em um buffer separado para consultar posteriormente usando a Save results in grep bufferação` (você alterna para o buffer de ação usando TAB, por padrão).

Se você não ouviu falar do Helm, pode ler meu tutorial do Helm . Visite o tutorial do Helm Projectile para obter mais demonstrações e orientações sobre o Helm Projectile.

Alternativa, você também pode usar rgrep, que é embutido:

  • M-x rgrep
  • Digite o padrão de texto / regex no Search for:prompt, ou seja, "teste"
  • Digite o tipo de arquivo para pesquisar Search for "test" in file:, ou seja *.tex.
  • Digite o diretório para pesquisar recursivamente (daí o nome rgrep).
  • Pressione RETe veja os resultados.

Uma rgrepdemonstração:

insira a descrição da imagem aqui

Em relação aos seus critérios:

  1. Pesquisa e Substituição de Consulta RegExp apenas nos .texarquivos relacionados ao projeto .

Helm e rgrepsuportam esse recurso.

  1. Destacando as partidas

O mesmo que acima.

  1. Uma visão geral dos resultados destacados, todos juntos, em um layout gerenciável

O mesmo que acima.

  1. Como saber quantas correspondências de substituição ou inspeção são feitas ou permanecem e uma maneira de retomar a consulta, caso seja interrompida por um pressionamento de tecla desajeitado que interrompe a consulta

Se você deseja substituir correspondências, pode usar o wgrep para realizar a substituição em um *Grep*buffer. Quando você terminar e sincronizar o *Grep*buffer, tudo será substituído de acordo com o texto que você substituiu.

Você "continua" executando a consulta novamente se você a interromper acidentalmente. Mas, ao usar o Helm, você tem um helm-resumecomando que retoma a operação anterior, se você o cancelar acidentalmente.

  1. Uma maneira limpa de sair dessa consulta bagunçada fechando e salvando todos os arquivos relacionados e retornando ao estado antes de chamar essa consulta

Na verdade, você não precisa matar nenhum buffer se usar ferramentas como o helm-mini . É fácil gerenciar milhares de buffers abertos: você pode restringir seus buffers desejados com um padrão de texto curto. Você pode matar tudo de uma vez, se quiser.

Aqui está uma demonstração de helm-mini:

leme-mini

Veja a explicação detalhada na página Helm Github, na seção "Uso avançado" .


Acho que tenho que tentar estudar projéteis com leme. Obrigado por seus tutoriais ricos em capturas de tela!
doutorado

quais pacotes eu preciso instalar para obter estas funções decentes: projectile, helme helm-projectileé óbvio, o que mais? Além disso, existem dois pacotes MELPA helm-pojectilee helm projectile-allalguma recomendação aqui?
doutorado

Já basta. Depois, siga a configuração nos meus guias. Você deve verificar a Installationseção em meus guias Helm e Helm Projectile.
Tu Do

em que teclas você usa rgreppara visitar as ocorrências de correspondência (para frente ou para trás) no buffer superior e inferior?
doutorado

1
foi uma experiência de mudança do Emacs conhecer elmo e projétil de elmo, obrigado! Mas, a pesquisa grep não está funcionando. Você pode pls gostaria de olhar para este post: emacs.stackexchange.com/q/7178/2443
doctorado

5

Se eu entendi o que você quer, o RefTeX ' reftex-isearch-minor-modedeve ser o que você procura . De sua descrição no manual:

Alterne para um modo secundário que permita que a pesquisa incremental funcione globalmente em todo o documento multifile. Os arquivos serão pesquisados ​​na sequência em que aparecem no documento.

Conforme relatado por T. Verron, isso também funciona com regexps.

Para ativar esse modo secundário em todos os * buffer TeX, adicione uma das seguintes linhas ao seu arquivo init

(add-hook 'TeX-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for AUCTeX
(add-hook 'tex-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for the Emacs' bultin TeX mode.

É bom saber que eu uso reftex. Mas como nenhum regexp é suportado, duvido que essa abordagem seja melhor!
doutorado

2
Aparentemente, pressionar M-ro buffer de pesquisa alterna para regexp a pesquisa, assim como ocorre regularmente isearch.
T. Verron

1
E o atalho usual para o regexp isearch ( C-M-s) também funciona.
T. Verron 3/15/15

@ T.Verron obrigado! Na verdade, eu não usei esse recurso extensivamente, a última vez que eu tentei pesquisa regexp não funcionou, quem sabe o que eu tentei então;-)
Giordano

@ T.Verron na barra de menus-> ref-> ações globais-> pesquisar versão e substituir versão para todo o documento fornece uma melhor regexp, pois você pode editar sua expressão enquanto estiver no minibuffer, mas não sei qual é essa função e o que é a combinação de teclas.
doutorado em

3

Caso você não saiba, é possível abrir o Dired apenas em um conjunto específico de arquivos (localizado em qualquer diretório, em qualquer lugar). IOW, você pode usar Dired como seu ponto de entrada para todos os arquivos de um projeto. Os recursos Dired usuais funcionam neste contexto: operando em arquivos marcados, etc.

Se você usar a biblioteca Bookmark + , poderá usar os favoritos direcionados para fornecer "visualizações" diferentes de diferentes conjuntos de arquivos, suas marcações, etc.

(O Emacs Wiki está em manutenção no momento e por mais alguns dias, para que o link fique temporariamente inacessível.)


É como o Emacs se estreitando C-x n n? Você pode enriquecer sua resposta com mais detalhes. Obrigado.
doctorado

Não; nada a ver com C-x n n- apenas um recurso Dired pouco conhecido. C-h f diredinforma que você pode passar como argumento uma lista de nomes de arquivos (e absolutos) (e diretório) em vez de um nome de diretório. Essa é a chave. A Biblioteca Dired + facilita o uso interativo. (Mas, novamente, o wiki está em baixo temporariamente, de modo que apontam também não está disponível no momento.)
de Drew
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.