Como ter uma visão estática do mesmo arquivo?

6

Estou editando um arquivo no vim e gostaria de criar uma nova janela (de maneira semelhante ao que o :vsplit faz), que contém uma visão do arquivo antes de começar a editá-lo.

Em outras palavras, quero editar o texto na janela da esquerda, mas quero que o texto na janela da direita permaneça inalterado.

Existe alguma maneira de fazer isso no vim, ou eu copio o arquivo para um arquivo temporário e o abro na nova janela?

    
por svick 06.03.2012 / 17:54

3 respostas

4

Você poderia criar um comando similar ao DiffOrig (veja a resposta de Daniel Andersson e ": help DiffOrig) que simplesmente leria o arquivo original em um novo buffer:

command ShowOrig vert new | set bt=nofile | r ++edit # | 0d_

Para colocar o cursor de volta na janela original, adicione wincmd p :

command ShowOrig vert new | set bt=nofile | r ++edit # | 0d_ | wincmd p

A opção ++edit também foi adicionada por resposta do MikeSep e ": help DiffOrig" nos lançamentos recentes do Vim .

    
por 06.03.2012 / 20:41
2

:DiffOrig pode ser usado. Dá-lhe um diff do original, pelo menos:

Since 'diff' is a window-local option, it's possible to view the same buffer
in diff mode in one window and "normal" in another window.  It is also
possible to view the changes you have made to a buffer since the file was
loaded.  Since Vim doesn't allow having two buffers for the same file, you
need another buffer.  This command is useful:
     command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
        \ | wincmd p | diffthis
(this is in |vimrc_example.vim|).  Use ":DiffOrig" to see the differences
between the current buffer and the file it was loaded from.

A buffer that is unloaded cannot be used for the diff.  But it does work for
hidden buffers.  You can use ":hide" to close a window without unloading the
buffer.  If you don't want a buffer to remain used for the diff do ":set
nodiff" before hiding it.
    
por 06.03.2012 / 18:19
2

Aviso: Eu nunca precisei fazer isso, mas ...

Acho que essa frase pode fazer o truque:

:new +read\ ++edit\ FILENAME

Ainda não descobri como preencher automaticamente o nome do arquivo real ... Eu estava tentando algo com os modificadores de nome de arquivo como %:p . Acho que o nome precisa ser armazenado em uma variável antes de alternar as janelas.

Para explicar, :new abre uma nova janela e, em seguida, executa :read dentro dessa janela para ler o conteúdo de FILENAME diretamente no buffer dessa janela. O buffer permanece "sem nome", então não há conflito quando você tenta :split FILENAME (que apenas abre outra cópia do mesmo buffer).

Também pode fazer sentido tornar este um scratch buffer (veja o final de :help buffers ), mas eu não experimentei muito com isso.

    
por 06.03.2012 / 19:31

Tags