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 运行目录,显然前者更方便。
使用笔记
键盘映射
- ww 在当前窗口打开首页
- wt 在新 Tab 打开首页
" $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