终端中的语法突出显示


43

许多面向程序设计的编辑器会将源代码着色。是否存在将使源代码着色以在终端中查看的命令?

我可以使用打开文件emacs -nw(在终端中打开而不是弹出新窗口),但是我正在寻找类似的文件less(或与一起使用 less -R,它通过输入中的颜色转义序列)。

Answers:


66

highlight支持与以下相同的颜色转义序列的终端上xterm

highlight -O xterm256 your-file | less -R

ruby-rouge

rougify your-file | less -R

python-pygments

pygmentize your-file | less -R

使用GNUsource-highlight

source-highlight -f esc256 -i your-file | less -R

您还可以vimmacros/less.sh附带的脚本的帮助下用作传呼机vim(有关详细信息,请参见:h lessvim):

在我的系统上:

sh /usr/share/vim/vim74/macros/less.sh your-file

或者,您可以使用任何支持HTML输出并使用elinksw3m作为GNU一样的pager(或elinks -dump -dump-color-mode 3 | less -R)的语法突出显示器source-highlight

source-highlight -o STDOUT -i your-file | elinks -dump -dump-color-mode 3 | less -R

Highlight可以将文本转换为SVG / HTML,这非常令人兴奋。
utopic eexpress'Apr 1'17

14

我将GNU source-highlight与之结合使用less -R。将以下行添加到您的Shell的初始化文件中(~/.bashrc例如):

cless(){
 LESSOPEN='| source-highlight --failsafe --out-format=esc256 -o STDOUT -i %s 2>/dev/null ' less -R "$@"
}

那应该根据所使用的语言自动为源代码着色,如果不能,则它将less直接在输入中启动。


6

如果您less更一般地对颜色感兴趣,则可能要看一下lesspipe.sh。参见,例如,http://freecode.com/projects/lesspipe

lesspipe.sh是less的手册页中所述的pager less的输入过滤器。该脚本在兼容ksh的外壳程序(例如bash,zsh)下运行,使您可以减少查看二进制内容,压缩文件,归档文件和归档文件中包含的文件的时间。

与文本编辑器类似,它还将对shell脚本,perl脚本等进行着色,但不使用任何“预处理”程序进行着色。


谢谢!我认为这lesspipe.sh是我在发布问题之前想要记住的东西……
亚历克

2

我享受简单性,并且使用nano文本编辑器,在这种情况下,我通常按以下步骤进行:

检查女巫的语法突出显示是可用的: ls -la /usr/share/nano/

使用以下命令或通过手动将其包含在我的nanorc文件中

echo 'include /usr/share/nano/sh.nanorc' >> ~/.nanorc

关于less我建议看看这个页面


0

根据StéphaneChazelas的建议,我制作了一个bash函数以使用highlightshow Syntax高亮显示,并将其放入.bashrc等中。它运作良好,快速且有效。

s(){ highlight --force -O ansi $1 | /usr/bin/less -R; }

突出支持202语言语法格式。见highlight --list-scripts=langs


0

您可以使用e2ansi软件包,该软件包为诸如more和的寻呼机提供语法突出显示支持less

该软件包使用所有文本编辑器Emacs的母亲来执行实际的语法突出显示。此外,还执行了Emacs通常执行的所有其他转换(如解压缩文件)。

以下是使用less和 查看文件的结果e2ansi

例

组态

该软件包提供了一个命令行工具e2ansi-cat,该工具以批处理方式启动Emacs,打开文件,语法突出显示它们,并使用ANSI序列呈现结果。

您可以less通过将以下变量设置为(例如,初始化文件的位置可能不同)将其集成到其中:

export "LESSOPEN=||-/usr/local/emacs --batch -Q -l ~/.emacs -l bin/e2ansi-cat %s"
export "LESS=-r"
alias "more=less -X -E"

在上述配置中,less还原原始终端窗口内容,而more在提示后仅输出新内容。

注意:如果您使用的旧版本less,则它可能不支持 ||-语法,在这种情况下,您可能需要使用 LESSOPEN=|/usr/local/emacs ...

less在管道中使用

中的“-”字符LESSOPEN表示在将文本传递到时也应使用输入过滤器less。在这种情况下,Emacs只能依靠文本本身(而不是文件名)。幸运的是,Emacs为此提供了一个系统。此外,提供的文件文件还 e2ansi-magic.el设置了其他文件类型。例如:

管道实例

为什么要使用Emacs?

  • Emacs几乎支持所有编程语言和结构化文本格式。在大多数情况下,语法突出显示支持非常出色。
  • 您可以轻松添加对更多语言和格式的支持,或者修改现有的软件包以适合您的需求。
  • Emacs支持颜色主题。使用时e2ansi,在中查看文件时主题的颜色会保留less。您可以从多种来源中选择合适的颜色主题,也可以自行设计。
  • 如果使用Emacs作为选择的编辑器,则在编辑器中将获得与使用来查看文件时相同的突出显示 less(减去ANSI序列格式和终端窗口中的限制)。
  • less将利用Emacs执行自动转换的功能,例如解压缩文件。实际上,您可以教Emacs执行任何类型的转换,例如使用外部工具将二进制文件自动转换为人类可读形式。
  • 您可以使用Emacs的语法(例如)来查看位于其他计算机上的文件/USER@HOST:FILENAME

有用的链接

操作系统说明

  • 在MS Windows上,控制台本身不支持ANSI序列。幸运的是,该less应用程序能够渲染它们。我不知道lessMS Windows 的任何当代二进制发行版,并且所提供的生成文件很难使用。幸运的是,less使用CMake可以轻松构建它,有关详细信息,请参见此文本

  • OS X发行了的旧版本less。幸运的是,直接从源代码构建现代版本很容易。


-2

这称为语法突出显示。

给定源文件时,GNU Source-highlight会生成带有语法高亮显示的文档。

我使用lessfilter下面的脚本,也可以less像下面这样自动调用它:

export LESSOPEN="| /path/to/lessfilter %s"
export LESS=' -R '

我找到了这篇文章,并以这种方式开始这样做:

#!/bin/sh
file -b -L "$1" | grep -q text &&
  /usr/share/source-highlight/src-hilite-lesspipe.sh "$1"

src-hilite-lesspipe.sh附带source-highlight但并非所有发行版都包含)


4
“如果您转至本文,作者必须使用Mac,因为他的命令使用大写字母”:恐怕您有点困惑:显然,您不知道export定义了环境变量,而不是别名。该命令 less使用环境变量中的标志LESS,因此您的答案需要一些工作。
亚历克西斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.