如何获取vim';s foldtext以显示屏幕右侧的行数?

如何获取vim';s foldtext以显示屏幕右侧的行数?,vim,Vim,我试图让行数显示在屏幕的右侧,而不是与其他文本一起显示在左侧。这可能吗?My current.vimrc foldtext函数连接前两行并保持当前缩进,后面是一些破折号,然后是行数: function! MyFoldText() let line = getline(v:foldstart) let line2 = getline(v:foldstart + 1) let sub = substitute(line . "|" . line2, '/\*\|\*/\|{{

我试图让行数显示在屏幕的右侧,而不是与其他文本一起显示在左侧。这可能吗?My current.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)|

附笔
如果能得到一些额外的修复,比如将当前的tabstop设置改为硬编码为4,并让它显示下一个实际代码(跳过注释、空格、括号等),而不是仅仅连接前两行。

我使用的是类似下面这一行的内容,有点适合您的代码。您需要将偏移量设置为适合您的情况的某个值;我认为您可能希望偏移量为8或9左右:

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

以下是插件帮助下的一个示例,它完全满足您的需求:

如果您不喜欢默认的“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\"', '' )"

可以使用winwidth('.')计算当前窗口的宽度,但当窗口大小更改时,foldtext可能不会更新。就我个人而言,我喜欢将行号对齐为80个字符,这也提醒我在哪里包装代码。有趣。我一直在想如何实现这一点。。。要从winwidth和/或80个字符中减去一个字符串中已有的字符数,如何计算?vimscript有一个
strlen()
函数。我建议查看
:帮助功能列表
。在编写脚本时,这是一个非凡的参考。这正是我所需要的。谢谢您应该使用
strdisplaywidth()
而不是
strlen()
let &foldtext = "EightHeaderFolds( '\\=s:fullwidth-2', 'left', [ repeat( '  ', v:foldlevel - 1 ), '.', '' ], '\\= s:foldlines . \" lines\"', '' )"