想来能看到这篇博客的人也应该已经对UltraBlog是什么,干什么的了解一二了,我就不赘述了。到目前为止,我知道的在Vim里面写Wordpress博客的插件有三个:

  1. Vimpress.这个是Wordpress官方推荐的插件。当时看到时间有点久远,就没用,所以也不知道好不好用。不过,好像是功能有些简陋。不过这个好像有个改进版叫Vim Blog,在Vim官方的脚本里面也有。有兴趣的可以搜搜看。
  2. Vimrepress.这个可以说是Vimpress的加强版。增加了许多功能,在使用UltraBlog之前,我一直在使用。怎么说呢,其实也蛮好用的。但和本文要介绍的UltraBlog相比,对我来说最大的不足在于它不能保存数据到本地。
  3. UltraBlog.这个便是本文要讲解的插件。功能比Vimrepress更加强大。具体见后文。本文主要是翻译一下UltraBlog自带的英文文档。

UltraBlog是Lenin Lee的作品,详情可参见他的网站:http://0x3f.org/?p=1894。如果大家有什么好的建议或者发现什么bug,可以通过lenin.lee@gmail.com向他反馈。这里我就不逐字逐句翻译了,但是一定会覆盖到所有的用法。废话不多说了,开始翻译吧。

一,UltraBlog的起因

UltraBlog.vim是为Wordpress写的众多插件之一。它和其他类似功能的脚本的最大不同在于它是一个强大的客户端,可以将文章(当然也包括页面、模板。后文除特别说明外,支持文章操作的地方,也支持这两种操作)保存在本地的SQLite数据库,而其他的插件都是是远程操作而已。通过这种本地存储的方式,我们可以很容易的进行许多操作,也可以使用很多的本地工具。比如,我们可以通过输入一个简单的命令查找存储在本地数据库里面的文章。又比如,我们可以使用我们喜欢的模板随时预览我们的草稿。

对于那些只需要一个轻量级的编辑器,功能就像其他Vim博客脚本的人来说,UB(以下均简称UltraBlog为UB)也提供了一种“编辑器模式(Editor mode)”。在这种模式下,你所做的操作不会创建数据库,也不会将数据存到数据库里面。 而且,为了使你的书写更简单,UB支持多种轻量级的标记语言。目前为止,都支持以下语言:

  • Markdown
  • reStructuredText
  • LaTex
  • Textile
  • HTML

享受用Vim写博客吧!

二,UltraBlog的特性

  • 支持多种语法:Markdown,HTML,reStructuredText, LaTex, Textile。
  • 有编辑器模式和客户端模式。
  • 在客户端模式下数据会存储在本地的SQLite数据库。
  • 支持关键字高亮的全文搜索。
  • 可以使用正则表达式进行全文搜索。
  • 支持全文替换。
  • 支持使用正则表达式进行全文替换。
  • 可以使用模板预览文章。
  • 支持使用内置浏览器预览条目,速度非常快。
  • 系统是事件驱动式的。
  • 国际化。

三,UltraBlog里面的一些概念

UltraBlog的模式

UltraBlog.vim使写文章和更新文章都变得非常简单,因为它将文章/页面存储在本地的SQLite数据库里面。不过,你也可以将其设置为编辑器模式,这种模式下UltraBlog.vim不会将数据存储到本地,此时它的功能和其他的Vim博客脚本一样。默认情况下,UltraBlog.vim处于客户端模式。如果你想让它工作在编辑器模式下,可以在vimrc文件里面增加如下配置:

let ub_editor_mode = 1

UltraBlog的条目

目前版本下,UltraBlog.vim可以处理三种条目:文章(post)、页面(page)和模板(tmpl)。“tmpl”是“template”的简写。

UltraBlog的模板

模板用于在本地浏览器里面预览文章和页面。在Wordpress提供的API中,如果一篇文章已经发布,那用户就无法将文章作为草稿发布到Wordpress并且不影响到文章的状态。而这个特性正是为了弥补这个不足。通过模板,用户可以在浏览器里面使用预先定义的模板风格来预览文章和页面。他们可以创建任意多的模板,并且可以使用CSS和HTML,甚至是Javascript。模板要可以转化为正确的python模板字符串。换言之,使用如下的占位符。如果需要用普通的%,需要再使用一个%进行转义。可用的占位符:

