AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 35689
Accepted
Stann
Stann
Asked: 2011-04-18 18:46:24 +0800 CST2011-04-18 18:46:24 +0800 CST 2011-04-18 18:46:24 +0800 CST

突出显示联机帮助页语法?

  • 772

有没有办法“着色”联机帮助页输出?我的意思是 - 例如的输出:

man command_name
manpage
  • 5 5 个回答
  • 3453 Views

5 个回答

  • Voted
  1. Best Answer
    Adam Byrtek
    2011-04-19T00:05:16+08:002011-04-19T00:05:16+08:00

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

    man() {
      /usr/bin/man $* | \
        col -b | \
        vim -R -c 'set ft=man nomod nolist' -
    }
    
    • 9
  2. daithib8
    2011-05-25T02:11:26+08:002011-05-25T02:11:26+08:00

    添加export PAGER=most到.bashrc

    • 5
  3. Stann
    2011-04-18T19:43:42+08:002011-04-18T19:43:42+08:00

    啊哈。将此添加到 ~/.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
  4. Bart
    2011-05-25T02:55:24+08:002011-05-25T02:55:24+08:00

    它必须在终端中吗?

    否则您可以使用:系统->帮助->系统文档,然后在出现的窗口左侧单击“手册页”(在此处找到此提示)

    或者您可以使用 Konqueror,它会显示如下所示的手册页: Konqueror 中的手册页

    • 3
  5. dosentmatter
    2017-12-17T15:39:11+08:002017-12-17T15:39:11+08:00

    答案Adam Byrtek似乎将行数限制为 80 个字符,并且在调整终端大小时不会重排文本。

    您可以通过设置MANPAGER来解决此问题。您也可以PAGER像daithib8那样设置,但这更通用。MANPAGER覆盖命令PAGER。man

    从此_

    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 "$@"
    }
    

    编辑:向下滚动到我的UPDATE以查看使用这种混乱形式的好处以及使用一些额外的 vim 映射编写函数的更简洁的方法。


    但是做这一切真的是一团糟。以下解决方案需要安装,但它们是更清洁的解决方案。

    这些解决方案没有Vim: Reading from stdin...上述解决方案所具有的。

    我推荐daithib8的答案,除了使用MANPAGER而不是,PAGER因为这个问题只是关于联机帮助页。而且我还会将它添加到我的.bash_profile左右.profile,因此它不会在每次调用bash. 你将不得不安装most。

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

    most没有and中的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'
    

    如果您想使用 vim 插件,启动可能会比most因为vimpagersource your而慢一些.vimrc,这可能是一件好事。要禁用.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 "$@"
    }
    

    所以现在,将在您的or中export MANPAGER设置您的默认值,但您可以使用这些功能中的任何一个来快速使用另一个.MANPAGER.bash_profile.profileMANPAGER


    更新

    实际上,vimpager 与实际的 vim 有点不同。例如,在正常模式下,w被映射到b并被b映射到& <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 版本中,您可以通过以下方式避免这种 hack --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但除非要求,否则我不会在这里添加它。

    • 3

相关问题

  • 电子阅读器离线手册页?

  • “man”和“info”文档有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    我需要什么命令来解压缩/提取 .tar.gz 文件?

    • 8 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Martin Hope
    EmmyS 我需要什么命令来解压缩/提取 .tar.gz 文件? 2011-02-09 14:50:41 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve