vim+xml快速摘抄单词释义
考虑到Evernote改改格式什么的实在太慢了。我就想为什么不用vim呢?本来想研究一样怎么用python和evernote 的api直接把vim里写下的东西加入notebook.但是evernote api不支持python 3.我又不大想下python 2。。。于是折中了一下。我用vim创建一个html文件,然后用firefox打开,再用evernote 的firefox插件直接往evernote里加笔记。
由于我想做的是类似生词本一样的东西。所以我觉得用xml比较合适,可以自定义标签。词条用<entry>,单词用<word>,音标用<pron>,解释用<def>,例句用<ex>. 然后我写了一个xsl文件,把xml按照一定格式转换成html(xsl之于xml,就像css之于html。)。只要写这么一个xsl文件,以后加单词的格式就再也不用操心了,只需要编辑xml文件即可。我就是喜欢这种内容和样式分离的感觉。
但是编辑xml文件也是很繁琐的事情。我要写<word></word>,<ex></ex>,<pron></pron>什么的。这个时候强大的vim来了。通过vim的记录宏可以大大简化你的操作。
创建宏的方式:
宏的名字可用a-z,(注意不能用大写字母!否则会很悲剧!)比如说我要创建名为a的宏。那我就在正常模式下按qa然后开始输入命令最后按q退出。当你要用a这个宏的时候只要按@a即可。
如果你想在a这个宏之后在加点操作。就按qA,然后敲命令。这个命令会加到a宏的后面。最后按q退出录制。(我一开始不知道就毁了我一个辛辛苦苦建立的很复杂的宏。怨念!)
当然对于一下不是很复杂的操作。完全可以用:let @a="你想输入的命令“来添加。如果要在已有的宏之后添加,只需要:let @A=”你想添加的操作命令"。
我创建了以下一些宏:
@c:清除<entry>里内嵌的除<word>之外的所有标签。这个宏比较复杂。首先是gg 把光标移到第一行,再来是替换命令,再来gg把光标移到第一行,最后:nohlsearch 去掉高亮。
这个替换命令是:%s+\(<\/word>\)\(\_.\{-}\)\(<\/entry>\)+\1\r\3
解释一下:
%全文选择符。
+分隔搜索部分和替换部分。
搜索:</word>和<entry>之间的任意字符(包括首尾的</word>和<entry>)。"\_."表示任意字符。加"\{-}"是因为,xml中有很多</word><entry>,我要找的是</word>和之后第一个出现的<entry>之间的字符。
替换:我要留着</word>和<entry>,但是把中间的字符删除。因此需要在搜索时进行分组。\(和\)干的就是分组这个事情。\r是回车的意思。
@w:查找’<word>‘并把光标移到’>‘之后的一个字符上。(这样,通过cw命令我就可以change a word了) 其实就是一个搜索命令。/<word>/e+1。(我一般都是先输入所有生词的。这样就可以通过n移到下一个单词上,再按cw改词了)
@p:添加<pron></pron>,并在标签中间粘贴来自系统剪贴板的文字(这里是音标)。我这里用了一个插件是xml.vim。输入“<pron>>”可以得到三行。第一行<pron>,第三行</pron>,光标在第二行,在插入状态。
粘贴来自系统剪贴板的文字,在windows下可以直接使用Ctrl+v,但是不知道为什么,我每次按Ctrl+v,之后还要多按一次回车。所以我就使用”+gp命令。“+是寄存器,放的是系统剪贴版里的东西。
@d:与@p类似,只不过是对<def>进行操作。
@e:与@p和@d类似,对<ex>进行操作。
创建完宏以后,就感觉这个录入速度飞快无比。省了很多重复工作。而且很好记。一开始整个xml文件要clean一下,按@c;改word用@w,加音标(pronunciation)@p,加解释(definition)用@d,加例句(example)用@e。
写完以后,我又用”,r",直接让firefox打开这个xml。首先这个功能也很简单。把下面的代码存成xml_run.vim放到vimfiles/ftplugin文件夹中。然后,firefox上绿色的evernote按钮一按,就往Evernote新增了一个note。
map <silent> <buffer> ,r :call RunFile()<CR> function! RunFile() w !start C:\Program Files\Mozilla Firefox\firefox.exe "%:p" endfunction
说明:(1)如果html使用css的话,复制到evernote后样式会不见的。因此,必须使用<font>,<b>,<u>这些标签来定义格式。
(2)对xml和xsl不熟悉的同学:xml 教程 xsl 教程
附截图:
附xsl代码:vocabulary.xsl
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="list/entry[1]/word"/>: <xsl:value-of select="list/entry[2]/word"/></title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="entry"> <font color="#eb0073"><b><u><xsl:value-of select="word"/></u></b><br /></font> <font color="#328712"><xsl:value-of select="pron"/></font><br /> <xsl:value-of select="def" /><br /> <ul> <xsl:for-each select="ex"> <li><font color="#1c3387"><xsl:value-of select="." /></font></li> </xsl:for-each> </ul> <hr /> </xsl:template> </xsl:stylesheet>
原创文章,转载请注明: 转载自ELLY66
本文链接地址: vim+xml快速摘抄单词释义
文章的脚注信息由WordPress的wp-posturl插件自动生成
Evernote lets you save all the interesting things you see online into a single place. Access all those saved pages from your computer, phone or the web. Sign up now or learn more. It's free!
2011年03月15日 16:33
很不错的想法!很有创新精神!学习啦
2011年07月20日 21:06
强!