如何通过Less语法高亮显示


133

有没有办法语法突出显示我在Less中看到的文件?

实际上我正在使用此命令打开一个xml文件(有时是一系列文件)

less htmleditors/htmleditors_config.xml

要么

less [multiple files]

我想留在Less(更好地学习该程序并使用我的知识:n和:p用于下一个/上一个导航)

但它也需要某种基本的语法突出显示 - 至少以不同方式显示注释。你知道怎么办?

Answers:


122

您可以使用GNU的源亮点,如在这里(路径可能会有所不同,见下文):

 export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

从Debian Stretch和Fedora 25开始,包名称和脚本路径不同

  • Debian的:

    sudo apt install libsource-highlight-common source-highlight
    dpkg -L libsource-highlight-common | grep lesspipe
    # /usr/share/source-highlight/src-hilite-lesspipe.sh
    
  • Fedora的:

    sudo dnf install source-highlight
    rpm -ql source-highlight | grep lesspipe
    # /usr/bin/source-highlight/src-hilite-lesspipe.sh
    

我运行时检索以下错误消息less ~/.zshrc。错误:src-hilite-lesspipe.sh: line 9: source-highlight: command not found。我在MacOSX上运行它。
JJD

2
@JJD你安装了source-highlight吗?
Max Nanasy 2012年

13
OSX : brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s"。请注意路径更改。
格雷格林德2014年

23
在Debian: ,,sudo apt-get install source-highlightexport LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"export LESS=' -R '
摩根库尔贝

3
小警告:source-highlight目前不支持markdown。
dhulihan 2016年

96

以前的答案中最好的一个:你可以通过按下来从更少的内部调用系统默认编辑器v


3
哇!这非常有用!
跳舞

13
在我的Ubuntu盒子上打开Nano的诅咒!
jamesc 2013年

5
然后将$ EDITOR或$ VISUAL设置为vim(或emacs,或gedit,或joe,或ed,或mined,或......)。
Daniel H

@jamesc FYI,你可以在Nano中启用语法高亮,这里是如何。
Man船长2016年

@CaptainMan Nope nope nope!我将默认值更改为vim,就像Daniel H所说的那样!:D
jamesc 2016年

33
pygmentize somefile.ex | less -R

要么

function cless () {
    pygmentize -f terminal "$1" | less -R
}

Pygmentize是Pygments Python语法highliter的一部分


3
pygmentize也适用LESSOPEN于其他答案中提到的东西。
内森

2
为了得到pygmentize你需要的Python,然后就可以安装pygmentize使用pip install pygments
wkschwartz 2015年

3
要获得less使用pygmentize语法高亮使用:which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s"-g使它与管道(less <(diff -u file1 files))一起工作。这是在现有community/pygmentizearch linux,并python-pygmentsdebian
x-yuri 2015年

我喜欢它的输出pygmentize,但发现它太慢了。我想出了这个答案,它更快,仍然是256色漂亮。
汤姆黑尔

16

我认为你应该使用文本编辑器。我自己喜欢vim。在查看文件时,这将为您提供大量功能,然后当您想要编辑它们时,您将已经了解基础知识。

以下是使用文本编辑器(特别是vim)的一些优点:

  • 语法高亮
  • 强大的运动命令
  • 跳转到文件中的特定位置(称为标记)
  • 折叠(当你只想看到函数存根时很有用)

要以只读模式打开文件,请使用以下命令:

vim -R <file name>

这是一个基本的导航指南:

j - move down one line
k - move up one line
h - left one char
l -right one char

ctrl-f - forward one page
ctrl-b - back one page

/<something> - search for something
n - next of whatever you searched for
N - next (search backwards) of whatever you searched for

:q - quit
:q! - quit without saving
:w - save

这是一个链接以获取更多信息:

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

回顾一下,如果你使用unix vim是非常基础的。我听说学习vim就像学习打字一样。它是您可以学习编程的下一个最有用的工具。

(为了避免编辑大战,你也可以查看emacs或其他编辑器,但我个人更喜欢vim)


1
我是第二个。Vim的启动速度尽可能快,许多键盘快捷键(例如,搜索,下一页,上一页)都是相同的。
杰里米·W·谢尔曼

10
仅仅view是因为在很多系统上,它是别名vim -R
Andrew Ferrier

15

正如其他人所说,你可以使用vim的力量。但重要的是,您可以在不学习如何使用vi / vim的情况下这样做。

Vim附带了一个less.vim脚本,可以很好地替代较少的脚本,全彩色语法高亮显示。它使用less键绑定(只需点击'q'即可退出)。

它有一些问题,所以我改进了它。这是我博客文章的截图(存档2013-04-09; 原始投票503):

https://github.com/huyz/less.vim的屏幕截图


2
真棒!但由于我无法立即找到该脚本,我想分享查找它的命令:find /usr/share/vim -name 'less.sh'这取自这个要点:gist.github.com/chauncey-garrett/9773770
nuala 2015年

添加@yoshi的评论,快速添加vimless命令(遵循命名法vimdiff),做:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious

链接是404!
acgtyrant

@acgtyrant现在应该修复; 感谢互联网档案馆。
bb010g

10

我也在寻找这个,并找到了使用Vim的另一个解决方案:http//ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

这个帖子相当陈旧,所以现在在更新的发行版vim 7.2上发布了.bashrc将会读取:alias vless ='vim -u /usr/share/vim/vim72/macros/less.vim'


1
MacVim附带了一个可以直接使用的shell脚本,位于:/Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick

1
这个功能记录在Vim本身的:help less
joeytwiddle

8

我很高兴地宣布一个新的软件包e2ansi,它为像more和的寻呼机提供语法高亮支持less

