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
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
ediffo!
. - Se começar com um arquivo aberto
File1
, você também pode usar:vert diffs File2
para abrirFile2
em uma divisão vertical à direita e compará-la comFile1
.
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
ediffoff!
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.
: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 arquivosvd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
e eu invoco comvd file1 file2
. Ele usadiff
para determinar se os arquivos são diferentes e só abrevimdiff
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.