Comparando dois arquivos de texto em um sistema Windows


11

Desde ediff-filese ediff-buffersresultar em apply: Searching for program: no such file or directory, differro em máquinas Windows.

Como comparar dois arquivos usando o Emacs em um sistema Windows?


1
Ao instalar o GetGnuWin32, você tem acesso a muitos softwares gnu (diff, mas também wget, sed…). Se você só cuidar de diff, você poderia ir com gnu.org/software/diffutils
fredtantini

A mensagem de erro informa o que está errado: Você não diffinstalou. Vá buscar o Cygwin e tente novamente.
itsjeyd

@itsjeyd Cygwin já está instalado no sistema
Empty_Mind

@fredtantini Depois de instalar GetGnuWin32 i obter o mesmo erro
Empty_Mind

2
Está no seu caminho? Eu acho que o diretório deveria estar pelo menos na exec-pathvariável.
Fredtantini 3/06

Respostas:


8

Como @nanny disse nos comentários, a solução está em instalar o Cygwin com diffutils. Aqui está como fazê-lo:

  1. Faça o download do Cygwin na sua página inicial .
  2. Instale o Cygwin com o diffutils: A GNU collection of diff utilitiespacote. Este pacote pode ser encontrado na Utilsseção em uma das poucas etapas da instalação do Cygwin. instalando o Cygwin com diffutils
  3. Adicione diretórios Cygwin à variável de sistema do Windows PATH. Isso pode ser feito:
    a) adicionando sua própria variável CYGWIN, para manter o pedido. criando variável de sistema CYGWIN;
    b) e adicionando a variável que você acabou de criar à variável PATH do sistema.adicionando variável CYGWIN à variável de sistema PATH

Após isso, você é capaz de chamar ediff-buffers, ediff-filese outros com sucesso. Que se parece com isso:correndo ediff

Apreciar!


3

Se você possui o git for windows instalado, basta adicionar

C:\Program Files\Git\usr\bin\

para o seu PATH, porque ele já vem com um executável diff e o instala nessa pasta.


2

Isso pode economizar tempo para as pessoas, então eu responderei aqui. Se você não quiser adicionar o cygwin bindiretório ao seu caminho (ou qualquer uma das outras sugeridas em outras respostas), você pode definir o caminho dos usos programa ediff definindo a variável ediff-diff-program. Por exemplo, você pode configurá-lo para C:\cygwin\bin(ou qualquer que seja o caminho real no seu caso) se estiver usando o cygwin. Levei algum tempo para descobrir qual variável definir. Alguns que NÃO funcionaram foram: ediff-custom-diff-programe diff-command.

Por exemplo:

(setq ediff-diff-program "c:/CYGWIN64/bin/diff.exe")

faz isso.


IIRC, você não pode chamar binários cygwin fora do shell, porque eles falham ao carregar algumas bibliotecas. Eu acho que isso só funcionará quando o Emacs for executado no Cygwin, que deve ter a PATHvariável definida corretamente. Corrija-me se eu estiver errado.
DoMiNeLa10

1
@ DoMiNeLa10 Eu testei em uma máquina Windows 10 com o Emacs 26.1 iniciando o emacs na barra de tarefas sem conhecer o Cygwin ... funciona bem. Além disso, a solução que o adicionasse ao caminho teria o mesmo problema que você descreve se fosse realmente um problema.
Sturgman 29/05/19

1
Sinto muito, a última parte do meu comentário está incorreta. Adicioná-lo ao caminho não teria o mesmo problema que você sugere, pois seria capaz de encontrar as bibliotecas. Dito isto, testei a abordagem na resposta e ela funciona bem.
Sturgman 30/05/19

0

Se você não precisa produzir um diff, mas apenas deseja encontrar as diferenças entre os arquivos, uma maneira de fazer isso é usá-lo M-x compare-windows.

Abra os dois arquivos para que você os veja ao mesmo tempo, mova o ponto para o início nos dois buffers e execute M-x compare-windows. Ele moverá o ponto para o primeiro local em que os arquivos diferem. Isso deve funcionar sem nenhum executável externo.


1
Isso interrompe o ponto antes do primeiro caractere diferente nos dois arquivos.
Empty_Mind

0

Se você usar o instalador da linha de comando https://scoop.sh/, poderá obter diffdigitando scoop install diffutilsseu prompt.

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.