ELLY66
12三/112

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!

 
标签: , , 发表评论
评论 (2) 引用 (0)
  1. 很不错的想法!很有创新精神!学习啦


Leave a comment

(required)

还没有引用.

Switch to our mobile site