Como faço para usar o vim como uma ferramenta de comparação?

Eu uso o vim como meu editor principal.

Eu também gostaria de usar o vim para comparar arquivos e modificar os arquivos enquanto faço o diff para corrigir mudanças fáceis (ao invés da maioria das técnicas de diff que são um ciclo de diff / fix / diff / fix).

Além disso, existem maneiras fáceis de integrar o vim em ferramentas de diff usadas por ferramentas / sites de controle de origem (Estou pensando especificamente no git, mas tenho certeza de que outras pessoas estariam interessadas na integração com outras ferramentas / sites de controle de origem).

Comentários

  • você deve tentar o vim-fugitive, ele adiciona os comandos :Gdiff e :Gvdiff ambos os comandos permitem que você veja o diff lado a lado do buffer atual se seu buffer atual é gerenciado pelo git. Também ajuda você a resolver conflitos em um layout de três janelas quando houver conflitos de mesclagem em alguns arquivos
  • Eu tenho esta função simples em meu bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } e eu invoco com vd file1 file2. Ele usa diff para determinar se os arquivos são diferentes e só abre vimdiff se for o caso. Caso contrário, fico na casca. Eu também desabilito o realce de sintaxe no Vim porque acho que distrai durante o diff. Funciona apenas com dois arquivos.

Resposta

O vim tem esta funcionalidade incorporada (com o sinalizador de linha de comando correto ).

vim -d <file1> <file2> 

Isso abre cada arquivo em uma visualização e destaca as diferenças.
Qualquer código idêntico é folded para que você não precise olhar para um código idêntico ou percorrer grandes blocos de código idêntico.

Mas também há um aplicativo wrapper vimdiff que invoca corretamente o vim com os sinalizadores corretos.

vimdiff source1.cpp source2.cpp 

Se você está usando o git, pode configurar uma ferramenta de diff externa. Portanto, é fácil configurar o vimdiff para ser a ferramenta diff do git.

git config --global diff.tool vimdiff 

Ao usar o vimdiff, você pode editar qualquer um dos lados e o realce do diff mantém o ritmo para mostrar você as diferenças.

Nota: Ao editar a partir de um diff git. Se você tentar editar a versão armazenada no repositório do arquivo, suas alterações serão descartadas quando você sair (git não confia em você com o original, então você está comparando com uma cópia tmp), mas você pode editar a cópia local de acordo com seu conteúdo e salve-o sobre a versão atual.

Alguns comandos básicos que são úteis em vimdiff

