2010-01-26 5 views
15

Ich habe den folgenden Code in meinem .vimrc:Code-Folding ist in meinem vimrc nicht gespeichert

" save and restore folds when a file is closed and re-opened 
autocmd BufWinLeave *.* mkview 
autocmd BufWinEnter *.* silent loadview 

HTML und CSS-Dokumente speichern und ihre Falten wiederherstellen aber Code-Faltung in meinem .vimrc nicht gespeichert wird

Irgendwelche Vorschläge?

EDIT:

Der folgende Code löst das Problem:

au BufWinLeave ?* mkview 
au BufWinEnter ?* silent loadview 

aber wenn ich es schreiben, verschwinden die MRU-Dateien von meiner Liste (und ich habe MRU zu öffnen zweimal in Um meine Liste der letzten Dateien zu sehen warum?)

+0

die Falten Daten in einer Ansicht Ordnern gespeichert werden, aber nicht vimrc Daten – alexchenco

Antwort

15

Das Problem ist, dass Ihre ursprünglichen autocmd Linien gesetzt sind *.* das Muster entsprechen, das heißt jeden Dateinamen, der einige Zeichen enthält, gefolgt von einem Punkt, von einigen mehr Zeichen.

So wird die Datei oder zugeordnet, und Ihr Befehl wird ausgeführt, aber .vimrc, die nichts vor dem Punkt hat, wird nicht zugeordnet werden.

Die Lösung ist ein AutoMDD, wird übereinstimmen .vimrc. Ihre Schätzung von ?* passt dazu (weil nach einem beliebigen Zeichen gesucht wird, gefolgt von einer beliebigen Anzahl anderer Zeichen), aber Sie sagen, dass es sich irgendwie auf MRUs auswirkt. Ich weiß nicht, welches Plugin Sie für Ihre MRUs verwenden, aber ich vermute, es ist eines, das die MRU-Liste in einem temporären Fenster mit einem Namen öffnet, der dem? * -Muster entspricht, und das anschließende Laden der Ansicht ist irgendwie Verwirrung mit Ihren MRUs.

Daher ist die Lösung ist, etwas, das ein bisschen genauer zu verwenden, passen .vimrc:

autocmd BufWinLeave .vimrc mkview 
autocmd BufWinEnter .vimrc silent loadview 

Es ist möglich, dass dies funktionieren wird, auch, und ist allgemeiner:

autocmd BufWinLeave .* mkview 
autocmd BufWinEnter .* silent loadview 
0

Die Ansichtsdetails werden in der Ansichtsdatei im Verzeichnis vimfiles\view gespeichert. Für jede Datei, die Sie bearbeiten, wird eine separate Ansichtsdatei erstellt.

+0

Sind die automatischen Befehle wie erwartet funktionieren, sonst ? Ich habe meine 'mkview' auf' BufWrite' anstelle von 'BufWinLeave' gesetzt und meine' loadview' auf 'BufNewFile, BufRead' anstelle von' BufWinEnter'. Nicht sicher, ob der eine oder der andere Weg "korrekt" ist. – Jay

+2

... vorausgesetzt, dass für jede von Ihnen geänderte Datei eine Ansichtsdatei erstellt wird, sollten Sie in Betracht ziehen, die Erweiterungen einzuschränken, für die Sie Ansichten speichern. Normalerweise gewinnen Sie nicht viel, indem Sie die Ansicht für eine Datei mit einer anerkannten Syntax für das automatische Falten speichern. – Jay

2

Ich hatte ein ähnliches Problem. Vielleicht müssen Sie das Verzeichnis erstellen, in dem die Daten gespeichert sind.

mkdir -p ~/.vim/view 
chmod 0750 ~/.vim ~/.vim/view 
6

Per Jays bemerkt, dass dies die eleganteste Lösung ist, ich habe eine Menge Plugins und führe es auf mehreren Betriebssystemen aus und habe es gerade getestet.

autocmd BufWrite * mkview 
autocmd BufRead * silent loadview 

Es spielt keine MRU brechen und machen Sie doppelte Abfrage MRU haben Es Fehler nicht, wenn Sie: neu in einen leeren Puffer Es auch Sie erfordern keinen Dateityp Pater für jeden Dateityp erstellen Sie können möglicherweise verwenden.

HINWEIS: mit "loadview" auf "BufNewFile" scheint, was MRU verwirrt, eher sinnlos versuchen, Falten auf einem leeren Puffer zu rendern hätte ich gedacht ??

+3

Das ist während Sachen wie [less.vim] (http://ubuntu-tuutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/), wo es keinen Dateinamen gibt. Auch wenn die Datei schreibgeschützt ist (wie die Hilfeseiten!). – pieman72

+0

Alle Falten werden gelöscht, sobald ich eine Datei speichere. –

1

Fügen Sie diese an der Spitze Ihres vimrc um sicherzustellen, dass die viewdir vorhanden ist

let &viewdir=expand("$HOME") . "/.bk/.vim/viewdir" 
if !isdirectory(expand(&viewdir))|call mkdir(expand(&viewdir), "p", 451)|endif 

diese dann in Ihrem autocmds Abschnitt:

autocmd BufWrite * mkview 
autocmd BufNewFile,BufRead * silent loadview