Vim'in kalıcı geri alma işlemlerini mi kullanıyorsunuz?


96

Vim 7.3'teki yeni özelliklerden biri 'kalıcı geri alma''dır, bu da istenmeyenlerin bir arabellekten çıkarken bir dosyaya kaydedilmesine izin verir.

Maalesef tam olarak etkinleştiremedim veya yanlış kullanıyorum. Şimdiye kadar denediklerim şunlar:

Aşağıdakileri ~ / .vimrc dosyasına ekledim

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

Bundan sonra, sözde herhangi bir dosyayı açabilmeli, düzenleyebilmeli, sonra kaydedip kapatabilmeli ve tekrar açtığımda sanki hiç ayrılmamış gibi geri alabilmeli / yineleyebilmeliyim. Ne yazık ki, hiçbir dosya dosyası yazılmadığı için durum böyle görünmüyor.

Notlar:

  1. Krem projesi olmadan Vim'den Vim 7.3 kullanarak Win 7 kullanıyorum. Kalıcı geri alma eklenmiştir.

  2. $ HOME / .vim / undo dosya sistemimde var


38
Sadece vurgulamak için, 2. nokta) çok önemlidir. Vim sizin için dizini oluşturmayacak ve kalıcı geri alma işlemi sizden önce çalışmayacaktırmkdir ~/.vim/undo
puk

2
+1. Üzgünüm, Linux'ta çalışıyor ... bunu anlattığın için teşekkürler!
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Bu soruya herhangi bir gelecek ziyaretçiler için: Do DEĞİL undodir değeri tırnak koymak! Bir süre bu soruna takılı kaldım - etrafından alıntı yapmadan mutlak bir paht kullanın.
naiveai

Yanıtlar:


51

Eğer yoksa .vimrcbir tane oluşturmak undodirve kalıcı geri almayı etkinleştirmek için bunu sizin içine koyun . Hem Windows hem de Linux'ta test edilmiştir.

" 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

5
Bu, dizini oluşturmak için tercih edilebilir::silent call system('mkdir -p ' . &undodir)
Kyle Strand

1
Kullandığım &çünkü ben yerine ting o. (Arasında Zihnimde bu ayrım ve ., Çok, çok akıl almaz korkunç Vimscript, ymmv birçok "özellikleri" biridir)setundodirletletset
Kyle Strand

1
Teşekkürler Kyle, .vimyoksa yaratmak iyi bir fikir . Ne yazık ki -pbayrak Windows'ta mevcut değil, bu yüzden mkdirWindows uyumluluğunu sağlamak için yanıtı iki kez arayacak şekilde düzenledim .
Matthias Braun

2
Ah. -pBayrağı kullanmamın birincil nedeni , dizin mevcut olduğunda bir hatadan kaçınmaktır. Komutumu bir if has('win32')bloğun içinde aldım , bu yüzden Windows mkdirolmadan kullanıyorum -p.
Kyle Strand

4
Neden kullanmıyorsun mkdir()? O zaman bu şöyle olabilir: call mkdir(myUndoDir, 'p')gibi davranır mkdir -p.
nelstrom

8

Bunu _gvimrc'mde denedim:

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

Try-catch braketini sildiğimde ilan edildiği gibi çalışmaya başladı, böylece:

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

Dizini oluşturmam gerekiyordu.


if has('persistent_undo')
Arelav

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
Arelav

set undodir=~/.config/nvim/backups
Arelav

1
endif"mesaj uzunluğunu artırmak için yorumlanmış mesaj ekleme
Arelav

3

Sanırım $ HOME reklamı yapıldığı gibi çalışmıyor.

Sistemimde :echo $HOMEH: \ gösteriyor, ancak : e $HOME/şöyle diyor: ~/geçersiz dosya adı.

Tedavi edip etmediğini görmek için mutlak bir yol deneyebilirsiniz.


Yapabilirim |: echo $ HOME | ve |: e $ HOME / | sorunsuz, ama yine de bir şeyleri değiştirmeyi denedim. Bazen işe yarıyor gibiydi, diğerlerinde değil. Özellikle ~ / .vimrc dosyamı düzenlerken asla yedekleri kaydetmiyor.
duckworthd

Windows 7'de kullanıyorum $TEMP. Baktığımda set undodir?gösteriyor ~/AppData/Local/Temp. Geri alma dosyası kalıcıdır ve kendini doğru şekilde yükler. Belki $TEMPdaha güvenilir olur?
slawek

1

Bu artık beklendiği gibi çalışıyor: file.txtWindows 7'de bir Vim 7.4 arabelleğinde açın :setlocal undofile, ardından arabelleğe bir değişiklik kaydedin ve bununla .file.txt.un~birlikte dosya olmayan dosya oluşturulur çünkü :set undodir?"undodir =" rapor eder. varsayılan olarak - yani bunu manuel olarak belirtmenize gerek yoktur. Ayrıca :set undofilebir modelin içinde de yapabilirsiniz .


0

% TEMP%. (Dosya adı) .un ~ arıyorsanız bulamazsınız

Dosya adı satır C %% Kullanıcılar %% (kullanıcı adı)% _ vimrc satırında bir şey olacaktır

Neden olduğuna dair hiçbir fikrim yok

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.