Vim 折叠没有结束标记

标签 vim

我想在开始标记之间折叠文本,例如:

//// Block 1

... some code 1 ...

//// Block 2

... some code 2 ...

哪里////将用作开始标记和折叠 //// Block 1将折叠到 //// Block 2 之前的行.

这是可能的吗?

不喜欢我设置foldmarker没有结束参数,如果我使用 ////,它会折叠太多作为开始和结束标记。

我可以用 zf 手动创建折叠,但这些是文件相关的,如果你改变它就会中断。

最佳答案

您可以像这样编写自己的折叠表达式:

function! BlockFolds()
   let thisline = getline(v:lnum)
   if match(thisline, '^\/\/\/\/ Block') >= 0
      return ">1"
   else
      return "="
   endif
endfunction

setlocal foldmethod=expr
setlocal foldexpr=BlockFolds()

如果您在 vim 中使用它,您将获得所需的效果:

demo

显然你可以在你的 .vimrc 中找到它。或基于文件扩展名。
您可以在此处了解自定义折叠表达式的工作原理:http://vimcasts.org/episodes/writing-a-custom-fold-expression/

关于Vim 折叠没有结束标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373627/

相关文章:

bash - 如何防止 vim bash 命令使用全屏?

linux - 编辑scons文件时如何让vim高亮为python?

erlang - 设置不起作用,没有代码折叠,没有代码完成

c++ - 直接从vim编译

vim - gvim 的尾部功能

vi 丢失的 Git 提交消息

regex - 如何使用 Neovim 正则表达式进行单独选择(两个字符不连续)?

vim - 恢复交换文件后丢失了colorcheme

regex - 在Vim中查找和替换,重用 token

Vim 用随机生成的数字替换正则表达式