【问题标题】:Change the text in folds更改折叠中的文本
【发布时间】:2011-08-24 09:55:27
【问题描述】:

我注意到折叠文本可以显示有用的信息。它们通常显示类似

+-- 5 lines: <div id="header-inner">--------------------------------------------

是否可以更改这些行中的文本?我注意到foldexpr 中的某些东西是可能的,但是否有可能完全重新设计折叠?
例如
+ <div id="header-inner"> : "possible comment from line above" : row 27 : length 5

谢谢

【问题讨论】:

  • :help foldtext 应该让你开始

标签: vim folding


【解决方案1】:

从您的问题中我有一些不明白的地方,例如您使用的是哪种折叠方法,或者“行数”指的是什么,但这里有一个自定义的 foldtext 函数,应该可以大致完成您想要的操作:

function! MyFoldText()
    let nl = v:foldend - v:foldstart + 1
    let comment = substitute(getline(v:foldstart),"^ *","",1)
    let linetext = substitute(getline(v:foldstart+1),"^ *","",1)
    let txt = '+ ' . linetext . ' : "' . comment . '" : length ' . nl
    return txt
endfunction
set foldtext=MyFoldText()

解释:

  1. 找出折叠所包含的行数。
  2. 从第一个折叠行之前的行中获取“注释”(并删除前导空格)。
  3. 从折叠的第一行获取文本(并删除前导空格)。
  4. 使用适当的格式将上述信息组装到返回的折叠文本中。

希望这会有所帮助。它应该很容易满足您的需求。

【讨论】:

  • 谢谢。我看到 vim 真的很强大 :-) 我正在使用 foldmethod=expr,但是您的解决方案适用于每种折叠方法? row 应该是指折叠开始的行号。我会试试 v:lnum
  • v:lnum 不起作用,但 v:foldstart 显示正确的行号。只有一点细节,字符串的结尾(------------------------------------------------- -------) 无法删除。
  • 是的,foldtext 适用于每种折叠方法(如果我从正确的行读取comment,我就不是,但如果它有效,那么就没有问题!)。您可以通过set fillchars=fold:\ 去掉尾随的----(注意尾随空格)。
  • 很好,我正在根据需要自定义您的代码。我试过set fillchars=fold:\s,但似乎无法设置空格
  • fillchars 选项设置使用哪个字符来填充空格,所以不能使用\s(意思是“任何空格”)。 comment 或 linetext 变量中是否存在尾随空格?如果是这样,您可以尝试使用 let comment = substitute(comment,"\\s*$","",1) 之类的东西将其删除(除了现有的替换)。
【解决方案2】:

您还可以从Steve Losh’s bitbucket repo page about vim 检查折叠配置。

外观很漂亮,也很有条理!

要查看它是什么样的,您可以在youtuebe video 中查看它。

【讨论】:

  • 不错的视频!我想我现在找到了一种新的方式来组织我的 Increing big vimrc 文件。
猜你喜欢
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 2013-11-29
相关资源
最近更新 更多