Mover para a próxima linha sem correspondência com vimdiff

8

Existe uma maneira de passar para a próxima linha sem correspondência com no vimdiff? Não "move para a próxima linha alterada", mas move para a próxima linha não correspondente do arquivo atual.

No meu caso, estou tentando comparar dois arquivos grandes, um dos quais deve ser praticamente um subconjunto do outro. O que eu quero fazer é ver se há alguma linha no arquivo menor que está faltando no arquivo maior. Achei que deveria poder colocar meu cursor no arquivo maior e pular diretamente para a próxima anotação de linha "ausente".


Acontece que os arquivos atuais em questão são classificados, então provavelmente posso usar o utilitário de linha de comando "comm" para encontrar as linhas ausentes, mas fiquei pensando se há uma maneira fácil de fazer isso no vimdiff, principalmente se as linhas não são classificados.

RM
fonte
O que exatamente são linhas incomparáveis? Linhas adicionadas no outro buffer?
Christian Brabandt
@ChristianBrabandt Sim. Linhas que estão em um arquivo (buffer) que não estão no outro arquivo (buffer).
RM
e você deseja mover para as linhas adicionadas no outro buffer? (você não pode mover-se em cima das linhas de enchimento excluídos)
Christian Brabandt

Respostas:

2

Se eu entendi corretamente o que você deseja e deseja encontrar essas linhas, que são únicas em um buffer e, portanto, marcadas como "DiffAdd" no outro buffer.

Infelizmente, não há uma maneira nativa de fazê-lo usando a search()função, portanto, você deve contorná-la com a seguinte função, que funciona pesquisando uma linha, com o destaque "DiffAdd".

function! NextChange()
    while search('^.*', 'w') > 0
        if synIDattr(diff_hlID(line('.'),col('.')), 'name') is# 'DiffAdd'
            break
        endif
    endwhile
endfunction
com! NextChange :call NextChange()
Christian Brabandt
fonte
Isso funciona também para remoções e alterações?
Tom Hale #
Talvez você precise procurar pelo destaque do 'DiffChange'
Christian Brabandt