dp diffput: puts changes under the cursor into the other file making them identical (thus removing the diff). do diffget: (o => obtain). The change under the cursor is replaced by the content of the other file making them identical. ]c Jump to the next diff [c Jump to the previous diff 

Outras configurações do vim que eu uso para trabalhar com realce com o vimdiff

if &diff highlight! link DiffText MatchParen endif 

Isso desativa o realce nos bits de código que são alterados. Portanto, a linha que foi alterada é destacada para que eu possa detectar as alterações, mas o texto real que mudou se destaca na linha (pois não está destacado).

Comentários

  • Também lida com até 4 buffers, o que o torna excelente para comparar arquivos de configuração
  • Você também pode usar o comando :diffthis para iniciar um diff quando o Vim já está em execução.
  • E: diffoff para desligá-lo. Acho que um link para a documentação do vim ‘ s seria benéfico: vimdoc.sourceforge.net/htmldoc/diff.html
  • Para mim, mesmo depois de git config --global diff.tool vimdiff, git diff ainda mostra tudo como se eu não mudasse nada.
  • tente git difftool

Resposta

Se você for editar um arquivo aberto e deseja compará-lo a outro arquivo sem fechar o atual:

Abra o novo arquivo na tela dividida:

Para divisão vertical:

:vs otherFile 

ou divisão horizontal:

:split otherFile 

Trocar cursores para tela dividida diferente:

ctrl+w ctrl+w 

Invoque o “modo diff” no arquivo:

:diffthis 

Alterne para outro arquivo e invoque o “modo diff”:

:diffthis 

Para desligar o “modo diff”:

:diffoff 

Comentários

  • Para evitar a mudança entre nos buffers você pode usar :windo diffthis também
  • @statox: funciona para diffoff também, então :windo diffthis e :windo diffoff para iniciar e parar o diff para duas janelas abertas. Ou abreviado como :windo difft e diffo!.
  • Se começar com um arquivo aberto File1, você também pode usar :vert diffs File2 para abrir File2 em uma divisão vertical à direita e compará-la com File1.

Resposta

Você pode colocar a configuração mencionada abaixo em .gitconfig arquivo encontrado no diretório %homepath% (ou %userprofile%) do usuário conectado no momento:

[diff] tool = vimdiff 

Isso permitirá que a ferramenta git bash comece a usar o vimdiff como a ferramenta diff externa também.

Resposta

A seguir está minha configuração git:

https://github.com/tracyone/dotfiles/blob/master/.gitconfig

[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0 

Resposta

Para NeoVim, você pode configurar seu ~/.gitconfig com os seguintes comandos

git config --global merge.tool nvim git config --global mergetool.keepBackup false git config --global mergetool.nvim.cmd $"nvim -d $LOCAL $REMOTE $MERGED -c \"$wincmd w\" -c \"wincmd J\"" 

Seu ~/.gitconfig deve ser semelhante a:

[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J" 

Consulte a documentação do Nvim: diff para obter mais informações sobre como configurá-lo de acordo com sua preferência.

Resposta

Só consigo ver três lugares sentados uações para usar o vim como uma ferramenta dif. Eles são descritos resumidamente abaixo:

  • Para git difftool, coloque o seguinte em seu ~/.gitconfig:

    [core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 
  • Para abrir o vim como uma ferramenta diff para dois arquivos, você pode fazer o seguinte:

    vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim 
  • Para obter uma visualização de diferenças para os buffers que estão ativos no momento, ou seja, todos os buffers que têm uma janela atribuída a eles na página de guia atualmente ativa, você pode fazer o seguinte:

    :windo diffthis " to get diff view :windo diffoff " to remove diff view 

Para obter mais informações, consulte :h diff

Comentários

  • se apenas um arquivo aberto ainda: :vert diffs File2 para diff com Arquivo2.

Resposta

aqui está o que eu faço:

  • abrir uma janela com o primeiro arquivo (ou conteúdo de texto, se você estiver colando dados)
  • abra o próximo arquivo / janela usando :vnew (para ter as duas janelas lado a lado) ou :new ( ter o topo das janelas e b ottom). se você tem um arquivo específico para abrir na segunda janela, pode incluir o caminho como este: :vnew /path/to/secondfile.txt
  • use F8 para alternar uma função personalizada que muda modo ligado e desligado

aqui está a função personalizada que “está em meu ~/.vimrc:

nmap <silent> <F8> :call ToggleDiff()<CR> imap <silent> <F8> <C-O>:call ToggleDiff()<CR> function ToggleDiff () if (&diff) set nodiff noscrollbind else " enable diff options in both windows; balance the sizes, too wincmd = set diff scrollbind nowrap number wincmd w set diff scrollbind nowrap number wincmd w endif endfunction 

Comentários

  • você pode usar o comando :diffthis e diffoff! então você não ‘ não precisa definir todas as opções de diff sozinho (por exemplo, cursorbind também é definido por diffmode)

Resposta

Eu adotei por .vimrc com alguns comandos úteis no modo diff (parte inferior). Se você editar no modo normal, a configuração será redefinida (parte superior). Você pode copiá-lo simplesmente em seu arquivo .vimrc.

nmap <silent> <F2> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR> inoremap <Esc>Oq 1 inoremap <Esc>Or 2 inoremap <Esc>Os 3 inoremap <Esc>Ot 4 inoremap <Esc>Ou 5 inoremap <Esc>Ov 6 inoremap <Esc>Ow 7 inoremap <Esc>Ox 8 inoremap <Esc>Oy 9 inoremap <Esc>Op 0 inoremap <Esc>On . inoremap <Esc>OQ / inoremap <Esc>OR * inoremap <Esc>Ol + inoremap <Esc>OS - inoremap <Esc>OM <Enter> nnoremap <Esc>OQ B " / nnoremap <Esc>OR E " * if &diff map <Esc>Oq zc " 1 close a fold map <Esc>Or <down> " 2 cursor down map <Esc>Os ]c " 3 next diff nmap <Esc>Ot <left> " 4 curosor left nnoremap <Esc>Ou <c-w>w " 5 jump to next file map <Esc>Ov <right> " 6 cursor right map <Esc>Ow zo " 7 open a fold map <Esc>Ox <up> " 8 curosor right map <Esc>Oy [c " 9 prefious diff map <Esc>Op 0 " 0 0 nmap <Esc>On . " . . nmap <Esc>OQ B " / back one word nmap <Esc>OR E " * end of word nmap <Esc>Ol dp " - diffput nmap <Esc>OS do " + diffget nmap <Esc>OM :diffupdate " Enter endif 

Claro, você pode alterar minhas configurações. Se você quiser colocar outro comando em ” 0 “, altere o comando logo após ” Op ” por exemplo com ” za ” que alterna entre dobrar e desdobrar:

 nmap <Esc>Op za " 0 0 

Esteja ciente do uso diferente de ” map ” e ” nmap ” dependendo da chave.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *