在我目前的Vim设置中,我有set foldmethod=syntax,但是每当我保存我的文件时,它会重新折叠我打开的任何东西。有什么想法吗?这是我目前的vimrc
set foldmethod=syntax
6jjcrrmo1#
这种行为是正常的。Vim的默认设置是不记得你折叠了哪些代码,从一个会议到下一个会议。您可以保存您当前的折叠;当你编辑完一个文件,在退出Vim之前,输入命令:mkview。当你下次打开文件时,如果你输入:loadview,它会恢复你的折叠。如果你想让它自动发生,把这段代码添加到你的vimrc中
:mkview
:loadview
augroup remember_folds autocmd! autocmd BufWinLeave * mkview autocmd BufWinEnter * silent! loadview augroup END
如果你想要更多的功能,这个插件做同样的事情http://www.vim.org/scripts/script.php?script_id=4021。
**更新:**对不起,我的原始代码不工作。现在应该能用了
e0bqpujr2#
我不是一个vim配置忍者,但我破解了各种解决方案来实现这一点,这对我来说在nvim/Neo Vim上没有抛出错误。
augroup remember_folds autocmd! au BufWinLeave ?* mkview 1 au BufWinEnter ?* silent! loadview 1 augroup END
a2mppw5e3#
保存文件绝对不会导致Vim重置折叠。然而,一些autocmd上,例如,BufWritePost操作可能会触发此类行为。更具体地说,vim-go有一个开放的bug,这会导致golang文件出现此问题。这个bug的注解列出了几个解决方法。设置g:go_fmt_experimental = 1为我工作。
vim-go
g:go_fmt_experimental = 1
ukxgm1gy4#
augroup remember_folds autocmd! autocmd BufWinLeave *.* mkview autocmd BufWinEnter *.* silent! loadview augroup END
如果你在使用Telescope或其他创建缓冲区(窗口,对话框等)的插件时遇到问题,以上方法似乎对我很有效。它基本上需要在缓冲区(foo.sh,script.py,server.js等)的名称中使用句点来触发。像望远镜这样的动态缓冲器似乎不符合这种模式。
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!
silent!
5条答案
按热度按时间6jjcrrmo1#
这种行为是正常的。Vim的默认设置是不记得你折叠了哪些代码,从一个会议到下一个会议。您可以保存您当前的折叠;当你编辑完一个文件,在退出Vim之前,输入命令
:mkview
。当你下次打开文件时,如果你输入:loadview
,它会恢复你的折叠。如果你想让它自动发生,把这段代码添加到你的vimrc中如果你想要更多的功能,这个插件做同样的事情http://www.vim.org/scripts/script.php?script_id=4021。
**更新:**对不起,我的原始代码不工作。现在应该能用了
e0bqpujr2#
我不是一个vim配置忍者,但我破解了各种解决方案来实现这一点,这对我来说在nvim/Neo Vim上没有抛出错误。
a2mppw5e3#
保存文件绝对不会导致Vim重置折叠。然而,一些autocmd上,例如,BufWritePost操作可能会触发此类行为。
更具体地说,
vim-go
有一个开放的bug,这会导致golang文件出现此问题。这个bug的注解列出了几个解决方法。设置g:go_fmt_experimental = 1
为我工作。ukxgm1gy4#
如果你在使用Telescope或其他创建缓冲区(窗口,对话框等)的插件时遇到问题,以上方法似乎对我很有效。
它基本上需要在缓冲区(foo.sh,script.py,server.js等)的名称中使用句点来触发。像望远镜这样的动态缓冲器似乎不符合这种模式。
jxct1oxe5#
对于使用NeoVim的用户:
前5行是说:关闭缓冲区(文件或其他缓冲区)时,请执行以下操作:如果缓冲区名称遵循模式“.",则保存视图(所有折叠)。另外5个人在做同样的工作,但向后:打开文件时加载视图(所有折叠)。
当你第一次打开文件时,你可能会得到一个错误,因为你没有保存视图。为了防止这种情况发生,我在加载视图autocmd中插入了
silent!