%(title)s

表示当前文章/页面的标题。

%(content)s

当前文章/页面的内容。

%%

普通文本里面的%。

在数据库里面默认有一个名为“default”的模板,可以用做模板的例子。 用户也可以使用|ub_default_template|选项来制定默认的模板。

UltraBlog的语法

目前UltraBlog.vim支持以下语法:markdown,html,rst,textile,latex。

UltraBlog的状态

目前UB里面支持的状态有:publish,private,draft,pending。

UltraBlog的域

域告诉UltraBlog.vim在何处对条目进行操作,“local”代表对本地数据库里面的条目进行操作,“remote”代表对远端的博客进行操作。

四,安装UltraBlog需要的环境

UltraBlog.vim需要以下软件才可以正常工作:

vim开启python支持
SQLAlchemy0.7或者更高版本
python-markdown 或者 python-markdown2(更推荐后者)
python-html2text
pandoc 或者其他(只有使用Markdown和HTML以外的语法时才需要)
pywebkitgtk (只有需要使用内置浏览器时才需要)

如果你想将文章/页面从Markdown语法转为HTML格式,则两个python的markdown模块是必须的。更推荐python-markdown2。如果需要将缓冲区里面的文章从HTML转换为Markdown,则python-html2text也是必须的。 如果你需要对目前支持的语法之间进行任意的转换,那pandoc也是必须的。 如果你想用内置的浏览器预览条目,那pywebkitgtk就是必须的了。不过你可以通过将|ub_use_ubviewer|选项设为0来使用系统默认的浏览器,比如firefox、chromium来做这项工作。在Ubuntu里面,pywebkitgtk的软件包是python-webkit。

五,UltraBlog的键盘映射

所有的键盘映射都可以通过一些选项进行个性化,详情可参考|UltraBlog_Options|(注:|UltraBlog_Options|以翻译为UltraBlog选项)。

c-pageup            跳转到本地文章列表的前一页
c-pagedown       跳转到本地文章列表的下一页
del                      删除光标所在行的文章
enter                 在当前视图下打开光标下的文章/页面,如果是远端的文章列表,那么在打开之前,会先将文章存在本地的数据库里面。
s-enter             在另一个窗口打开光标所在行的文章/页面
c-enter             在新的标签页打开光标所在行的文章/页面

六,UltraBlog的命令

:UBNew [item [syntax/template_name]]

创建一个新条目。 第一个参数参见“UltraBlog的条目”。默认的值是“文章(post)”。 如果“item”是“post”或者“page”,那么第二个参数一定要是某种语法的名字,具体参见“UltraBlog的语法”。默认值是“markdown”。 如果“item”是“tmpl”,那么第二个参数要是模板的名字。

:UBPreview  [status/template_name]

预览当前缓冲区。 如果有设置任何的“UltraBlog状态”的话,那么当前缓冲区会被发送到博客,然后在浏览器中打开。其中URL中会附加一个“preview”参数。 如果给的参数不是文章的状态,那么会使用与变量名相同的模板在本地预览缓冲区里面的内容。 如果什么参数也没给,那么就是用默认的模板。你不必在意你使用的是哪一种语法,因为在浏览器显示之前,都会自动的翻译为html。

:UBSave

保存变化。执行这个命令后,当前缓冲会被保存到数据库。

:UBSend  [status]

发布文章。如果没有给参数的话,UltraBlog会把条目发送到博客,并且按照源数据区的信息,设置相应的值。Status的值可参见“UltraBlog的状态”。


:UBList [item[scope[page_size[page_no]]]]

列出条目。第一个参数可参考“UltraBlog的条目“。默认的值是文章。第二个参数”scope“只有在条目是文章或者页面的时候才是可用的。可参见”UltraBlog的域“。”page_size“和”page_no“用于当条目是文章,并且域为”local“的情况。前者代表一页列出多少个条目。后者代表页号。

举例来说:

:UBList

