4

我正在尝试为hg log显示第一行的前 N ​​个(例如 72 个)字符的部分创建一个自定义模板。根据这个答案,我到目前为止得到了一个不同的问题:

hg log --template '{desc|strip|firstline}\n'

现在我试图将该位限制为一定数量的字符。但是,相应的模板使用文档不会产生“子字符串”、“左”等的搜索结果。我尝试了一些事情,包括

hg log --template '{desc|strip|firstline|strip|50}\n'

也只是为了测试

hg log --template '{desc|strip|50}\n'

但他们给出了一个错误:

hg:解析错误:未知函数'50'

我会冒险猜测我想要的东西是可能的,但我似乎无法找到合适的语法。如何构建一个模板来输出提交消息的第一行,最多 N 个字符?

4

1 回答 1

5

您可以使用正则表达式和sub()函数来完成此操作。例如:

hg log --template '{sub("^(.{0,50})(.|\n)*","\\1",desc)}\n'

sub()函数接受三个参数,模式、替换和要处理的字符串。在此示例中,我们使用了一个组,该组捕获 0 到 50 个字符(换行符除外),然后是另一个模式,它会吞下其余的字符(以便将其丢弃)。替换字符串仅显示第一组,我们将desc其用作输入。只需将50上面示例中的宽度更改为您实际想要的宽度。

如果您不希望描述在单词中间被截断,您也可以与 .fill()一起使用firstline。在这里,fill()将输入分成几行,然后我们使用输出的第一行。例子:

hg log --template '{fill(desc,"50")|firstline}\n'

请注意,其中带有破折号的单词仍可能被截断,因为fill()将破折号后面的位置视为换行符的有效选择。

于 2015-06-18T09:14:31.293 回答