2011-04-18 29 views
83

Una de las nuevas funciones en Vim 7.3 es 'deshacer persistente', que permite guardar el undotree en un archivo al salir de un búfer.¿Usando el deshacer persistente de Vim?

Desafortunadamente, no he podido habilitarlo correctamente o debo usarlo incorrectamente. Esto es lo que he probado hasta ahora:

he añadido lo siguiente a ~/.vimrc

set undofile    " Save undos after file closes 
set undodir=$HOME/.vim/undo " where to save undo histories 
set undolevels=1000   " How many undos 
set undoreload=10000  " number of lines to save for undo 

Después de esto, supuestamente, debería ser capaz de abrir cualquier archivo, editarlo, a continuación, guardar-cerca que y cuando lo vuelva a abrir podré deshacer/rehacer como si nunca me hubiera ido. Desafortunadamente, este no parece ser el caso, ya que no se escribe ningún informe.

Notas:

  1. estoy en Win 7 usando Vim 7.3 del Vim sin proyecto crema. El deshacer persistente está cocido al horno. existe

  2. $ HOME/.vim/deshacer en mi sistema de archivos

+30

Solo para enfatizar, el punto 2) es ** muy ** importante. Vim no creará el directorio por usted y el deshacer persistente no funcionará hasta que 'mkdir ~/.vim/undo' – puk

+2

+1. Lo siento, en Linux funciona ... ¡gracias por contarme sobre eso! –

Respuesta

3

supongo $ HOME no funciona como se anuncia.

En mi sistema, :echo $HOME muestra H: \, pero : e $HOME/ dice: ~/ nombre de archivo no válido.

Usted podría intentar con una ruta absoluta para ver si lo cura

+0

Podría |: echo $ INICIO | y |: e $ HOME/| sin problemas, pero traté de cambiar las cosas de todos modos. Parecía funcionar a veces, y no a otros. Particularmente, nunca guarda copias de seguridad cuando estoy editando mi archivo ~/.vimrc. – duckworthd

+0

En Windows 7 estoy usando '$ TEMP'. Cuando miro 'set undodir?' Muestra '~/AppData/Local/Temp'. El archivo de deshacer persiste y se carga correctamente. Tal vez '$ TEMP' será más confiable? – slawek

7

he intentado esto en mi _gvimrc:

" Persistent undo 
try 
    set undodir=C:\vim\undodir 
    set undofile 
catch 
endtry 

que comenzó a trabajar como se anuncia cuando he eliminado el soporte try-catch, por lo tanto :

" Persistent undo 
set undodir=C:\vim\undodir 
set undofile 

Tuve que crear el directorio.

35

Ponga esto en su .vimrc para crear un undodir si no existe y habilite deshacer persistente. Probado en Windows y Linux.

" Put plugins and dictionaries in this dir (also on Windows) 
let vimDir = '$HOME/.vim' 
let &runtimepath.=','.vimDir 

" Keep undo history across sessions by storing it in a file 
if has('persistent_undo') 
    let myUndoDir = expand(vimDir . '/undodir') 
    " Create dirs 
    call system('mkdir ' . vimDir) 
    call system('mkdir ' . myUndoDir) 
    let &undodir = myUndoDir 
    set undofile 
endif 
+2

Esto puede ser preferible para crear el directorio: ': sistema de llamada silenciosa ('mkdir -p'.& undodir) ' –

+0

Utilizo' & 'porque' configuro' el 'deshacer'' en lugar de' let' it. (En mi opinión, esta distinción entre 'let' y' set' es una de las muchas, muchas, muchas "características" alucinantes de Vimscript, pero de YMMV.) –

+1

Gracias Kyle, es una buena idea crear '.vim 'si no existe. Desafortunadamente, el indicador '-p' no existe en Windows, así que edité la respuesta para llamar' mkdir' dos veces para asegurar la compatibilidad de Windows. –

1

Esto ahora funciona como se espera: file.txt abierta en un buffer de Vim 7.4 en Windows 7, :setlocal undofile, a continuación, guarde un cambio en el búfer y la undofile .file.txt.un~ se crea junto a causa :set undodir? informa que "undodir =". por defecto, es decir, no es necesario especificarlo manualmente. También puede :set undofile en una línea de modo.

Cuestiones relacionadas