当我使用vim编辑markdown文件时,我可以通过vim-markdown和vim-markdown-preview插件获得漂亮的语法着色。
我希望在使用less(分页器)查看文件时也能够获得同样的语法着色。有没有办法让less进行语法着色?或者是否有其他具备此功能的分页器?
这是一种使用 less
在控制台中查看 GitHub Markdown 文件的方法。
安装 pandoc
和 lynx
。
a. 对于 Ubuntu(和 WSL): sudo apt install pandoc lynx
b. 对于 MacOS: brew install pandoc lynx
将以下脚本文件命名为 less
并将其保存在 PATH
上的某个位置,例如 /usr/local/bin
chmod a+x /usr/local/bin/less
hash -r
或者运行 /usr/bin/less
而不是运行该脚本#!/bin/bash
if [ "${1##*.}" == md ]; then
pandoc "$1" | lynx -stdin
else
/usr/bin/less "$1"
fi
less
使用它。less
中获得与编辑器相同的语法高亮,我猜你需要切换到Emacs ;) 当然,鉴于Emacs带有一个名为Evil Mode的Vim兼容包,情况可能没有看起来那么糟糕。)使用Vim Markdown highlighting (and folding),最直接的解决方案是在只读模式下调用vim
,可以使用vim -R
或者(至少在Ubuntu上)更加优雅的方式:
$ view filename.md
.vimrc
文件的最底部添加以下内容,view
将会像less
一样运行,并且还能享受你最喜欢的语法高亮(不仅限于markdown!)和折叠功能:" less behaviour for view
" https://dev59.com/UYbca4cB1Zd3GeqPaMYE#39836959
" http://vim.wikia.com/wiki/Using_vim_as_a_syntax-highlighting_pager
function! LessBehaviour()
if (!&modifiable || &ro)
set nonumber
set nospell
set laststatus=0 " Status line
set cmdheight=1
set guioptions=aiMr " No menu bar, nor tool bar
noremap u <C-u>
noremap d <C-d>
noremap q :q<CR>
endif
endfunction
" https://vi.stackexchange.com/a/9101/3168
augroup ReadOnly
au!
au VimEnter * :call LessBehaviour()
augroup END
还有一个更严格的less.sh
脚本。在我的系统中,它与vim
捆绑在一起。要找到它,请使用:
$ find /usr/share/vim -name less.sh
然而,与上面列出的脚本相反,折叠不会在这个less.sh
中起作用。
我现在使用的顺序是:vimpager
、highlight
、src-hilite-lesspipe.sh
、less
,然后是more
;使用bash来确定我所在系统上可用的内容。
这是我最终得出的结果:
.bash_profile
:
#############################################
# Pager #
#############################################
PAGER='more'
export PAGER
if (have less); then
LESS='-i -R -e -X -z-2 -M -P%t?f%f :stdin .?pb%pb\%:?lbLine %lb:?bbByte %bb:-...'
LESSCHARSET='utf-8'
LESSHISTFILE=-
PAGER='less'
MANPAGER='less'
export LESS LESSCHARSET LESSHISTFILE PAGER MANPAGER
export LESS_TERMCAP_so="$(tput bold; tput setaf 0; tput setab 4)" # begin standout
export LESS_TERMCAP_se="$(tput sgr0)" # end standout
export LESS_TERMCAP_us="$(tput smul; tput setaf 3)" # begin underscore
export LESS_TERMCAP_ue="$(tput rmul; tput sgr0)" # end underscore
export LESS_TERMCAP_mr="$(tput rev)" # begin reverse
export LESS_TERMCAP_mb="$(tput blink)" # begin blink
export LESS_TERMCAP_mh="$(tput dim)" # begin dim
export LESS_TERMCAP_md="$(tput bold; tput setaf 6)" # begin bold
export LESS_TERMCAP_ZH="$(tput sitm)" # begin italics
export LESS_TERMCAP_ZR="$(tput ritm)" # end italics
export LESS_TERMCAP_me="$(tput sgr0)" # end all modes
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"
if (have src-hilite-lesspipe.sh); then
export LESSOPEN="| src-hilite-lesspipe.sh %s"
fi
if (have highlight); then
export LESSOPEN="| highlight --out-format=xterm256 --style=solarized-dark %s"
fi
fi
if (have vimpager); then
export PAGER='vimpager'
fi
if (have vimcat); then
alias v='vimcat'
fi
have
是一个Bash函数,用于检查命令是否可用。 - MERMhave
函数,或者(更好的是)用一个不使用子shell的普遍可用的替代方法来替换,会更好。请参阅https://stackoverflow.com/questions/592620/how-can-i-check-if-a-program-exists-from-a-bash-script/677212#677212 - undefinedless
本身不支持语法高亮,但是您可以使用GNU-source-highlight
来实现。
首先,您需要安装它。例如,在 RHEL/Centos/Fedora 上(以 root 用户身份):
$ yum install source-highlight
在 Debian/Ubuntu 上
$ apt-get install source-highlight
然后配置您的分页器以使用它:
$ export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
$ export LESS=" -R"
现在,它应该只是替换less
:
$ less README.md # pager with syntax highlighting
LESSOPEN="| /usr/local/bin/highlight --out-format=xterm256 %s"
。 - MERM