Um dos novos recursos do Vim 7.3 é o 'desfazer persistente', que permite que o undotree seja salvo em um arquivo ao sair de um buffer.
Infelizmente, não consegui ativá-lo corretamente ou devo estar usando-o incorretamente. Aqui está o que tentei até agora:
Eu adicionei o seguinte 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
Depois disso, supostamente devo ser capaz de abrir qualquer arquivo, editá-lo, salvá-lo e fechá-lo e, quando abri-lo novamente, devo ser capaz de desfazer / refazer como se nunca tivesse saído. Infelizmente, esse não parece ser o caso, já que nenhum undofile é escrito.
Notas:
Estou no Win 7 usando o Vim 7.3 do projeto Vim sem creme. O desfazer persistente está embutido.
$ HOME / .vim / undo existe no meu sistema de arquivos
mkdir ~/.vim/undo
Respostas:
Coloque isso em seu
.vimrc
para criar umundodir
se ele não existir e habilite o desfazer persistente. Testado em Windows e Linux.fonte
:silent call system('mkdir -p ' . &undodir)
&
porque euset
aundodir
vez delet
ting-lo. (Na minha opinião, esta distinção entrelet
eset
é uma das muitas, muitas, muitas "características" assustadoramente terríveis do Vimscript, mas YMMV.).vim
se ele não existir. Infelizmente, a-p
sinalização não existe no Windows, então editei a resposta para ligarmkdir
duas vezes para garantir a compatibilidade do Windows.-p
sinalizador é, na verdade, evitar um erro quando o diretório existe. Tenho meu comando dentro de umif has('win32')
bloco, então uso apenasmkdir
sem-p
no Windows.mkdir()
? Então isso pode se tornarcall mkdir(myUndoDir, 'p')
:, que se comporta comomkdir -p
.Eu tentei isso no meu _gvimrc:
Ele começou a funcionar conforme anunciado quando excluí o colchete try-catch, assim:
Tive que criar o diretório.
fonte
if has('persistent_undo')
silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
set undodir=~/.config/nvim/backups
endif
"adicionando mensagem comentada para aumentar o comprimento da mensagemSuponho que $ HOME não funcione conforme anunciado.
No meu sistema,
:echo $HOME
mostra H: \, mas: e $HOME/
diz:~/
nome de arquivo inválido.Você pode tentar um caminho absoluto para ver se ele o cura
fonte
$TEMP
. Quando eu olho,set undodir?
isso mostra~/AppData/Local/Temp
. O arquivo de desfazer é persistido e se carrega corretamente. Talvez$TEMP
seja mais confiável?Isso agora funciona conforme o esperado:
file.txt
abra em um buffer do Vim 7.4 no Windows 7,:setlocal undofile
salve uma alteração no buffer e o undofile.file.txt.un~
é criado ao lado porque:set undodir?
informa que "undodir =." por padrão - ou seja, não há necessidade de especificar isso manualmente. Você também pode:set undofile
em um modeline.fonte