该软件包使用所有文本编辑器的母亲Emacs来执行实际的语法突出显示。作为额外的奖励,通常由Emacs执行的所有其他转换(如解压缩文件)也会执行。

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

例

组态

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

您可以less通过设置以下变量来集成它,例如(init文件的位置可能不同):

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。幸运的是,直接从源代码构建现代版本很容易。


对于OS X,我建议使用brew manager [ brew.sh /]brew dupes [ github.com/Homebrew/homebrew-dupes]来安装最新版本的东西less
drevicko 2016年

“由emacs提供支持” - 运行整个VM只是为了查看文件?;-)和+1
Alois Mahdal


2

source-highlight有一个.sh脚本位于/usr/share/source-highlight/*.sh。我创建了一个符号链接到它的名字hcat/usr/bin

它显示终端(控制台)中突出显示的输出 - hcat突出显示cat。

如何:

[me@this]<bash><~> 43 
21:23 Fri Apr 19 > sudo apt-get install source-highlight

[me@this]<bash><~> 28 
21:03 Fri Apr 19 > ll /usr/share/source-highlight/*.sh
-rwxr-xr-x 1 root root 432 May  1  2012 /usr/share/source-highlight/src-hilite-lesspipe.sh*

[me@this]<bash><~> 29 
21:04 Fri Apr 19 > sudo su
root@this:/home/me# cd /usr/bin/
root@this:/usr/bin# ln -s /usr/share/source-highlight/src-hilite-lesspipe.sh hcat

[me@this]<bash><~> 36 
21:07 Fri Apr 19 > hcat test.xml

2

使用OS X 10.9(Maverick)这可以解决问题:

  • brew install source-highlight(假设brew已安装 - http://brew.sh
  • sudo nano /etc/launchd.conf

    setenv LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s"     
    setenv LESS=' -R '
    

    (添加到/etc/launchd.conf)

  • 重启


0

在mac中,你可以输入view filename,做类似的事情就像少。


1
使用OSX,默认情况下view filename启动vim- 稍微不同的键绑定less(有关更多详细信息,请参阅此问题的其他答案)。
drevicko 2016年

0

在安装GNU的source-highlightdev-util/source-highlightsabayon / gentoo上的包)后,我将这些env配置为/etc/bash/bashrc.d/my-less-src-highlight

#default:    export LESSOPEN="|lesspipe %s"
#don't like: export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
#default:    export LESS=" -R -M --shift 5"
export LESSCOLOR=always
export LESSCOLORIZER=/usr/bin/src-hilite-lesspipe.sh

我不喜欢替换,lesspipe因为它有其他功能。连接不起作用。


0

如果你想要在Vim中使用相同的语法高亮,但出于某种原因你更喜欢less用作你的寻呼机,你可以使用这个脚本:https//github.com/rkitover/vimpager

基本用法是:

vimpager file.txt

要么

vimcat file.ext | less -R

您可以使用-c传递不在您的额外命令.vimrc(例如,选择不同的colorscheme)。我使用的完整命令是:

vimcat -c 'set cmdheight=20' -c 'hi! clear Normal' -o - "$FILENAME" | less -REXS

注意:如果你的Vim在启动时要求你按Enter键,你将看不到提示,但是在按Enter键之前什么都不会发生!cmdheight上面的诀窍可以帮助减轻这种情况。


0

我找到了highlight哪个:

  • 支持多种配色方案和256色
  • 适用于STDIN(不像source-highlight
  • 比快得多 pygmentize

截图

这是我调用的脚本highlight-less-wrapper,其中包含.bashrc有关如何设置less自动使用它的说明。

#!/bin/bash

# Have highlight read from STDIN if '-' is given as filename

# Setup - Add to .bashrc:
# LESSOPEN='|-highlight-less-wrapper "%s"'
# export LESS=-FMRXis

# Usage:
# $ less file
# OR
# $ pipeline | less

warn () { printf "%s: %s\n" "$(basename "$0")" "$*" 1>&2; }
die () { warn "$@"; exit 1; }

# Argument checking
case $# in
    0)
        # Allow `exec $0` for less setup
        echo "LESSOPEN='|-$(readlink -f "$0") "'"%s"'\'
        exit 255 ;;
    1)
        # Only one argument is expected.
        # less will invoke multiple times given multiple files.
        file=$1
        if [[ $file != - && ! -r $file ]]; then  # less passes '-' for STDIN
            die "Cannot open $file for reading"
        fi ;;
    *)
        die "Expected only one argument" ;;
esac

# Run highlight
# highlight will read from STDIN when given a null filename
run_highlight () {
    highlight --force -O truecolor --style aiseered "$1"
}

if [[ $file == - ]]; then  # Run on stdin
    run_highlight ""
else
    run_highlight "$file"
fi

“由于Github现在是Mordor Corp的一部分,Git repo的亮点就是”感兴趣,但cmon不再是90年代的开发者需要长大。
Urda

0

我有同样的问题,我登陆听到,阅读所有答案,以下是我最终做的每次使用时都有语法突出显示lessmost

sudo apt install source-highlight

然后我去创造一个别名为我lessmost(我使用ZSH,但你可以为你添加别名.bashrc,如果你使用bash文件):

vim ~/.zshrc

对于那些谁可能会卡在VIM:按i进入编辑模式,当您完成后,按Esc,然后:x最后 Enter保存修改

并粘贴以下行为基于debian的发行版(如Debian,Ubuntu,Mint等):

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | most };AliasFuncMost'

或者用于RPM发行版(Redhat,Fedora,Centos):

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(rpm -ql source-highlight | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(rpm -ql source-highlight | grep lesspipe) "$1" | most };AliasFuncMost'

请记住关闭终端并再次打开以确保创建别名。

现在你可以享受颜色:

most yourFile.xml
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.