Vim:如何保持折叠保存?

qrjkbowd  于 2023-10-20  发布在  其他
关注(0)|答案(5)|浏览(203)

在我目前的Vim设置中,我有set foldmethod=syntax,但是每当我保存我的文件时,它会重新折叠我打开的任何东西。有什么想法吗?
这是我目前的vimrc

6jjcrrmo

6jjcrrmo1#

这种行为是正常的。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

**更新:**对不起,我的原始代码不工作。现在应该能用了

e0bqpujr

e0bqpujr2#

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

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

a2mppw5e3#

保存文件绝对不会导致Vim重置折叠。然而,一些autocmd上,例如,BufWritePost操作可能会触发此类行为。
更具体地说,vim-go有一个开放的bug,这会导致golang文件出现此问题。这个bug的注解列出了几个解决方法。设置g:go_fmt_experimental = 1为我工作。

ukxgm1gy

ukxgm1gy4#

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

如果你在使用Telescope或其他创建缓冲区(窗口,对话框等)的插件时遇到问题,以上方法似乎对我很有效。
它基本上需要在缓冲区(foo.sh,script.py,server.js等)的名称中使用句点来触发。像望远镜这样的动态缓冲器似乎不符合这种模式。

jxct1oxe

jxct1oxe5#

对于使用NeoVim的用户:

vim.api.nvim_create_autocmd({"BufWinLeave"}, {
  pattern = {"*.*"},
  desc = "save view (folds), when closing file",
  command = "mkview",
})
vim.api.nvim_create_autocmd({"BufWinEnter"}, {
  pattern = {"*.*"},
  desc = "load view (folds), when opening file",
  command = "silent! loadview"
})

前5行是说:关闭缓冲区(文件或其他缓冲区)时,请执行以下操作:如果缓冲区名称遵循模式“.",则保存视图(所有折叠)。另外5个人在做同样的工作,但向后:打开文件时加载视图(所有折叠)。
当你第一次打开文件时,你可能会得到一个错误,因为你没有保存视图。为了防止这种情况发生,我在加载视图autocmd中插入了silent!

相关问题