在vim中折叠重复的线条

时间:2017-09-14 13:36:17

标签: vim vim-plugin vim-syntax-highlighting

我有一个文件,下面是内容。

一个 一个 一个 一个 一个 一个 一个 一个 一个 。 。 。 一个 一段代码...... 一个 一个 一个 。 。 甲

我想在vim中使用折叠

这样的东西
  • 甲 一段代码
  • A

通过折叠重复的线条来创建2个折叠。 这应该在我打开文件时自动发生。是否有可能在vimrc中进行?

2 个答案:

答案 0 :(得分:2)

这个:help fold-expr

怎么样?
setlocal foldenable foldmethod=expr
let &l:foldtext = 'printf("+-%s %d times: %s", v:folddashes, (v:foldend - v:foldstart + 1), getline(v:foldstart))'
let &l:foldexpr = 'getline(v:lnum) ==# getline(v:lnum + 1) && v:lnum < line("$") ? 1 : (getline(v:lnum - 1) ==# getline(v:lnum) ? "<1" : 0)'

答案 1 :(得分:1)

应该可以使用setlocal foldmethod=expr来编写自己的函数:

setlocal foldmethod=expr
setlocal foldexpr=CustomFold(v:lnum)

function! CustomFold(lnum)
  if getline(a:lnum) == getline(a:lnum-1) || getline(a:lnum) == getline(a:lnum+1)
    return '1'
  endif

  return '0'
endfunction

然而,这是未经测试的,您不希望对所有文件执行此操作。但它应该指向正确的方向。它也不会100%符合您的标准,但一旦您遇到特定问题,您可以随时再次询问