16

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

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

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

有什么建议么?

编辑:

下面的代码解决了这个问题:

au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview

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

4

6 回答 6

15

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

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

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

因此,解决方法是使用更具体的东西来匹配 .vimrc:

autocmd BufWinLeave .vimrc mkview
autocmd BufWinEnter .vimrc silent loadview 

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

autocmd BufWinLeave .* mkview
autocmd BufWinEnter .* silent loadview 
于 2010-05-26T12:29:33.170 回答
9

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

autocmd BufWrite * mkview
autocmd BufRead * silent loadview

它不会破坏 MRU 并使您必须双重查询 MRU 当您 :new 进入空缓冲区时不会出错 它也不需要您为可能使用的每种文件类型创建 FileType 模式。

注意:在“BufNewFile”上使用“loadview”似乎会使 MRU 感到困惑,而尝试在空缓冲区上渲染折叠是毫无意义的?

于 2011-04-26T16:42:10.747 回答
2

我有一个类似的问题。也许您必须创建保存数据的目录。

mkdir -p ~/.vim/view
chmod 0750 ~/.vim ~/.vim/view
于 2010-01-26T20:37:05.707 回答
2

在 Arch Linux 中使用 Neovim 时,我一直收到错误消息,直到我附加了一个 ! 沉默后(沉默!)。这是我的 ~/.vimrc 条目,

autocmd BufWrite * mkview
autocmd BufRead * silent! loadview

详情在这里:

https://github.com/neovim/neovim/issues/7442#issuecomment-339752054

于 2017-10-26T18:29:46.037 回答
1

将此添加到 vimrc 的顶部以确保存在 viewdir

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

然后在您的 autocmds 部分:

autocmd BufWrite * mkview
autocmd BufNewFile,BufRead * silent loadview
于 2012-03-27T08:20:11.160 回答
0

视图详细信息保存在vimfiles\view目录中的视图文件中。为您编辑的每个文件创建一个单独的视图文件。

于 2010-01-26T20:32:45.630 回答