安装、定制、使用Viki 以及Deplate
03. Sep 2004
本文档主要讲如何应用Viki 插件在Vim 中搭建一个本地Wiki 环境,以及如何使用配套工具Deplate 把Viki 格式的文本文件发布成其它格式(主要是html)的文档。
本文档由Rongjun Mu 撰写,授权协议为GNU Free Documentation License 。
您可于http://nic-nac-project.de/~murj/viki/vim/VimViki.html 获取本文档最新版本。
注意:下面的描述,如不特别说明,将适用于GNU/Linux 环境。Viki 的版本是1.4, Deplate 的版本是0.5.
参考Jjgod 的Viki 上手指南。
vikiUseParentSuffix :: 当设置为非0时,如果您使用<c-cr>1在VikiName 间跳转时,如果目标VikiName 页不存在,新建该页时将使用同当前所在的页相同的文件后缀。所以,在您的~/.vimrc 里加上一行:
let g:vikiUseParentSuffix = 1
设置filetype 的目的是为了让Vim 识别需要解析为Viki 文件,支持高亮Viki 定义的语法、折叠等。可以手工设置,比如使用Viki 命令::VikiMode,或者使用Vim 的set 命令::set ft=viki,或者在源文件里添加vim: ft=viki 字样。因为Viki 默认以% 开头的行为注释,所以可以在文件中加上类似于如下的一行:
% Vim: ft=viki
为了方便,我们自动把以viki 为后缀的文件的filetype 设置为Viki 文件。把下面的代码添加到~/.vim/filetype.vim (如果没有此文件,则新建之) 里:
augroup filetypedetect au! BufRead,BufNewFile *.viki setfiletype viki augroup END
然后以viki 为文件后缀开始编辑您的Viki 吧。
使用<c-cr> 在VikiName 间跳转,使用<LocalLeader>vb 回到上一页,LocalLeader 通常是\,所以一般情况下使用\vb 回到跳转前的页面。使用<c-tab> <s-c-tab> 移动到同一页面的下一个/前一个VikiName。
Viki 支持折叠功能,请使用:h folding 来获取Vim 关于折叠的帮助。
在任何时候您都可以通过:h viki, :h viki-names, :h viki-headings 等命令来查看在线帮助。阅读Deplate 的帮助文件将有助于您编辑Viki 并发布成html 或其它格式的文档。Deplate 网站也是由Viki 写成后编译输出成html 格式的网页的,作者还提供了源文件,这是一份非常好的学习材料。
下载,安装的过程不详述。Deplate 源码包里的README.txt 里有安装说明。Deplate 需要Ruby,所以请确保您机器上安装了Ruby。下面是一个安装步骤简易说明:
$ ruby setup.rb config
$ ruby setup.rb setup
# ruby setup.rb install,这一步一般来说需要root 权限。
在本人的Debian GNU/Linux 上,默认安装于/usr/local/lib/site_ruby/1.8/ 下。
Deplate 可将Viki 文件输出为html/xhtml 格式的网页,html 幻灯片,甚至是Latex 源文件。
在命令行输入deplate -h,可以看到Deplate 的用法及其接受的参数。比较常用的几个参数为:
例如,deplate -d html -f html -m zh-cn --css deplate MyViki.viki 将把MyViki.viki 输出到html 目录下,文件名为MyWiki.html,Charset 为gb2312,同时把deplate.css 拷贝到html 目录(关于CSS 后面还会涉及)。
Deplate 的本地配置文件位于~/.deplate/ 目录下。目录结构如下:
- ~/.deplate/ - config.rb 通用的用户配置文件 - after/ - fmt/FORMATTER.rb 在相应的 formatter 之后加载 - mod/MODULE.rb 在相应的 module 之后加载 - css/ 用户自定义的 css 文件 - fmt/ 用户自定义的 formatter(格式化工具) - mod/ 用户自定义的 modules(模块) - templates/ 用户自定义的模板
您不妨把deplate 自带的css 文件拷贝到~/.deplate/css/ 目录下,修改为适合自己的样式。
命令的格式为:
#COMMAND [OPTIONS]: ARGS
其中OPTIONS 具有如下形式:
比较常用的命令有:
LIST: index 应放在最后一个INCLUDE 命令之后,以建立完整的索引。
本篇文档定义了如下命令,
#TITLE: 安装、定制、使用 Viki 以及 Deplate #DOC fmt=html: css=moon.css|screen % heading 不带数字 #DOC fmt=html: headings=plain #AU: Rongjun Mu #DATE: today % 输出标题部分 #MAKETITLE % 输出table of contents #LIST: toc
效果参见本页开头部分,你可以参照本页的html 源文件来学习Deplate 把上面的命令转换为什么样的html 代码。
本部分以本人建构此Viki 为实例,介绍如何使用子目录组织您的Viki、如何使用Makefile 来有效的协助您发布Viki。
目前主要关注的是html 格式的发布,其它格式的发布有待完善。
- viki/
- index.viki
- makefile
- Makefile
- vim/
- index.viki
- VimViki.viki
- lpi/
- LpiHome.viki
- LpiI101.viki
- ...
- ...
这里使用makefile/Makefile 来维护整个“Viki 站点”的发布工作。其中makefile 用于顶层目录,负责编译顶层目录的Viki 源文件并将递归到所有的子目录,在递归之前,首先把负责子目录发布工作的Makefile 拷贝到每个子目录里。但是,如果顶层的Makefile 并不比子目录里的Makefile “新”(也就是自从上次拷贝以后没有更新过顶层目录的Makefile)。这样,只需要统一维护一个通用的Makefile 模板。
这里使用的技巧是make 会优先使用makefile,如果没有makefile 再查找Makefile。
makefile 里有定义SUBDIRS = vim lpi,也就是定义需要递归的子目录。需要添加一个子目录,只需相应的修改SUBDIRS 的定义,像SUBDIRS = vim lpi another 就增加了一个名为another 的子目录。
make。本人一般在顶层目录使用像 gvim vim/index.viki 这样的命令编辑源文件,然后直接在 gvim 中使用: make
您可以随意下载、使用这些文件:makefile 以及Makefile。
参照上面给出的目录结构,把makefile 以及Makefile 放在顶层目录。根据自己的情况,您可能需要修改makefile 的最初几行用户配置。包括:
您可以在顶层目录使用如下一些命令:
Deplate 是由Ruby 语言 写就的。实话说,我完完全全是个Ruby 盲,好在Deplate 的文档还比较完善。下面的这些完全是根据Deplate 的文档,结合本人的实际使用总结而来。如果您细心阅读Deplate 文档,了解得肯定比我还多。说“进阶”完全是唬人,让高手们见笑了。
Deplate 的配置文档要使用Ruby 语法来写:( 根据其文档及示例,似乎具有这样的一般框架:
class Deplate
def self.user_setup(options)
# 这里是用户设置
end
end
Deplate 使用的大部分命令行参数都可以在配置文件中使用相应的选项来设置。
TODO ###
Deplate 定义了两种类型的模板变量:
下面几行摘自本人的config.rb:
class Deplate
def self.user_setup(options)
if Deplate::Formatter.matches?("html")
@@post_matter_template[9] = ["<div class='footer'>"]
@@post_matter_template[10] = ["<p class='footer'>
Edited with <a href='http://www.vim.org'>Vim</a> and
<a href='http://www.vim.org/scripts/script.php?script_id=861'>Viki</a>,
created with <a href='http://deplate.sourceforge.net'>Deplate</a>.
Copyleft © 2004 <a href='http://nic-nac-project.de/~murj/'>Rongjun Mu</a>
</p>"]
@@post_matter_template[11] = ["</div>"]
end
@@deplate_template << "#DOC fmt=html: css=moon.css|screen"
@@deplate_template << "#DOC fmt=html: headings=plain"
@@deplate_template << "#AU: Rongjun Mu"
@@deplate_template << "#DATE: today"
end
end
使用-t 或--template 命令行参数可指定Deplate 编译源文件时使用的模板。
TODO ###
1 <c-cr> 表示Ctrl+Enter。