2010年4月23日星期五

用Vim的搜索替换功能编辑HTML文档

Vim太强大了。我把自己平时整理的单词做成html然后分享到博客上,如果手动修改的话会死人的。用vim的强大的替换能力,大概半个小时就搞定了。当然前提是把正则表达式写好。

如我想把

2 salient
    There are four points that were salient then and remain paramount in all policies today.

变成表格的形式:

<tr>
<td width="10%" valign="top"><b>02 salient</b></td>
<td width="50%">    There are four points that were salient then and remain paramount in all policies today. 
</td>
</tr>

只要一个命令就好

:.,$s/\(\d\d\s.*\)\n\(\t.*\n\)/\<tr\>\r\<td width="10%" valign="top"\>\<b\>\1\<\/b\>\<\/td\>\r\<td width="50%"\>\2\<\/td\>\r\<\/tr\>/gc

这是最简单的部分。

为了视觉上好看一些,最好能把例句中的生词强调出来,我用的是斜体,然后再定义一个css就好看了。

我是这样做的,首先定义一个键盘映射si,用来将光标移掉单词上时,击si把单词设为斜体

:nmap si diwi<i><C-R>"</i><ESC>

这里面diw表示将当前单词存入寄存器,然后删除。然后在编辑模式中<C-R>"调用寄存器,就可以实现两边加上tag了。

其实还有另一种定义方法,利用vim的可视模式,也就是选中单词时击si键设为斜体,这样对词组特别方便:

:vmap si "zdi<i><C-R>z</i><ESC>

定义nomal模式下键盘映射的好处是可以利用vim超强的搜索功能,比如我在salient这个单词上点*键,就可以立即搜索这个单词,搜索到了点si就可以直接设为斜体。

最后,由于Windows Live Space不支持css,只好将每个斜体的单词都设一个颜色,简单的替换命令就能实现:

:.,$s/<i>\(.\{-}\)<\/i>/<i><font color="#C00000">\1<\/font><\/i>/gc

最终效果如上篇博客所示,其实还是挺丑的lol

没有评论:

发表评论