我如何获得vim的foldtext来显示屏幕右侧的行数?

时间:2011-03-15 18:32:22

标签: vim

我试图在屏幕右侧显示行数,而不是在左侧与其他文本相邻。这可能吗?我当前的.vimrc foldtext函数连接前两行并保持当前缩进,然后是一些破折号,然后是行数:

function! MyFoldText()
    let line = getline(v:foldstart)
    let line2 = getline(v:foldstart + 1)
    let sub = substitute(line . "|" . line2, '/\*\|\*/\|{{{\d\=', '', 'g')
    let ind = indent(v:foldstart)
    let lines = v:foldend-v:foldstart + 1
    let i = 0
    let spaces = ''
    while i < (ind - ind/4)
        let spaces .= ' '
        let i = i+1
    endwhile
    return spaces . sub . ' --------(' . lines . ' lines)'
endfunction

所以,使用'|'作为屏幕边缘,而不是

|    line1 | line2 --------(5 lines)-----------------|

foldtext就像这样

|    line1 | line2 -------------------------(5 lines)|


附: 获得一些额外的修复也很好,例如拉动当前的tabstop设置而不是将其硬编码为4,并让它显示下一个实际代码(跳过注释,空格,括号等),而不仅仅是连接前两行。

2 个答案:

答案 0 :(得分:2)

下面这行就是我使用的,有点适合您的代码。您需要将偏移量设置为适合您情况的某个值;我想你可能希望偏移大约8或9:

let offset = 8
return spaces . sub . repeat('-', winwidth(0)-strlen(spaces . sub) - offset) . '('. lines .')'

答案 1 :(得分:1)

这是一个来自EightHeader插件帮助的示例,它完全符合您的要求:

如果您不喜欢默认的'foldtext',可以通过设置为自定义它 EightHeaderFolds()

例如,默认情况下,关闭的折叠看起来像这样:

```+-- 45 lines: Fold level one
+--- 67 lines: Fold level two

如果您想将其更改为此类:

Fold level one................45 lines
  Fold level two..............67 lines

...然后你可以使用这个功能:

let &foldtext = "EightHeaderFolds( '\\=s:fullwidth-2', 'left', [ repeat( '  ', v:foldlevel - 1 ), '.', '' ], '\\= s:foldlines . \" lines\"', '' )"