谢绝转载!
在学习使用 vim 写 markdown 的过程中,遇到了各种问题,在调整中又扩展到可以写 Latex,各种问题今天终于全部调整好了,将自己遇到的问题和解决方法写在这里,分享给有需要的人。
由于使用的电脑跨三大平台(windows10、opensuse、macosx),试用了 typora、Markdownpad2、mou、macdown、Remarkable 等各种编辑器,后来又有了编辑 Latex 的需求,最终决定折腾 vim/gvim,由于跨平台,详细说起来就比较繁琐,请大家细心慢慢看。
首先,这篇教程的目的是使用 vim/gvim 完全跨平台编辑 md 和 Latex,并且可以一键导出 docx(仅限 md)或 pdf,下面先说 windows 平台下的具体操作。
windows 平台需要安装以下软件:
1、gvim7.4
gvim 主页有两个版本,gvim74 和 gvim74-1024;后一个支持 python3.4.x,建议安装 gvim74-1024 这个版本
2、python3.4.x
为什么要安装这个呢?因为要使用 Ultisnips 插件,这个插件可以自动插入一些定义好的片段,更快捷。
3、pandoc
这个是一个文档转换神器,我们下一步的 md 转 docx 或 pdf 就靠它来完成。
4、Texlive2015
Latex 就类似 Linux 一样是一个大的概念,有好几种发行版,建议 Texlive2015,因为自带 latexmk,这个太方便了。
5、sumatraPDF
这是一个开源的 pdf 阅读器,编辑 Latex 文档时,需要调用阅读器来检查,我们要使用的 Vimtex 支持这个。
6、git
前往 git 官网下载,并安装 git,后面的下载插件要用到。
以上安装完成后,记得将 pandoc、Texlive、sumatraPDF 这三个的路径加入系统 Path 变量。具体操作为:
控制面板 – 系统和安全 – 高级系统设置 – 环境变量,在用户栏,新增变量,变量名:Path;变量值:以上三个软件的路径。完成以后重启电脑。
下来是 Linux 平台的操作:
openSUSE 平台需要安装以下软件:
1、添加 vim 源,更新到最新版。
sudo zypper ar -f http://download.opensuse.org/repositories/editors/openSUSE_Leap_42.1/ vim-editor
sudo zypper in vim
2、git
sudo zypper ar -f http://download.opensuse.org/repositories/devel:/tools:/scm/openSUSE_Leap_42.1/ git-scm
sudo zypper in git
3、Texlive2015
具体怎么安装,论坛里就有。
下面开始就不再涉及平台差异了,全部在 vim 的插件部分,主要是编辑 vimrc 的内容,跨平台通用。
我使用 vim-plug 来管理插件,如果你用其他的,请按照你的习惯修改命令。
首先是 Markdown 的编辑需要的 vim 插件,关于 md 的插件有很多,我也走了很多弯路,在这里强烈建议大家使用下面的插件,其他的都可以放弃了(中文很多教程或是经验都太陈旧了)
Plug 'vim-pandoc/vim-pandoc'
Plug 'vim-pandoc/vim-pandoc-syntax'
对于这两个插件需要做以下配置,就是写在你的 vimrc 文件里面
自动识别 md 文档
autocmd BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md set filetype=markdown
配置 pandoc 参数及自动导出 pdf 及 docx
let g:pandoc#toc#position = "left"
let g:pandoc#formatting#mode = 'h'
let g:pandoc#formatting#smart_autoformat_on_cursormoved = 1
let g:pandoc#folding#level = 9
let g:pandoc#folding#fdc = 0
let g:pandoc#folding#mode = "relative"
let g:pandoc#filetypes#handled = "markdown","pandoc"]
let g:pandoc#filetypes#pandoc_markdown = 0
let g:pandoc#modules#disabled = 'spell']
let g:pandoc#completion#bib#mode = 'citeproc'
let g:pandoc#syntax#colorcolumn = 1
function! ToPdf()
exec 'w'
exec '!pandoc --latex-engine=xelatex --template= 你自己的模板 % --output %<.pdf'
endfunction
function! ToDocx()
exec 'w'
exec '!pandoc --from=markdown --to=docx % --output %<.docx'
endfunction
nmap <silent> <F8> :call ToPdf()<CR>
nmap <silent> <F9> :call ToDocx()<CR>
这里有 3 个注意事项:
1、我映射了 F8 和 F9 分别是导出 pdf 和导出 docx,如果你有占用这两个键,自己修改最后两行。
2、导出 pdf 如果涉及到中文,需要指定模板,windows 默认的模板路径在~\AppData\Roaming\pandoc\templates
openSUSE 默认的模板路径在 /usr/share/pandoc 版本号 /data/templates/ 下面,具体的模板内容就要自己在网上找了。找到后需要复制到上面的路径下。
3、导出 docx 的时候,有两个参数 --dir-data 和 --reference-docx
--dir-data 不指定的话,默认路径就是~\AppData\Roaming\pandoc\,自动去这里查找一个 reference.docx 文件作为模板
--reference-docx 可以指定一个具体的 docx 文件作为模板,默认路径和你的 md 文件在同一个目录内。
以上两个参数只能用一个,指定目录或是指定文件。
由于 pandoc 转换 pdf 是需要使用 texlive 的引擎,我想为了一个 md 转 pdf,已经安装了 3G 的 Texlive 了,干脆把 Latex 的编辑 – 编译也放在 vim 里面算了,结果这个想法让我折腾到崩溃,因为网上中文的 vim 涉及 Latex 的教程全部陈旧到无法说,英文的资料都特别零散,东一句西一句,折腾了一周才解决。
既然是 vim 编辑 – 编译,第一步肯定还是插件, 强烈建议 vimtex vimtex vimtex 就是这个插件,别的插件都不要用
vimtex 这个插件完全不需要你手工安装任何东西,命令如下:
Plug 'lervag/vimtex'
这样就 ok 了,完全不需要你再去搞任何目录、下载、复制,就这么简单。而且它默认使用 Texlive2015 里面带的 latexmk 来完成编译,这个东西也极其牛逼,有两个特点:
1、支持在 tex 源码文件里面指定编译引擎,其 Tex 引擎设置命令格式为:%!TEX program =
2、支持源码修改后,立即更新 pdf 以供查看
vimrc 需要的配置如下:
let g:tex_flavor = 'latex'
let g:tex_indent_items = 0
let g:Tex_DefaultTargetFormat = 'pdf'
let g:Tex_CompileRule_pdf = 'xelatex -src-specials -synctex=1 -interaction=nonstopmode $*'
let g:Tex_FormatDependency_pdf = 'pdf'
let g:vimtex_view_method = 'general'
let g:vimtex_enabled = 1
let g:vimtex_complete_img_use_tail = 1
if WINDOWS()
let g:vimtex_view_general_viewer = 'SumatraPDF'
let g:vimtex_view_general_options= '-reuse-instance -forward-search @tex @line @pdf'
let g:vimtex_view_general_options_latexmk = '-reuse-instance'
elseif OSX()
let g:vimtex_view_general_viewer = 'open'
else
let g:vimtex_view_general_viewer = 'xdg-open'
endif
这里有 2 点要注意,
1、编译命令是
\ll
,调用 latexmk 来完成编译,这里需要一个文件,windows 或 openSUSE 都是要放在~/ 下面,文件名:
.latexmkrc
内容如下:
$pdf_mode = 1;
$pdflatex = "xelatex --shell-escape -src-specials -synctex=1 -interaction=nonstopmode %O %S";
$recorder = 1;
$pdf_previewer = "SumatraPDF -reuse-instance -inverse-search -a %O %S";
2、我根据操作系统设定了不同的 pdf 阅读器,编译完成后,自动打开 pdf 文档查看,判断系统的函数你要自己写在 vimrc 里面,如果不会,google 这个很容易找到。
完成 vimrc 的修改后,重新打开你的 vim/gvim,新建一个 md 文档,按下 F8 导出 pdf,按下 F9 导出 docx
新建一个 tex 文档,输入\ll,自动编译并自动打开 pdf 供你查看,不要关掉 pdf 窗口,然后对源码进行修改,对源码保存后,pdf 会自动更新,这就是前面大力推荐 vimtex 这个插件的原因。
这样子设定后,什么环境下,md 和 Latex 都是相同的编辑体验,简单又好用。写在这里给有需要的人。
谢绝转载!