有没有办法“给手册页输出着色”?我的意思是——例如:
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
覆盖。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 "$@"
}
编辑:向下滚动到我的更新了解使用这种混乱形式的好处,以及使用一些额外的 vim 映射以更干净的方式编写函数的好处。
但这样做确实很麻烦。以下解决方案需要安装,但它们是更干净的解决方案。
这些解决方案不具备Vim: Reading from stdin...
上述解决方案所具有的功能。
我建议daithib8的答案除了使用MANPAGER
而不是PAGER
因为这个问题只是关于手册页。而且我还会将它添加到我的.bash_profile
或.profile
这样它就不会在每次调用 时导出bash
。不过你必须安装most
。
# In .profile or .bash_profile
MANPAGER='most'
most
没有像和hjkl
那样的运动,但它是最快的。vim
less
还,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
.profile
MANPAGER
更新
实际上,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 版本,你可以用以下方法避免这种情况--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
,请执行以下操作:
在您的路径中添加这些可执行脚本:
有两个脚本,因为第一个用于常规分页(替换 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'
在你的 ~/.profile 中:
export MANPAGER='vimrealmanpager'
您也可以执行export -f
我之前展示的功能,但它在 bash 中有效但在 POSIX shell 中无效,因此您必须将其放在 .bash_profile 中而不是 .profile 中。
可以做类似的事情,nvim
但除非被要求,否则我不会在这里添加它。