Una de las nuevas características de Vim 7.3 es 'deshacer persistente', que permite guardar el no libre en un archivo al salir de un búfer.
Desafortunadamente, no he podido habilitarlo correctamente o debo estar usándolo mal. Esto es lo que he probado hasta ahora:
Agregué 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 poder abrir cualquier archivo, editarlo, luego guardarlo y cerrarlo, y cuando lo abra de nuevo debería poder deshacer / rehacer como si nunca me hubiera ido. Desafortunadamente, este no parece ser el caso, ya que nunca se escribe un archivo.
Notas:
Estoy en Win 7 usando Vim 7.3 del proyecto Vim sin crema. La función de deshacer persistente está incorporada.
$ HOME / .vim / undo existe en mi sistema de archivos
mkdir ~/.vim/undo
Respuestas:
Pon esto en tu
.vimrc
para crear unundodir
si no existe y habilita el deshacer persistente. Probado tanto en Windows como en Linux.fuente
:silent call system('mkdir -p ' . &undodir)
&
porqueset
elundodir
lugar delet
ting ella. (En mi opinión, esta distinción entrelet
yset
es una de las muchas, muchas, muchas "características" asombrosamente horribles de Vimscript, pero YMMV.).vim
si no existe. Desafortunadamente, la-p
bandera no existe en Windows, así que edité la respuesta para llamarmkdir
dos veces para garantizar la compatibilidad con Windows.-p
bandera es en realidad evitar un error cuando el directorio existe. Tengo mi comando dentro de unif has('win32')
bloque, así que lo usomkdir
sin-p
en Windows.mkdir()
? Entonces esto puede convertirse en:,call mkdir(myUndoDir, 'p')
que se comporta comomkdir -p
.Intenté esto en mi _gvimrc:
Comenzó a funcionar como se anunciaba cuando eliminé el corchete try-catch, así:
Tuve que crear el directorio.
fuente
if has('persistent_undo')
silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
set undodir=~/.config/nvim/backups
endif
"agregando un mensaje comentado para aumentar la longitud del mensajeSupongo que $ HOME no funciona como se anuncia.
En mi sistema,
:echo $HOME
muestra H: \, pero: e $HOME/
dice:~/
nombre de archivo no válido.Podrías probar con una ruta absoluta para ver si lo cura.
fuente
$TEMP
. Cuando miroset undodir?
se nota~/AppData/Local/Temp
. El archivo de deshacer se conserva y se carga correctamente. ¿Quizás$TEMP
será más confiable?Esto ahora funciona como se esperaba:
file.txt
abra en un búfer de Vim 7.4 en Windows 7,:setlocal undofile
luego guarde un cambio en el búfer, y el archivo anulado.file.txt.un~
se crea junto porque:set undodir?
informa que "undodir =". de forma predeterminada, es decir, no es necesario especificarlo manualmente. También puede:set undofile
hacerlo en una línea de modelo.fuente