vimwiki 语法

head1 head2
value1 value2
value3 value4
head1 head2
value1 value2
value3 value4
a b c d
e f
g
h

5.7. Preformatted text vimwiki-syntax-preformatted

Use {{{ and }}} to define a block of preformatted text:

  Tyger! Tyger! burning bright
   In the forests of the night,
    What immortal hand or eye
     Could frame thy fearful symmetry?
  In what distant deeps or skies
   Burnt the fire of thine eyes?
    On what wings dare he aspire?
     What the hand dare sieze the fire?

You can add optional information to {{{ tag: >

 <pre class="brush: python">
 def hello(world):
     for x in range(10):
         print("Hello {0} number {1}".format(world, x))

\( ßum_i a_i^2 = 1 \)

请添加 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 至模板中


以下内容转载自丘迟的维基世界


vimwiki 有一个 g:vimwiki_valid_html_tags 值,可以指定允许写在 wiki 中的HTML标签。 g:vimwiki_valid_html_tags 的默认值是 'b,i,s,u,sub,sup,kbd,br,hr' ,也就是说,当你在 wiki 中输入:

<b>Hello</b> <strong>Hello</stong>

输出的HTML会显示为:

Hello Hello</stong>

标签 b 被当作可用的HTML标签,而 strong 则输出为文本。

但有时候我们需要建立更强大的维基页面,不只用到这几个标签。比如本站首页的“有什么特别的”部分,就是一个有特定 class 和 id 的 div。于是在 vimrc 中定义:

let g:vimwiki_valid_html_tags='b,i,s,u,sub,sup,kbd,br,hr,div,del,code'

在这里我添加了 div, del, code 三个标签。

但是,非常不幸,当我们需要在维基里贴HTML代码,即使我们把代码放到了 {{{ }}} 包裹的 pre 里,这几个标签还是会被输出为实际的HTML标签,而不是文本。

解决办法还是修改 vimwiki_html.vim 这个文件。

找到 " WIKI2HTML "{{{ 所在行,也就是开始转换HTML的地方。

在前面添加一个函数:

function s:parse_tag_keeper(line) let line = substitute(a:line,'\\&lt;',

\'\&lt;', 'g')

let line = substitute(line,'\\&gt;',

\'\&gt;', 'g')

return line endfunction

然后在之后的 s:parse_line(line, state) 函数内,插入这个函数的调用:

...
let line = s:safe_html(a:line) let line = s:parse_tag_keeper(line)

这样如果我们用 <tag> 的形式输入 valid_html_tags 包括的标签,输出的HTML就会把它们当成文本处理了。

在写本文时,我需要输出 {{{ }}} ,而这对标记被作为了 wiki 里 pre 区块的 pattern 。于是就还要再写一个函数:

function s:parse_pre_keeper(line) let line = substitute(a:line,'\\{\\{\\{',

\'{{{', 'g')

let line = substitute(line,'\\}\\}\\}',

\'}}}', 'g')

return line endfunction

就把它定义在 s:parse_tag_keeper 之后吧。但调用的时候怎么办呢?肯定要放在 vimwiki_html.vim 处理了 pre 区块之后。思来想去,只能放在刚好要输出HTML文件的时候。但是 vim 的 writefile 函数,接受的参数是一个 list (相当于数组),而不是字串。既然如此,我们就把输出结果给合并了再替换,然后再包装成 list 。

找到这句:

call writefile(ldest, path.wwFileNameOnly.'.html')

稍微修改一下:

let output = join(ldest, "\n\r") let output = s:parse_pre_keeper(output) let outputlist = split(output, "\n\r") call writefile(outputlist, path.wwFileNameOnly.'.html')

之所以还要再split,是因为writefile写入的 NL 是无法用字符模拟的。这样当然会造成性能问题,如果有知道更好解决方案的,请留言告诉我。