语法高亮翻页器

13

目前,我使用 most 作为我的分页器。虽然它对于man页面具有有用的语法突出显示,但在其他任何地方都缺乏带颜色的语法突出显示(我特别寻找diff/C++)。

同时,pygments是一个很棒的程序。我可以轻松地使用它进行彩色输出:

# ./pygmentize -f console256 ${file}
hg diff | ./pygmentize -f console256 -l diff

现在,我希望能够分页输出,所以我只需使用:

# ./pygmentize -f console256 ${file} | most
hg diff | ./pygmentize -f console256 -l diff | most

此时,大多数转储都将着色控制字符全部显示在我的屏幕上,如下所示:

^[[38;5;28;01mclass^[[39;00m ^[[38;5;21;01mheap_allocator^[[39;00m
{
^[[38;5;28;01mpublic^[[39;00m^[[38;5;241m:^[[39m

这当然是不可读的。我查阅了most命令的man页,但找不到任何“嘿,以颜色显示控制字符而不是打印它们”的选项。 less拥有与most相同的垃圾行为,但more完美地显示颜色,显然它也有局限性。

是否有一种分页程序支持语法高亮或可以串联一些参数和程序使其生效?最终,我想要突出显示来自Mercurial的差异和日志,所以也许有一些快捷方式...

5个回答

10

我可以建议使用vimpager吗?

首先,最近的vim发行版(我相信6.0及以上版本)自带了一个类似于分页器的脚本。它非常简单和实用,并且类似于less。尝试一下:vim '+help less' +only

然而,更好的选择是Rafael Kitover编写的一个更加强大和健壮的脚本名为vimpager。它在GitHub(或者vimscripts)上有提供。如果你正在使用Homebrew的OS X,则只需执行brew install vimpager即可轻松安装。

此时,你只需要简单地设置$PAGER=vimpager,甚至可以将less替换为vimpager,它会工作得非常出色。

enter image description here


7

less -R 显示 ANSI 颜色序列(而不是扩展为脱字符号表示)。这将使语法高亮正常工作!

您还可以创建一个环境变量 LESS=-R,以使其成为默认行为。其他选项也类似;请参见 man less


我在 Mac 上没有看到这种行为。 - Harry Moreno

3

1
请不要仅仅将某个工具或库作为答案发布。至少在答案中演示它是如何解决问题的。 - Zoe stands with Ukraine
1
@Zoethetransgirl bat 文件名 - c z
这对我比vimpager更有效。由于某种原因,bat不会对typescript文件进行语法高亮。 - Harry Moreno

2

你可以尝试使用jed。是的,它是一个文本编辑器,而不是一个分页器,但它非常轻巧,并且默认安装包含了各种文件类型和语言的优秀配色方案。


1
很好 - jed支持将内容导入缓冲区(vim和普通的emacs不支持)。如何在jed中开启语法高亮?如果我使用jed ${FILE},高亮功能可以正常工作,但是当我使用cat ${FILE} | jed时却不能。 - Travis Gockel
我不认为这是可能的。实际上,这是一个非常棘手的问题,因为很容易编写出在许多语言中语法上有效的短程序。模式检测,就像大多数编辑器一样,只是基于文件扩展名。最简单的方法可能就是将标准输出重定向到具有适当扩展名的文件中。 - Tyler Eaves
程序已经启动后,打开语法高亮的命令序列是什么?我不熟悉emacs的衍生版本。 - Travis Gockel
不太确定。我已经有一段时间没有真正使用它了。执行“info jed”会显示相当详细的文档。 - Tyler Eaves

1
Jed有不同语言的语法高亮模式,类似于emacs。例如,如果您将C程序传输到其中,您可以通过按'ESC',然后'x',然后键入'c-mode'来打开突出显示。如果是php程序-将最后一部分更改为'php-mode'等等...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接