Vimwiki

Vimwiki可使用dropbox在多台电脑间自动同步,如对自己域名的服务器有控制权,可使用rsync与服务器同步;如果是没有控制权的虚拟主机,可使用ftp同步工具,如windows下的second copy与服务器同步。

本文档主要基于 Vimwiki 2.01。

项目地址:Vimwiki@Github

安装 Vimwiki

安装条件:确保 vimrc 文件中的如下设置

set nocompatible
filetype plugin on
syntax on

如果是 vba 包,解压缩后用 Vim 打开插件文件,运行安装命令 :source % (或者 :so %);

如果是 zip 包,解压缩后将相关文件复制到 Vim 运行目录,显然前者更方便。

使用笔记

键盘映射

" $VIM/vimfiles/plugin/vimwiki.vim
" MAPPINGS
if !hasmapto('<Plug>VimwikiIndex')
  nmap <silent><unique> <Leader>ww <Plug>VimwikiIndex
endif
nnoremap <unique><script> <Plug>VimwikiIndex :VimwikiIndex<CR>

if !hasmapto('<Plug>VimwikiTabIndex')
  nmap <silent><unique> <Leader>wt <Plug>VimwikiTabIndex
endif
nnoremap <unique><script> <Plug>VimwikiTabIndex :VimwikiTabIndex<CR>
...

解决行内被特殊字符包围的方法

此方法非正规方法,属于 Hack 方法

比如“ ^ ...string... [^\W_]”

使用生成 pre 标签的语法,然后增加 class="code",用 CSS 将这段 pre 包围的代码普通化。

配置文件

Vimwiki 2.01 templates/default.tpl

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head profile="http://gmpg.org/xfn/11">
	<title>%title% | frePerl's Wiki Note</title>
	<meta http-equiv="Content-Type" content="text/html; charset=%encoding%" />
	<meta name="viewport" content="width=device-width,initial-scale=1" />
    <link type="text/css" rel="stylesheet" href="style/style.css" /> 
    <link rel="stylesheet" href="style/prism.css" type="text/css" media="screen" />
  </head>
  <body>
	<div id="content">
		%content%
		<div id="navi">
			<a href="index.html">Index</a> <a href="about.html">About</a> <a href="http://phpstone.com">Blog</a>
		</div>
	</div>
	<div id="footer">
		<ul>
			<li>创作共同 (<a href="http://creativecommons.org/licenses/by/2.5/cn/">Creative Commons</a>) 版权协议</li>
			<li>适用于小屏幕移动设备浏览</li>
		</ul>
	</div>
    <script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
	<script type="text/javascript">
        $("#content pre").each(function() {
            var language = $(this).attr('class');
            $(this).wrapInner("<code class='" + language + "'></code>");
        });
    </script>
    <script type="text/javascript" src="js/prism.js"></script>
</body>
</html>

Prismjs 地址 使用方法参见:Vimwiki 语法高亮

Markdown 语法

需升级到 vimwiki 2.5 https://github.com/WnP/vimwiki_markdown

# 安装 Python 插件
pip install vimwiki-markdown
DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621

# On ARM Mac (not figure out yet)
(ERROR: Could not install packages due to an OSError: Missing dependencies for SOCKS support.)

Collecting vimwiki-markdown
  Downloading vimwiki_markdown-0.4.0-py3-none-any.whl (5.7 kB)
Collecting Pygments
  Downloading Pygments-2.12.0-py3-none-any.whl (1.1 MB)
     |████████████████████████████████| 1.1 MB 17 kB/s 
Collecting markdown
  Downloading Markdown-3.3.7-py3-none-any.whl (97 kB)
     |████████████████████████████████| 97 kB 28 kB/s 
Collecting importlib-metadata>=4.4
  Downloading importlib_metadata-4.12.0-py3-none-any.whl (21 kB)
Collecting zipp>=0.5
  Downloading zipp-3.8.0-py3-none-any.whl (5.4 kB)
Installing collected packages: zipp, importlib-metadata, Pygments, markdown, vimwiki-markdown

安装完成后,转换命令位于 /usr/local/bin,如果没有将其加入当前 SHELL,则无法工作

# zsh
export PATH="/usr/local/bin:$PATH"

或者使用完整路径配置 'custom_wiki2html'

let g:vimwiki_list = [{
	\ 'path': '~/vimwiki',
	\ 'template_path': '~/vimwiki/templates/',
	\ 'template_default': 'default',
	\ 'syntax': 'markdown',
	\ 'ext': '.md',
	\ 'path_html': '~/vimwiki/site_html/',
	\ 'custom_wiki2html': '/usr/local/bin/vimwiki_markdown',
	\ 'template_ext': '.tpl'}]

将 Vimwiki 基础语法转化为 Markdown

convert.sh

#!/usr/bin/env bash

for x
do
  filename=$(echo $x|sed -e "s/\.wiki$/.md/")
  sed -f ex $x > $filename
done

ex

s/# \(.*\)$/* \1/g
s/^= \(.*\) =$/# \1/g
s/^== \(.*\) ==$/## \1/g
s/^=== \(.*\) ===$/### \1/g
s/^==== \(.*\) ====$/#### \1/g
s/^===== \(.*\) =====$/##### \1/g
s/^====== \(.*\) ======$/###### \1/g
s/{{{class="brush: *\([^"]*\)"/\`\`\`\1/g
s/{{{class="\([^"]*\)"/\`\`\`\1/g
s/{{{/\`\`\`/g
s/}}}/\`\`\`/g
s/\[\([^] ]\{1,\}\)\]\([^](]\)/![pic](\1)\2/g
s/\[\([^] ]\{1,\}\)\]$/![pic](\1)/g
s/\[\[\(\([^|]\{1,\}\)\|\)\([^]]\{1,\}\)\]\]/[\3](\2.md)/g
s/\[\[\([^]]\{1,\}\)\]\]/[\1](\1.md)/g
s/\[\(https\{0,1\}:\/\/[^ ]*\) \([^]]*\)\]/[\2](\1)/g
s/%% \(.*\)/<!-- \1 -->/g
/%toc.*/d
s/%title \(.*\)/# \1/g
s/%nohtml/- status: draft/g

可供参考

Vimwiki 中文文档