代码折叠未保存在我的vimrc中

ale*_*nco 15 vim config fold

我将以下代码添加到我的.vimrc中:

" save and restore folds when a file is closed and re-opened
autocmd BufWinLeave *.* mkview
autocmd BufWinEnter *.* silent loadview 
Run Code Online (Sandbox Code Playgroud)

HTML和CSS文档保存并恢复它们的折叠,但代码折叠没有保存在我的.vimrc中

有什么建议?

编辑:

以下代码解决了这个问题:

au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview
Run Code Online (Sandbox Code Playgroud)

但如果我写它,MRU文件会从我的列表中消失(我必须打开MRU两次以查看我最近的文件列表为什么?)

Ric*_*ich 15

问题是你的原始autocmd行被设置为匹配模式*.*,即任何包含一些字符的文件名,后跟一个点,后跟一些更多的字符.

所以文件test.htmlanothertest.css将匹配,并且您的命令将运行,但是.vimrc,在点之前没有任何内容,将不会匹配.

解决的办法是设置一个自动命令这匹配.vimrc.你的猜测?*与此匹配(因为它正在寻找任何字符,后跟任意数量的其他字符),但你说它会以某种方式影响MRU.我不知道你为你的MRU使用了什么插件,但我猜它是在一个名称与?*模式相匹配的临时窗口中打开MRU列表的那个,并且后续加载视图是某种方式弄乱你的MRU.

因此,修复是使用更具体的东西来匹配.vimrc:

autocmd BufWinLeave .vimrc mkview
autocmd BufWinEnter .vimrc silent loadview 
Run Code Online (Sandbox Code Playgroud)

这也可能会起作用,而且更为通用:

autocmd BufWinLeave .* mkview
autocmd BufWinEnter .* silent loadview 
Run Code Online (Sandbox Code Playgroud)


小智 8

Per Jays评论这是最优雅的解决方案,我有很多插件并在多个操作系统上运行它并且刚刚测试过它.

autocmd BufWrite * mkview
autocmd BufRead * silent loadview
Run Code Online (Sandbox Code Playgroud)

它不会破坏MRU并使您必须双重查询MRU当您执行以下操作时不会出现错误:new into a empty buffer它也不需要您为可能使用的每种文件类型创建FileType patern.

注意:在"BufNewFile"上使用"loadview"会混淆MRU,而无意义尝试在空缓冲区上渲染折叠我会想到??

  • 在没有文件名的[less.vim](http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/)这样的东西中,这很糟糕.此外,如果文件是写保护的(如帮助页面!). (3认同)