2010-01-26 16 views
15

j'ai ajouté le code suivant à mon .vimrc:pliage du code est pas enregistré dans mon vimrc

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

documents HTML et CSS sauvegarder et restaurer leurs plis, mais le pliage de code n'est pas enregistré dans mon Vimrc

Des suggestions?

EDIT:

Le code suivant résout le problème:

au BufWinLeave ?* mkview 
au BufWinEnter ?* silent loadview 

mais si je l'écris, les fichiers MRU disparaissent de ma liste (et je dois ouvrir MRU deux fois dans afin de voir ma liste de fichiers récents pourquoi?)

+0

les données de pliage est en cours d'enregistrement dans un dossier de vue, mais pas les données de VIMRC – alexchenco

Répondre

15

Le problème est que les lignes autocmd originales sont définies pour correspondre au motif *.*, à savoir un nom de fichier qui contient certains caractères, suivis d'un point, suivi de quelques autres caractères.

Le fichier test.html ou anothertest.css sera apparié, et votre commande sera exécutée, mais .vimrc, qui n'a rien avant le point, ne correspondra pas.

La solution consiste à configurer un autocmd qui va correspondre .vimrc. Votre estimation de ?* correspond à ceci (parce qu'elle recherche n'importe quel caractère, suivi d'un nombre quelconque d'autres caractères), mais vous dites que cela affecte en quelque sorte les MRU. Je ne sais pas quel plugin vous utilisez pour vos MRU, mais je suppose que c'est celui qui ouvre la liste MRU dans une fenêtre temporaire avec un nom qui correspond au modèle? *, Et le chargement ultérieur de la vue est en quelque sorte jouer avec vos MRU.

Par conséquent, la solution est d'utiliser quelque chose d'un peu plus précis pour correspondre Vimrc:

autocmd BufWinLeave .vimrc mkview 
autocmd BufWinEnter .vimrc silent loadview 

Il est possible que cela fonctionnera aussi, et est plus générale:

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

Les détails de vue sont enregistrés dans le fichier de vue dans le répertoire vimfiles\view. Un fichier de vue distinct est créé pour chaque fichier que vous modifiez.

+0

-ce que les autocommandes fonctionnent comme prévu, sinon ? J'ai mon 'mkview' réglé sur' BufWrite' au lieu de 'BufWinLeave', et mon' loadview' sur 'BufNewFile, BufRead' au lieu de' BufWinEnter'. Je ne sais pas si l'un ou l'autre est "correct". – Jay

+2

... également, étant donné qu'un fichier de vue est créé pour chaque fichier que vous modifiez, vous pouvez envisager de restreindre les extensions pour lesquelles vous enregistrez des vues. Généralement, vous ne gagnez pas beaucoup en sauvegardant la vue pour un fichier avec une syntaxe reconnue pour le pliage automatique. – Jay

2

J'ai eu un problème similaire. peut-être que vous devez créer le répertoire qui contient les données.

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

par Jays commente que c'est la solution la plus élégante, j'ai BEAUCOUP de plugins et l'exécute sur plusieurs OS et je viens de le tester.

autocmd BufWrite * mkview 
autocmd BufRead * silent loadview 

Il ne casse pas MRU et vous faire devez double requête MRU Il ne l'erreur pas lorsque vous: nouveau dans un tampon vide Il ne nécessite pas vous aussi de créer FileType Patern pour chaque type de fichier vous pouvez éventuellement utiliser.

NOTE: l'utilisation de "loadview" sur "BufNewFile" semble être ce qui confond MRU, plutôt inutile d'essayer de rendre des plis sur un tampon vide que j'aurais pensé ??

+3

Cela recule pendant des choses comme [less.vim] (http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/) où il n'y a pas de nom de fichier. Aussi, si le fichier est protégé en écriture (comme les pages d'aide!). – pieman72

+0

Tous les plis sont effacés dès que j'enregistre un fichier. –

1

Ajouter ce au sommet de votre vimrc pour vous assurer que le viewdir est présent

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

Ensuite, dans votre section autocommandes:

autocmd BufWrite * mkview 
autocmd BufNewFile,BufRead * silent loadview