Vim:如何保存折叠?

时间:2016-05-31 18:17:15

标签: vim

在我目前的vim设置中,我有set foldmethod=syntax,但每当我保存文件时,它都会重新打开我打开的任何内容。有任何想法吗?

FWIW这是我目前的vimrc

4 个答案:

答案 0 :(得分:8)

这种行为很正常。 Vim的默认设置是不记得你折叠的代码与从一个会话到下一个会话展开的代码。您可以保存当前折叠;编辑完文件后,在退出vim之前,输入命令:mkview。当您下次打开文件时,如果您输入:loadview,它将恢复您的折叠。如果您希望自动执行此操作,请将此代码添加到您的vimrc

augroup remember_folds
  autocmd!
  autocmd BufWinLeave * mkview
  autocmd BufWinEnter * silent! loadview
augroup END

如果你想要更多功能,这个插件会做同样的事情http://www.vim.org/scripts/script.php?script_id=4021

更新:抱歉,我的原始代码无效。它现在应该工作。

答案 1 :(得分:0)

我不是vim config忍者,但我破解了各种解决方案来实现这一目标,该解决方案在nvim / Neo Vim上对我有效,并且不会抛出错误。

augroup remember_folds
  autocmd!
  au BufWinLeave ?* mkview 1
  au BufWinEnter ?* silent! loadview 1
augroup END

答案 2 :(得分:0)

保存文件绝对不应该使Vim重置折叠。但是,例如BufWritePost操作可能会触发这种行为。

更具体地说,vim-go具有打开的bug,这会导致golang文件出现此问题。该错误的注释列出了一些解决方法。设置g:go_fmt_experimental = 1对我有用。

答案 3 :(得分:0)

augroup remember_folds
  autocmd!
  autocmd BufWinLeave *.* mkview
  autocmd BufWinEnter *.* silent! loadview
augroup END

如果您在使用 Telescope 或其他创建缓冲区(窗口、对话框等)之类的插件时遇到折叠问题,到目前为止,上述内容似乎对我有用。< /p>

它基本上需要缓冲区名称中的句点(foo.sh、script.py、server.js 等)来触发。来自 Telescope 之类的动态缓冲区似乎与该模式不匹配。