Eustáquio Rangel

Desenvolvedor, pai, metalhead, ciclista

Patcheando com o Vim

Publicado em Developer


O Vim realmente não deixa de me surpreender mesmo após um bom tempo usando ele o dia inteiro. Hoje descobri um recurso muito útil para os desenvolvedores (olha eu no meio ehehe).Vou descrever abaixo como podemos criar e aplicar patches com esse ótimo. editor.

Vamos criar um arquivo, chamado, digamos, foo.rb, com o seguinte conteúdo:

1 class Foo
2    def foo
3       puts "xoo!"
4    end
5 end

Aí o Juquinha (putz, de onde tirei isso) pega meu código e vê que eu escrevi a string do método errado, e resolve fazer um patch, também adicionando outra classe chamada Bar. Ele abre o arquivo no Vim, corrige a string para "foo", cria (em um arquivo chamado foo.patch) e envia o patch, que resulta em:

--- foo.rb.orig 2007-08-01 16:19:03.000000000 -0300
+++ foo.rb      2007-08-01 16:19:26.000000000 -0300
@@ -1,5 +1,11 @@
 class Foo
        def foo
-               puts "xoo!"
+               puts "foo!"
+       end
+end
+
+class Bar
+       def bar
+               puts "bar!"
        end
 end

Com esse patch em mãos, abrimos o nosso arquivo foo.rb no Vim, e digitamos:

:diffpatch foo.patch

Olhem a mágica que acontece! Temos os dois arquivos abertos, assinalados onde estão as diferenças que podem ser aplicadas pelo patch. Podemos inclusive navegar pelas alterações usando ]c para ir para a o início da próxima alteração e [c para ir para o início da alteração anterior. Se você estiver na janela do novo arquivo criado com o código do patch aplicado e desejar aplicar a alteração que o cursor se encontra no arquivo original, digite, em Normal Mode, dp. Se for o inverso, ou seja, você estiver no arquivo original e quiser incorporar as mudanças do arquivo novo criado com o patch, digite do. O resultado final fica:

 1 class Foo
 2    def foo
 3       puts "foo!"
 4    end
 5 end
 6 
 7 class Bar
 8    def bar
 9       puts "bar!"
10    end
11 end

Uma dica é digitar :1,$+1diffget estando posicionado no arquivo original para incorporar todas as alterações feitas pelo patch e mostradas no arquivo novo. Happy patching and happy vimming! :-)




Comentários

Comentários fechados.

Artigos anteriores