这个命令列出本地第一页文章列表。默认情况下,未发布的文章会排在已经发布的文章的前面。而且每页列出的文章数量有|ub_local_pagesize|参数决定。

:UBList post local 20 3

这个命令列出本地文章列表的第三页,每页20篇文章。如你所见,你可以通过这个命令向前或向后翻页。其实,在翻看本地列表的时候是有两个快捷键的:CTRL+PageDown,CTRL+PageUp.

:UBList post remote 50

这个命令列出博客里面最新的50篇文章。在远程的文章列表上面按ENTER键会打开光标所在的文章。如果这篇文章没有在本地的话,还会先保存到本地的数据库里面。相反,如果本地数据库里面有的话,那就会打开本地数据库里面的文章,而不是远端的文章。这样用户就可以修改markdown源码和更新远端的文章。远程的文章列表不支持页面。

:UBOpen {item} {post_id/template_name} [scope]

打开一个条目。第一个参数,可以参考”UltraBlog的条目“。如果条目是”post“或者”page“,那么第二个参数就要是文章或者页面的id。如果条目是”tmpl“的话,那第二个参数就是模板的名字。对于”scope“,可以参考”UltraBlog的域“。默认的值是”local“,即本地。

:UBDel {item} {post_id/template_name} [scope]

删除一个条目。这个命令的用法和UBDel类似,可参考UBDel。你也可以在条目列表上按DELETE键来删除目标。在一个本地文章列表中,如果要删除的文章已经发布,就会有一个确认提示,问你是否也要同时删除远端的拷贝。

:UBUplod {file_path}

上传多媒体。这个命令只能在文章编辑页面执行,而且上传文件的URL会增添在缓冲区里面。

:UBThis [item [to_syntax][from_syntax]]

使用当前缓冲区里面的内容创建一篇新的文章或者页面。如果没有指定参数,第一个参数默认是”post“;第二个参数和第三个参数使用当前缓冲区内容的语法。当前缓冲区的内容将自动的从[from_syntax]语法转化为[to_syntax]语法。

:UBConv {to_syntax} [from_syntax]

将当前缓冲从'from_syntax'语法转换为'to_syntax'语法。参见”UltraBlog的语法“。如果你需要从HTML转换为Markdown,那么你需要安装python-html2text。如果需要其他的转换,那必须安装pacdoc或者使用这种格式:|ub_converter_command|,|ub_converter_options|,|ub_converter_option_from|,|ub_converter_option_to|来制定一个正确的外部的命令。

:UBRefresh

刷新当前缓冲。

:UBFind keyword1 [keyword2 ...]

使用关键字对文章和页面进行全文搜索,所有的关键字都会高亮显示。搜索结果页面大小由|ub_search_pagesize|选项控制。

:UBRegeSearch regexp1 [regexp2 ...]

使用正则表达式对文章和页面进行全文搜索,所有符合正则表达是的字符串都会高亮显示。搜索结果页面大小有|ub_search_pagesize|选项控制。

:UBReplace needle replacement

进行全文替换。

提醒:该命令一旦执行,所有匹配的文章或页面的内容就会改变。所有,最好事先备份一下你的数据库。

:UBEnableDebug

开启调试。

:UBDisableDebug

关闭调试。

:UBToggleDebug

切换调试状态。

七,UltraBlog的选项

ub_blog:

这个选项用来设置博客。例子:

let ub_blog = {'login_name':'admin',
                'password':'pass2011',
                'url':'http://www.sample.com',
                'db':'$VIM/UltraBlog.db'
               }

要点:db:使用任何可以被'expand()'函数扩展为正常绝对路径的路径字符串。

ub_editor_mode:

这个选项为1时,UltraBlog.vim将不会将数据存储到本地数据库里面。此时,你还是可以使用UB提供的大多数函数,特别是那些用来管理远程博客的命令。 总而言之,这种模式下,UltrBlog.vim和其他的vim博客插件功能基本一样。

ub_remote_pagesize:

远程文章列表页面的默认大小。如果没有指定,默认值是10。

ub_search_pagesize:

搜索结果列表页面默认的大小。如果没有指定,默认值是30。

ub_append_promotion_link:

