gpt4 book ai didi

vim - 阻止 vim 动态更新折叠

转载 作者:行者123 更新时间:2023-12-04 07:38:35 24 4
gpt4 key购买 nike

有什么办法可以阻止 vim 即时自动更新折叠?我真的很喜欢 vim 的折叠,我更喜欢在语法模式下使用它,以便在我输入时创建折叠。但是例如,当我编写 C++ 代码并编写一个括号 { 时,它会自动关闭所有后续折叠,然后当我再次用 } 关闭括号时,vim 会自动展开所有后续折叠,这意味着我必须重新折叠所有内容。

另一个相关的问题,如果我在不同的缓冲区中打开相同的文档,比如说我已经运行了“:split”,然后写一个开放的括号 { 将在我打开括号的折叠下嵌套缓冲区中的所有折叠,然后关闭它会解开褶皱,但也会关闭所有褶皱。如果我使用“。”或“->”访问成员函数/变量,它将缓冲区中的所有折叠重置为当前折叠级别,无论我自己打开/关闭了哪些折叠。

当我在两个缓冲区中打开同一个文档时,这有点令人沮丧,因此我可以在编写另一个函数时读取一个函数的内容,因为我经常需要切换缓冲区并重新打开我的折叠。

在我的 .vimrc 我有

set foldmethod=syntax

就是这样。对于自动完成,我使用 clang-complete 和 supertab 与:
let g:SuperTabDefaultCompletionType = "<c-x><c-u><c-p>"

我认为这就是可能影响这一点的一切。

编辑:

Added some pictures to help illustrate the problem

最佳答案

这两个问题都可以通过以下两个autocmd来解决s:

autocmd InsertLeave,WinEnter * setlocal foldmethod=syntax
autocmd InsertEnter,WinLeave * setlocal foldmethod=manual

这将设置缓冲区本地 'foldmethod'manual当进入插入模式或其窗口(缓冲区显示)离开时,并将其设置为 syntax当插入模式离开或进入其窗口时。

这是有效的,因为设置 'foldmethod'manual将保留由 syntax 自动创建的折叠就像您自己(手动)设置它们一样,并且不会根据文件的语法更新手动折叠。

我发现这个解决方案有两个错误:
  • 在插入模式下切换窗口时,autocmd将设置 'foldmethod'syntax对于新窗口,即使它处于插入模式并且应该设置为 manual .

    这对我来说真的不是问题,因为我像一个文明人一样使用 Vim 并且默认在正常模式下运行。
  • 什么时候
  • 创建一个新缓冲区(例如通过读取文件)
  • 'foldlevel'0
  • 并且使用了特定的语法(我可以用 C 文件复制这个问题)
  • oO命令用于进入插入模式 第一次在那个缓冲区 (做 i<esc>o 不会复制错误),

  • 然后将打开光标下方的所有折叠。

    我在测试上述解决方案时无意中发现了这一点,现在回想起来我很惊讶我发现了它;几乎不值一提。我不打算尝试编写具有复制错误所需的确切语法的测试文件,因此这可能会被另一个 eon 忽视。

    几个月前我实际上发现了这个问题并使用了解决方案 Ben linked to有一段时间,在最终因一个缓冲区问题(您的第二个问题)而对多个窗口感到恼火以解决它之前。

    所以感谢 Ben 的解决方案,以及你提出这个问题!

    关于vim - 阻止 vim 动态更新折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280457/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com