【问题标题】:How can i fold both code and comments in Vim?如何在 Vim 中折叠代码和注释?
【发布时间】:2023-03-23 04:26:01
【问题描述】:

Vim 可以折叠 Ruby 代码,但不能折叠 cmets。

在 .vimrc 中添加这个以将 foldmethod 更改为 cmets 后,我无法再折叠代码。

autocmd FileType ruby,eruby
  \ set foldmethod=expr |
  \ set foldexpr=getline(v:lnum)=~'^\\s*#'

如何配置 Vim 以折叠 cmets 和代码?

【问题讨论】:

    标签: vim folding


    【解决方案1】:

    在我最近的 Vim 7.3.823 快照中,$VIMRUNTIME/syntax/ruby.vim(2009 年 12 月 2 日版本)具有 Ruby 构造和注释块的折叠功能。

    随便放

    :let g:ruby_fold = 1
    

    进入~/.vimrc。 (并确保您没有名为 ruby_no_comment_fold 的变量。)

    【讨论】:

      【解决方案2】:

      您可以使用foldmethod=marker 并添加{{{ / }}} 标记(或您选择的其他标记)来指示折叠的开始和结束位置。

      您还可以修改定义 ruby​​ 语法突出显示的文件,以调整它认为适合使用 foldmethod=syntax 折叠的内容。

      第三种选择是开发一个更复杂的例程以用于foldmethod=expr。例如,我使用定义为here 的vim 函数来定义如何折叠ruby 代码。它自动定义模块、类和方法的折叠以及紧接在它们之前的任何注释行;它支持折叠其他部分的标准折叠标记。它与foldexpr=ruby#MethodFold(v:lnum) 一起使用。

      更多关于折叠表达式应该如何表现的信息可以通过:help fold-expr 找到。还有一个不错的vimcast about that

      【讨论】:

        【解决方案3】:

        foldmethod 设置为indent 将根据缩进级别折叠行, 无论该行是注释还是代码。

        :set foldmethod=indent
        :help fold-indent
        

        【讨论】:

          【解决方案4】:

          我想你正在寻找

          set foldignore=#
          

          如果你想折叠块 cmets(如 /* .... */ 多行),请看我的另一篇帖子 in vi.stackechange

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-17
            • 1970-01-01
            • 2021-08-23
            • 2012-08-11
            • 2012-02-05
            • 2011-11-17
            相关资源
            最近更新 更多