如果这个选项置1,那么在|:UBNew|命令执行后,会在当前缓冲后面增加一个推广链接。告诉你的博客访问者,你在使用世界上最强大的编辑器写博客。

ub_list_col1_width、ub_list_col2_width、ub_list_col3_widht:

文章或页面列表各个栏的宽度。

  • col1 指定本地id栏的宽度值,默认是10。
  • col2 指定远程id栏的宽度值,默认是10。 col3 指定状态栏的宽度值,默认是10。

ub_save_after_opend、ub_save_after_sent:

如果这两个选项的值是1的话,当你从远程博客打开或者发送后,文章或页面会马上保存到数据库里面。
默认的值是0。

ub_converter_command:

当你需要在支持的语法之间转换的时候,就需要这个命令。 默认值是'pandoc'。

ub_converter_option_from:

这一个选项会设定一个字符串,该字符串会用来填充到|ub_converter_command|命令的'from_syntax'域。
默认值为'--from=%s'。

ub_converter_option_to:

这个选项设定一个字符串,该字符串会用来填充到|ub_converter_command|命令的'to_syntax'域。 默认值为'--to=%s'。

ub_hotkey_open_item_in_current_view:

这个选项用来设置在文章列表页面打开文章或页面的快捷键。调用这个快捷键后,会在当前页面打开。默认值是:

let ub_hotkey_open_item_in_current_view='<enter>'

ub_hotkey_open_item_in_splitted_view:

这个用法和上面的一样,但是会分割一个新的窗口来显示打开的文章或页面。默认的快捷键是shift+enter。

ub_hotkey_open_item_in_tabbed_view:

这个用法和上面两个一样,但是会在新的标签页显示打开的文章或页面。 默认的快捷键是ctrl+enter。

ub_hotkey_delete_item:

这个选项用于设置在文章列表页面删除文章或页面的快捷键。当使用这个快捷键的时候,会删除文章或页面,不过会有一个确认。 默认的快捷键是delete键。

ub_hotkey_save_current_item:

这个选项用于设置保存的快捷键,即执行|:UBSave|命令的快捷键。默认值是ctrl+s。

ub_socket_timeout:

这个选项用于设置xmlrpc操作的超时值。该值是一个正数,单位是秒。 默认超时值是10秒。

ub_tmpl_img_url:

这个选项用来设定上传的图片的链接格式。这个字符串的格式应该可以被python格式化为可打印的格式,而且,每个占位符必须在wordpress的API函数newMediaObject()返回的字典关键字之间(我翻译的好拗口)。字典的结构如下:

{'url':'http://xxx/z.jpg', 'file':'z.jpg', 'type':'image/x-jpg'}

如上所示,设定的字符串格式后面应该加上语法的名字。然后用三个"#"符号将语法名字和字符串隔开。这样做是为了自动将预设的格式转换为当前缓冲区里面的格式。如果你不需要这样,那你可以略去加在语法名后面的三个“#”号。

ub_default_template:

这个选项用于设置默认的用于预览缓冲区的模板。默认值是“default”。

ub_debug:

这个选项用于设置是否开启debug模式。1表示开启,0表示关闭。 在debug模式下,SQL的执行语句会显示出来,所有的堆栈异常也会显示。 默认值是0,即没有开启。

ub_use_ubviewer:

这个选项用于设置是否使用内置浏览器来预览条目。注意,如果因为你从终端模拟器里面启动vim或gvim的时候,可能因为GTK或者其他bugs会出现GTK警告。如果这样让你很烦,请将这个选项置为0。默认值是1。

八,写在最后

到这里,UtraBlog.vim插件的功能基本全部覆盖到了。

如果大家有什么新的建议或想法可以和Lenin Lee联系。他的邮箱已经在前面介绍。

如果大家发现什么bug,也可以和作者联系或者到github提交问题:https://github.com/xbot/UltraBlog.vim/issues

还有,本文介绍的UltraBlog的版本是3.6.0。以前的版本回顾就不翻译了,应该也不影响大家的使用。

由于本人英语水平有限,翻译的难免有纰漏或者不对的地方。如果给你的阅读带来了烦恼,敬请谅解。如果,你发现那里有错误,请和我联系allan.vim@gmail.com.