Vim:如何保存折叠?

Mik*_*raf 7 vim

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

FWIW这是我目前的vimrc:https: //github.com/MaerF0x0/VimSetup/blob/2c63af1c4c7aad22c0ecac5e653c474a1fb81d36/vimrc

lwa*_*ink 12

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

augroup remember_folds
  autocmd!
  autocmd BufWinLeave * mkview
  autocmd BufWinEnter * silent! loadview
augroup END
Run Code Online (Sandbox Code Playgroud)

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

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

  • 最好使用静默加载来避免错误:`autocmd BufWinEnter *.* silent!加载视图` (3认同)
  • 这不是一个好的解决方案,因为视图包含映射。考虑以下情况:您有一个插件“ p”,打开“ f”,将其关闭,然后卸载“ p”。现在,打开“ f”:相对于“ p”的所有映射都仍然存在,尽管它们都不起作用,甚至可能会产生真正的怪异行为。 (3认同)
  • 这根本没有回答问题。他不是在退出vim后询问如何保留折叠,而是询问如何在保存文件时保留折叠。当foldmethod = syntax vim再次折叠时,每次保存时都会重复所有功能。 (3认同)
  • @Rightleg 这可以通过在 vim rc 中放置 `set viewoptions-=options` 来纠正,这使得 `:mkview` 在创建折叠时忽略本地绑定。 (2认同)

Ada*_*dam 5

我不是 vim 配置忍者,但我破解了各种解决方案来实现这一点,这对我在 nvim/Neo Vim 上工作而不会抛出错误。

augroup remember_folds
  autocmd!
  au BufWinLeave ?* mkview 1
  au BufWinEnter ?* silent! loadview 1
augroup END
Run Code Online (Sandbox Code Playgroud)


sam*_*mpi 5

保存文件绝对不会导致 Vim 重置折叠。但是,例如 BufWritePost 操作上的某些自动命令可能会触发此类行为。

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


小智 5

augroup remember_folds
  autocmd!
  autocmd BufWinLeave *.* mkview
  autocmd BufWinEnter *.* silent! loadview
augroup END
Run Code Online (Sandbox Code Playgroud)

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

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