项目主页
https://github.com/vimwiki/vimwiki
安装和使用说明,官方写的很细:https://github.com/vimwiki/vimwiki/blob/master/README-cn.md
安装方法
通过 Vim-Plug 安装
在 vimrc 中加入以下插件设置:
Plug 'vimwiki/vimwiki'
然后运行 :PlugInstall
。
更改 Wiki 语法
默认的语法使用的是VimWiki,使用下来体验还行。但是我以前写的几百篇笔记都是使用Markdown的,github,csdn都是Markdown语法的。所以对于我来说必须Markdown,否则无法使用了。
VimWiki 目前附带 3 种语法:VimWiki(默认)、Markdown(降价)和 MediaWiki(媒体)。
注意:只有默认语法带有内置的 HTML 转换器。对于 Markdown 或 MediaWiki,请参阅:h vimwiki-option-custom_wiki2html。此处提供了一些示例和第 3 方工具。
如果您更喜欢使用 Markdown 或 MediaWiki 语法,请在您的 中设置以下选项.vimrc:
let g:vimwiki_list = [{'path': '~/vimwiki/',
\ 'syntax': 'markdown', 'ext': '.md'}]
使用markdown语法,就无法使用HTML转换器了,这样有点难受,毕竟转成html可以方便的分享或者做个人博客使用。
官方提供了一些解决方案:
https://vimwiki.github.io/vimwikiwiki/Related%20Tools.html#Related%20Tools-External%20Tools
patrickdavey/vimwiki_markdown
评价:能用,但不完美~
实测效果一般,markdown一些语法的支持不是太好,比如表格的样式,无法达到我想要的效果,非最终方案,可跳过此节
我选择的是这个项目:
https://github.com/patrickdavey/vimwiki_markdown
- 安装ruby 我的安装过程:https://blog.csdn.net/lxyoucan/article/details/117951891
- 安装 vimwiki_markdown gem
gem install vimwiki_markdown
安装完成以后,修改.vimrc就可以类似如下内容即可:
let g:vimwiki_list = [{'path': '~/vimwiki', 'template_path': '~/vimwiki/templates/',
\ 'template_default': 'default', 'syntax': 'markdown', 'ext': '.md',
\ 'path_html': '~/vimwiki/site_html/', 'custom_wiki2html': 'vimwiki_markdown',
\ 'html_filename_parameterization': 1,
\ 'template_ext': '.tpl'}]
最重要的部分是’custom_wiki2html’: ‘vimwiki_markdown’和’html_filename_parameterization’: 1。custom_wiki2html 告诉 vimwiki 使用这个 gem 来创建 html, html_filename_parameterization 告诉 vimwiki 匹配 vimwiki_markdown 产生的文件名。
下载
https://raw.githubusercontent.com/patrickdavey/vimwiki_markdown/master/example_files/default.tpl
保存路径如下:
~/vimwiki/templates/default.tpl
命令
:Vimwiki2HTML
– 将当前 wiki 文件转换成 HTML 网页
:VimwikiAll2HTML
– 把所有 wiki 文件转换成 HTML 网页
:help vimwiki-commands
– 显示全部命令
实测效果一般,无法达到我想要的效果
WnP/vimwiki_markdown
评价:能用,但不完美~
我了能达到我的效果,还又测试了下面的插件。
https://github.com/WnP/vimwiki_markdown
实际测试结果与patrickdavey/vimwiki_markdown几乎相同,样式一般。不完美。
因为没达到我的目的就不记录这个插件安装的过程了。有兴趣根据项目主页自行安装即可。
wiki2html.sh
评价:能用,效果比上面两个插件强,我的最终方案,但是比起iamcco/markdown-preview.nvim
这样的markdown预览插件的效果,还是差很多。
1.安装pandoc
安装方法参考:https://pandoc.org/installing.html#linux
在下载页面https://github.com/jgm/pandoc/releases
根据自己cpu类型下载,
我下载的是:pandoc-2.14.0.2-linux-amd64.tar.gz
解压直接就可以使用了,把这个程序放进path环境变量里即可。
比如:
export PATH=$PATH:/home/itkey/.soft/pandoc-2.14.0.2/bin
2.配置vimwiki
2.1创建目录
~/Sync
目录结构如下:
.
├── wiki
│ └── template
│ └── markdown.html
├── wiki2html.sh
└── wiki_html
创建目录命令:
mkdir -p ~/Sync/wiki/template
2.1创建markdown.html
命令如下:
vim ~/Sync/wiki/template/markdown.html
文件内容如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>$title$---$root_path$</title>
<link rel="stylesheet" href="$root_path$$css$">
<meta http-equiv="Content-Type" content="text/html">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
code {
/*去掉代码的边框*/
border: 0px solid #ccc;
background-color: #f5f5f5;
}
</style>
</head>
<body>
<div>
<a href="$root_path$index.html">首页</a> > $title$
</div>
<hr />
$body$
<hr />
<div>
<a href="$root_path$index.html">首页</a> > $title$
</ol>
</div>
</div>
</body>
</html>
2.2 创建wiki2html.sh
vim ~/Sync/wiki2html.sh
内容如下:
# This is heavily based in the code here:
# https://gist.github.com/enpassant/0496e3db19e32e110edca03647c36541
# Special thank you to the user enpassant for starting it https://github.com/enpassant
#!/bin/bash
SYNTAX="$2"
EXTENSION="$3"
OUTPUTDIR="$4"
INPUT="$5"
# Added ones
TEMPLATE_PATH="$7"
TEMPLATE_DEFAULT="$8"
TEMPLATE_EXT="$9"
ROOT_PATH="${10}"
[[ "$ROOT_PATH" = "-" ]] && ROOT_PATH=''
FILE=$(basename "$INPUT")
FILENAME=$(basename "$INPUT" ."$EXTENSION")
FILEPATH=${INPUT%$FILE}
OUTDIR=${OUTPUTDIR%$FILEPATH*}
OUTPUT="$OUTDIR"/$FILENAME
CSSFILENAME=$(basename "$6")
FULL_TEMPLATE="$TEMPLATE_PATH/$TEMPLATE_DEFAULT$TEMPLATE_EXT"
HAS_MATH=$(grep -o "\$\$.\+\$\$" "$INPUT")
if [ -n "$HAS_MATH" ]; then
MATH="--mathjax=https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
else
MATH=""
fi
# >&2 echo "MATH: $MATH"
sed -r 's/(\[.+\])\(([^)]+)\)/\1(\2.html)/g' <"$INPUT" | pandoc $MATH --template="$FULL_TEMPLATE" -f "$SYNTAX" -t html -c "$CSSFILENAME" -M root_path:"$ROOT_PATH" -M title:"$FILENAME" | sed -r 's/<li>(.*)\[ \]/<li class="todo done0">\1/g; s/<li>(.*)\[X\]/<li class="todo done4">\1/g' > /tmp/crap.html
# With this you can have ![pic of sharks](file:../sharks.jpg) in your markdown file and it removes "file"
# and the unnecesary dot html that the previous command added to the image.
sed 's/file://g' < /tmp/crap.html | sed 's/jpg.html/jpg/g' > "$OUTPUT.html"
设置可招行权限
chmod +x ~/Sync/wiki2html.sh
2.3配置.vimrc
let g:vimwiki_list = [{
\ 'auto_export': 1,
\ 'automatic_nested_syntaxes':1,
\ 'path_html': '$HOME/Sync/wiki_html',
\ 'path': '$HOME/Sync/wiki',
\ 'template_path': '$HOME/Sync/wiki/template/',
\ 'syntax': 'markdown',
\ 'ext':'.md',
\ 'template_default':'markdown',
\ 'custom_wiki2html': '$HOME/Sync/wiki2html.sh',
\ 'template_ext':'.html'
\}]
au BufRead,BufNewFile *.md set filetype=vimwiki
let g:taskwiki_sort_orders={"C": "pri-"}
let g:taskwiki_syntax = 'markdown'
let g:taskwiki_markdown_syntax='markdown'
let g:taskwiki_markup_syntax='markdown'
配置完成,虽然还不能说是完美的,经过我不断在折腾,总算可以跟CSDN比较接近了。