vim: diff duas seções em dois arquivos, mas não o arquivo inteiro?

12

Eu atualizei um sistema do Nagios 2 para o Nagios 3, e agora estou comparando algumas diferenças entre o antigo e o novo arquivo de configuração.

Existem mudanças significativas nos arquivos de configuração, e eu não quero fazer um diff no arquivo inteiro porque o vimdiff está mostrando muitas diferenças irrelevantes e tem problemas para lidar com # comentários no início das linhas, etc. .

Posso usar o vim, ou uma funcionalidade do tipo vimdiff para realizar um diff em duas seções específicas em dois arquivos diferentes?

Por exemplo, quero diferenciar apenas as linhas que se parecem com isso:

# Define a service to check the load on the local machine. 

define service{
    use                             local-service         ; Name of service template to use
    host_name                       localhost
    service_description             Blah Blah
    check_command                   Blah Blah
    }
    
por Stefan Lasiewski 20.04.2012 / 21:57

3 respostas

14

Parece que linediff.vim pode ser o que você deseja: “Realizar um diff interativo em dois blocos de texto ”.

Você especifica cada bloco (intervalo de linhas) com seu comando :Linediff (por exemplo, :4,10Linediff ou faz uma seleção visual primeiro e, em seguida, digita :Linediff (que sai como :'<,'>LineDiff )). Os intervalos podem ser do mesmo arquivo / buffer ou diferentes. Depois de especificar dois intervalos, ele abre uma nova guia que possui dois novos buffers de modo diferencial (em uma divisão) para os intervalos especificados. Você pode editar e :w em qualquer um desses buffers para atualizar os intervalos originais. Quando estiver pronto, :q dos buffers de diff e :LinediffReset para se livrar dos especificadores de intervalo nos buffers originais.

A resposta do Stackoverflow onde aprendi pela primeira vez sobre o linediff.vim também sugere alguns mapeamentos. Outras respostas a pergunta também mencionam uma solução personalizada e outro plug-in que podem resolver esse problema.

    
por 21.04.2012 / 04:03
6

Eu não encontrei uma maneira muito simples de fazer isso, mas tive um sucesso muito bom com o plugin NrrwRgn (Narrow Region), link . Ele permite selecionar uma região de um buffer e abrir essa região em um novo buffer. Você pode editar esse novo buffer e ao fechá-lo, o plug-in copia automaticamente o texto editado de volta para a região de onde ele veio no arquivo original. Você também pode copiar diferentes regiões de um ou mais arquivos em novos buffers e depois diferenciar esses novos buffers. É assim que costumo usar o plugin - para verificar diferenças entre funções similares definidas em um arquivo.

No seu caso, você pode abrir os dois arquivos no Vim e usar V para selecionar a seção de interesse no primeiro arquivo e digitar \nr para copiar essa seção para um novo buffer. Repita para a seção similar no outro arquivo. Então, em cada um dos dois novos buffers, execute :diffthis .

    
por 20.04.2012 / 22:42
-1

Que tal spotdiff.vim ( link ) que publiquei recentemente?

    
por 31.01.2017 / 08:02

Tags