突出显示手册页语法?

突出显示手册页语法?

有没有办法“给手册页输出着色”?我的意思是——例如:

man command_name

答案1

我使用以下 shell 函数在 Vim 中查看手册页,它提供了很好的语法高亮功能:

man() {
  /usr/bin/man $* | \
    col -b | \
    vim -R -c 'set ft=man nomod nolist' -
}

答案2

添加export PAGER=most.bashrc

答案3

啊哈。把这个添加到 ~/.bashrc 就可以了。虽然它并不完美。但是嘿:

# Less Colors for Man Pages 
export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking 
export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold 
export LESS_TERMCAP_me=$'\E[0m'           # end mode 
export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode 
export LESS_TERMCAP_so=$'\E[38;5;246m'    # begin standout-mode - info box 
export LESS_TERMCAP_ue=$'\E[0m'           # end underline 
export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline

答案4

答案亚当·拜尔泰克似乎将行数限制为 80 个字符,并且在您调整终端大小时不会重新排列文本。

您可以通过设置来解决这个问题MANPAGER。您也可以设置PAGER如下daithib8确实如此,但这是更通用的。命令的MANPAGER覆盖。PAGERman

export MANPAGER="col -b | vim -c 'set ft=man ts=8 nomod nolist nonu' -c 'nnoremap i <nop>' -"

他有一些非常好的额外选项,例如设置ts(tabstop)、nonu(nonumber)和取消映射i(insert)。所以我将合并这两个解决方案。还做了一些改进,例如使用命令command和扩展参数"$@"

作为函数:

man() {
  MANPAGER="col -b | vim -R -c 'set ft=man ts=8 nomod nolist nonu' -c 'nnoremap i <nop>' -" command man "$@"
}

编辑:向下滚动到我的更新了解使用这种混乱形式的好处,以及使用一些额外的 vim 映射以更干净的方式编写函数的好处。


但这样做确实很麻烦。以下解决方案需要安装,但它们是更干净的解决方案。

这些解决方案不具备Vim: Reading from stdin...上述解决方案所具有的功能。

我建议daithib8的答案除了使用MANPAGER而不是PAGER因为这个问题只是关于手册页。而且我还会将它添加到我的.bash_profile.profile这样它就不会在每次调用 时导出bash。不过你必须安装most

# In .profile or .bash_profile
MANPAGER='most'

most没有像和hjkl那样的运动,但它是最快的。vimless

还,vimpager非常棒。我喜欢用它来查看大型手册页,例如man bash。你可以从 vim 获得所有很酷的功能,例如行号number、高亮搜索hlsearch和所有 vim 插件。

如果你有YouCompleteMe安装vimpager也不会显示此消息:

The ycmd server SHUT DOWN (restart with ':YcmRestartServer'). Unexpected exit code 1. Type ':YcmToggleLogs ycmd_54959_stderr_UvwUrj.log' to check the logs.

不知道为什么,但是没看到这种情况就好了。

# In .profile or .bash_profile
export MANPAGER='vimpager'

启动速度可能会比 慢一点,most因为vimpager需要你的源代码.vimrc,如果你想使用 vim 插件,这可能是一件好事。要禁用.vimrc源代码:

# In .profile or .bash_profile
export MANPAGER='vimpager -u NONE'

您还可以采用具有功能的混合方法:

# Use 'command man' instead of 'man' if you have overridden
# 'man' with a function, like how I did in the "messy" solutions above.

manmost() {
    MANPAGER='most' man "$@"
}

manvim() {
    MANPAGER='vimpager -u NONE' man "$@"
}

manvimrc() {
    MANPAGER='vimpager' man "$@"
}

因此现在,将在您的或中export MANPAGER设置默认值,但您可以使用这些函数中的任何一个来快速使用另一个。MANPAGER.bash_profile.profileMANPAGER


更新

实际上,vimpager 与实际的 vim 略有不同。例如,在正常模式下,w映射到bb映射到& <C-B><SNR>1_L。但其他分页器也是如此 - less 没有光标。

如果你想使用真正的 vim,使用一个混乱的解决方案,我发现。它Vim: Reading from stdin...通过黑客手段抑制了。不过仍然有 YouCompleteMe 消息。您可能可以设置另一个-c命令来关闭 YouCompleteMe。但我将忽略该消息。

manrealvim() {
  MANPAGER='bash -c "vim -MRn -c \"set ft=man nomod nolist nospell nonu\" -c \"nm q :qa!<CR>\" -c \"nm <end> G\" -c \"nm <home> gg\"</dev/tty <(col -b)"' man "$@"
}

在较新的vim 版本,你可以用以下方法避免这种情况--not-a-term

我清理了带有换行符的函数,因为这是我正在使用的版本。

manvim() {
  MANPAGER='col -b | '\
'vim -MR -c "set ft=man ts=8 nomod nolist nospell nonu" '\
'-c "set colorcolumn= hlsearch incsearch" '\
'-c "nun <buffer> q" '\
'-c "nn q :qa!<CR>" '\
'-c "nn <end> G" '\
'-c "nn <home> gg" '\
'- --not-a-term' man "$@"
}

或者你也可以使用neovim > v0.2.2

# not sure why but the -M flag breaks it but it's not required
# Seems like nvim already sets -M when ft=man
mannvim() {
  MANPAGER='col -b | '\
'nvim -R -c "set ft=man ts=8 nomod nolist nospell nonu" '\
'-c "nun <buffer> q" '\
'-c "nn q :qa!<CR>" '\
'-c "nn <end> G" '\
'-c "nn <home> gg" '\
'-' man "$@"
}

您可能想要查看传递给自定义的 vim 选项。我从列出的所有帖子中查看了它们,并选择了我喜欢的选项。或者您可以复制我。

您还可以解析vim --version以确定是否使用 hack 或--not-a-term。我不会在这里这样做。


我目前的方法

如果您想将此 vim 方法设置为默认方法MANPAGER,请执行以下操作:

  1. 在您的路径中添加这些可执行脚本:

    有两个脚本,因为第一个用于常规分页(替换 less),而第二个用于手册页(具有手册页语法高亮显示)。

    # Put this in ~/bin/vimrealpager
    # I call it vimrealpager to avoid name clashes with vimpager mentioned above
    # Make sure ~/bin/ is in your path
    
    # ***SCRIPT START***
    
    #!/usr/bin/env sh
    
    col -b |
    vim -MR -c 'set nomod nolist nospell nonu' \
    -c 'set colorcolumn= hlsearch incsearch' \
    -c 'nn q :qa!<CR>' \
    -c 'nn <end> G' \
    -c 'nn <home> gg' \
    "$@" \
    --not-a-term \
    -
    
    # Put this in ~/bin/vimrealmanpager
    # ***SCRIPT START***
    
    #!/usr/bin/env sh
    
    vimrealpager -c 'set ft=man' \
    -c 'nun <buffer> q'
    
  2. 在你的 ~/.profile 中:

    export MANPAGER='vimrealmanpager'
    

您也可以执行export -f我之前展示的功能,但它在 bash 中有效但在 POSIX shell 中无效,因此您必须将其放在 .bash_profile 中而不是 .profile 中。

可以做类似的事情,nvim但除非被要求,否则我不会在这里添加它。

相关内容