2008-12-07

一个索引man手册的脚本

联机手册页manpages是*NIX用户必不可少的参考文档,apropos(1)可以用于查找手册页的名字和介绍;或者通过导入脚本/etc/bash_completion,可以使用制表键的自动补全功能来列出手册页清单。

这里我自己也写了个比较山寨的索引工具来查找man手册。

  1. #!/bin/bash
  2. TMP1="/tmp/manindex1.$$"
  3. TMP2="/tmp/manindex2.$$"

  4. echo "# Online Reference Manuals Index" >> $TMP1
  5. echo "# type Enter to see the manual of entry you selected" >> $TMP1
  6. echo "# type q to quit" >> $TMP1
  7. SEC=`echo $1 | grep "^[1-9]$"`

  8. for DIR in `manpath | sed 's/:/ /g'`;do
  9. case $1 in
  10. [1-9]) ls $DIR/man$1 2>/dev/null ;;
  11. '') ls $DIR/man* | grep -v "/" ;;
  12. *) find $DIR -regex .*$1[^$/]+$ -exec basename {} \;;;
  13. esac | sed 's/.gz$//g;s/\.[n0-9][a-z]*$//g' >> $TMP2
  14. done

  15. cat $TMP2 | grep -v '^[\s]*$' | sort | uniq >> $TMP1
  16. vim "+syntax on" "+set filetype=conf nonu noma" "+map q :q!" "+map :!man $SEC " $TMP1
  17. rm -f $TMP1 $TMP2


程序用vim显示匹配的man手册条目列表,移动光标到相应条目,键入回车即可跳转到对应的man命令查看页,键入q退出程序。

用法:


manindex [正则表达式 或者 章节号]


把上面的脚本以manindex为名字保存放到你的PATH中并设置执行属性后,可以在你的vimrc中加入


set keywordprg=manindex


这样在使用vim时,就可以随时用K查看对应的关键字看都有可供参考的联机手册了。

下图为执行"manindex 7"的结果,它显示了man手册第7章节所能找到的所有条目:



说明:
  1. 不带参数直接执行此脚本,显示所有条目;
  2. 参数为1-9之间的数字,显示系统中对应章节的所有条目;
  3. 参数为正则表达式,显示匹配的条目(不支持^和$);


不完善的地方:

未知章节号时,按默认方式执行man。例如我执行"manindex mkdir"的话,显示的mkdir条目只能跳转到"man mkdir"。而实际上有mkdir(1)和mkdir(2)两个不同章节的条目。以后会提供条目对应的章节。可以选择使用"man 1 mkdir"还是"man 2 mkdir"

没有评论: