2011-04-18 12 views
83

Vim 7.3'teki yeni özelliklerden biri, 'kalıcı' geri al, bu, bir tampondan çıkarken tutarsızlığın bir dosyaya kaydedilmesine izin verir.Vim'in kullanımı kalıcı mı?

Maalesef, düzgün şekilde etkinleştirilemedim ya da yanlış kullanıyor olmalıyım. İşte ben bugüne kadar çalıştığım buydu:

Ben Bundan sonra ~/.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 

, ben güya sonra, düzenleyebilir, herhangi bir dosyayı açmak kaydetmek kapamayin gerekir aşağıdaki katma ve tekrar açtığımda, hiç gitmeyecekmiş gibi geri almamalıydım. Ne yazık ki, hiç yazılmadığı için bu durum böyle görünmüyor.

Notlar:

  1. Ben krem ​​proje olmaksızın Vim dan Vim 7.3 kullanılarak Win 7 değilim. Kalıcı geri alma işlemi yapılır.

  2. $ HOME/.vim/geri alma ben $ ANA tanıtıldığı gibi çalışmıyor herhalde benim dosya sistemi

+30

Sadece stres için, nokta 2) ** çok ** önemlidir. Vim sizin için bir dizin oluşturmayacak ve inatçı geri alma işlemi siz 'mkdir ~/.vim/undo' – puk

+2

+1'e kadar çalışmayacaktır. Üzgünüz, Linux üzerinde çalışıyor ... bana anlattığın için teşekkürler! –

cevap

3

üzerinde var.

Sistemimde :echo $HOME, H: \ gösterir, ancak : e $HOME/ diyor: ~/ geçersiz dosya adı.

Sen buna
+0

I could |: echo $ ANA SAYFA | ve |: e $ HOME/| problemsiz, ama yine de değişen şeyleri denedim. Zaman zaman çalışmış gibi görünüyordu, başkalarına değil. Özellikle, ~/.vimrc dosyamı düzenlerken yedekleri hiçbir zaman kaydetmez. – duckworthd

+0

Windows 7'de '$ TEMP' kullanıyorum. Ben 'undodir set' görünce '~/AppData/Local/Temp' gösterir. Geri alma dosyası kalıcıdır ve kendisini doğru şekilde yükler. Belki '$ TEMP' daha güvenilir olacak? – slawek

7

benim _gvimrc bu çalıştı kürleri olup olmadığını görmek için mutlak yol ile deneyebilirsiniz

:

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

Ben try-catch braket silindiğinde reklamı olarak çalışmaya başladı, böylece :

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

Dizini oluşturmak zorundaydım.

35

Varsa undodir oluşturmak ve kalıcı geri almayı etkinleştirmek için bunu .vimrc ürününüze koyun. Hem Windows hem de Linux'ta test edildi.

" 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

Bu, dizinin oluşturulması için tercih edilebilir: ': sessiz çağrı sistemi ('mkdir -p'.& undodir) ' –

+0

' & 'kullanıyorum çünkü' 'undodir'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''} (Aklımda 'let' ve' set' arasındaki bu ayrım, Vimscript'in, ama YMMV'nin çok, çok, çok zekice bogglingly korkunç "özelliklerinden biridir.) –

+1

Teşekkürler Kyle,' .vim yaratmak için iyi bir fikir eğer mevcut değilse. Ne yazık ki '-p' bayrağı Windows üzerinde mevcut değil, bu yüzden Windows uyumluluğunu sağlamak için iki kez 'mkdir' cevabı verdim. –

1

Bu beklendiği gibi şimdi çalışır: Windows 7, :setlocal undofile üzerinde Vim 7.4 tamponu içinde file.txt açık, daha sonra tampona bir değişikliği kaydetmek ve undofile .file.txt.un~ o yanında çünkü :set undodir? raporlarını oluşturulur "undodir =". varsayılan olarak - yani bunu manuel olarak belirtmenize gerek yoktur. Ayrıca bir modeline :set undofile da sahip olabilirsiniz.