LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1159|回复: 4

[已解决]如何在shell脚本中调用vim的TOhtml插件?

[复制链接]
发表于 2011-2-15 00:20:50 | 显示全部楼层 |阅读模式
新年好!
有个问题困挠很久了。

vim的TOHtml插件,可以生成带有语法高亮的html文件。我想在shell脚本中执行vim,“批量”将源码文件生成对应的html文件。
我在终端中执行:

$ vim -e ex2.sh < change.vim

ex2.sh是一个shell脚本

  1. $ cat ex2.sh
  2. #! /bin/sh

  3. LOG_DIR=/var/log
  4. ROOT_UID=0
  5. LINES=50
  6. E_XCD=66
  7. E_NOTROOT=67

  8. if [ "$UID" -ne "$ROOT_UID" ]
  9. then
  10.     echo "Must be root to run this script."
  11.     exit E_NOTROOT
  12. fi

  13. if [ -n "$1" ]
  14. then
  15.     lines=$1
  16. else
  17.     lines=$LINES
  18. fi

  19. cd $LOG_DIR || {
  20.     echo "Cannot change to necesary directory." >& 2
  21.     exit $E_XCD;
  22. }

  23. tail -$lines messaages > mesg.temp
  24. mv mesg.temp messaages

  25. cat /dev/null > wtmp
  26. echo "Logs cleaned up."

  27. exit 0
复制代码


change.vim内容如下

  1. $ cat change.vim
  2. TOhtml
  3. write ex2.html
  4. quit!
  5. quit!
复制代码


我的本意是使用vim的Ex模式,将ex2.sh用TOhtml转换为带语法高亮的ex2.html。
在change.vim中写入Normal模式下的操作。
但是生成的ex2.html内容和ex2.sh一模一样,连html标签都没有。
怀疑是TOhtml这个命令根本就没有执行。

如何在shell脚本中执行TOhtml插件呢?
发表于 2011-2-15 09:59:20 | 显示全部楼层
我对vim不熟,不过我一般都用2html的,刚才试了一下,可以正常用
  1. source $VIMRUNTIME/syntax/2html.vim
  2. w! final.html
  3. wq!
复制代码

但是好像语法高亮就有问题了,加一句colo之后表现也很怪异,分明是colo blue结果全红了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-15 23:46:28 | 显示全部楼层
感谢@henryhj 的回复。

在你的启发下,我换成这种方式了。
激活语法高亮,激活颜色主题,要显式地打开syntax on。

  1. syntax on
  2. colorscheme elflord
  3. let html_use_css=1
  4. let html_number_lines=1
  5. let html_dynamic_folds=1
  6. source /usr/share/vim/vim73/syntax/2html.vim
  7. write! ex.html
  8. quit!
  9. quit!
复制代码

输出结果见下图,左边是2html输出,右边是TOhtml。
可以看到,2html莫名其妙在每一个高亮变量下加了下划线。


不要紧,把css中的text-decoration去掉就行。

  1. syntax enable
  2. colorscheme elflord
  3. let html_use_css=1
  4. let html_number_lines=1
  5. let html_dynamic_folds=1
  6. source /usr/share/vim/vim73/syntax/2html.vim
  7. %s/text-decoration:\ underline;//g
  8. write! ex.html
  9. quit!
  10. quit!
复制代码

最终结果和TOhtml差不多。至于缩进有些不同,在脚本开头显式声明就可以了。


那么新的问题又来了,2html和TOhtml,它们是什么关系呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2011-2-16 23:14:21 | 显示全部楼层
Post by motive;2128198
感谢@henryhj 的回复。

在你的启发下,我换成这种方式了。
激活语法高亮,激活颜色主题,要显式地打开syntax on。
  1. syntax on
  2. colorscheme elflord
  3. let html_use_css=1
  4. let html_number_lines=1
  5. let html_dynamic_folds=1
  6. source /usr/share/vim/vim73/syntax/2html.vim
  7. write! ex.html
  8. quit!
  9. quit!
复制代码
输出结果见下图,左边是2html输出,右边是TOhtml。
可以看到,2html莫名其妙在每一个高亮变量下加了下划线。


不要紧,把css中的text-decoration去掉就行。
  1. syntax enable
  2. colorscheme elflord
  3. let html_use_css=1
  4. let html_number_lines=1
  5. let html_dynamic_folds=1
  6. source /usr/share/vim/vim73/syntax/2html.vim
  7. %s/text-decoration:\ underline;//g
  8. write! ex.html
  9. quit!
  10. quit!
复制代码
最终结果和TOhtml差不多。至于缩进有些不同,在脚本开头显式声明就可以了。


那么新的问题又来了,2html和TOhtml,它们是什么关系呢?

原来要开syntax的啊,学习了
2html和TOhtml的东西
  1. :help 2html
复制代码
讲的很详细
无非就是说,2html是一个转换脚本,并非语法文件
TOhtml是一个标准插件命令,粗略看了看,TOhtml强大啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-17 22:48:39 | 显示全部楼层
看了TOhtml的实现后。明白如何在脚本中调用它了。

  1. command! -range=% TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
  2. syntax enable
  3. colorscheme elflord
  4. let html_use_css=1
  5. let html_number_lines=1
  6. let html_dynamic_folds=1
  7. TOhtml
  8. %s/text-decoration:\ underline;//g
  9. write! output.html
  10. qa!
复制代码

Post by henryhj;2128293
原来要开syntax的啊,学习了
2html和TOhtml的东西
  1. :help 2html
复制代码
讲的很详细
无非就是说,2html是一个转换脚本,并非语法文件
TOhtml是一个标准插件命令,粗略看了看,TOhtml强大啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表