概要
使用Node.js的模块来编译md文件到html和pdf文件。
并使用vim脚本来绑定该编译功能到Vim编辑器。
添加vim对md文件的语法高亮支持。
支持一键编译,预览md文件。
编译Markdown文件
- 使用Node.js包管理工具npm安装编译md文件所需的模块gulp
//全局安装
$ npm -g i gulp
//依赖安装
$ npm i gulp --save-dev
- 安装两个模块,一个用来输出html (github格式),另一个用来输出pdf
//在项目文件夹下
$ npm i gulp-markdown-github-style
$ npm i gulp-markdown-pdf
- 写入gulp任务文件
在项目文件夹下新建名为gulpfile.js的文件:
//载入模块
var gulp = require("gulp");
var markdown = require('gulp-markdown-github-style');
var mdpdf = require('gulp-markdown-pdf');
//接收外部参数,将--file后的参数写入变量file中,和vim宏绑定使用
var file, i = process.argv.indexOf("--file");
if(i>-1) {
file = process.argv[i+1];
}
//调用html模块输出, 使用file参数来定位文件源,输出到note_html文件夹中
gulp.task("compileMDToHtml", () =>
gulp.src(file)
.pipe(markdown())
.pipe(gulp.dest('note_html'))
);
//调用pdf模块输出, 同上
gulp.task("compileMDToPdf", () =>
gulp.src(file)
.pipe(mdpdf())
.pipe(gulp.dest('note_pdf'))
);
//安排任务同步进行,此处的回调函数done()为必须
gulp.task("default", gulp.parallel("compileMDToHtml", "compileMDToPdf", function(done) {
done();
}));
Vim脚本绑定快捷键
在.vimrc文件中加入编译部分,该配置文件可在~/.vimrc找到(或新建一个)。
"按F2编译运行,必须打开类型检测
map <F2> :call CompileRunGcc()<CR>
imap <F2> <ESC>:call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'sh'
:!./%
elseif &filetype == 'markdown'
exec "!gulp --file %"
endif
endfunc
" 开启文件类型检测
filetype plugin indent on
" 添加markdown文件类型
autocmd BufNewFile,BufRead *.md set filetype=markdown
添加Markdown语法高亮
添加markdown文件语法高亮
觉得比较好的能在terminal使用的语法高亮文件https://github.com/plasticboy/vim-markdown
将syntax/markdown.vim拷贝到 ~/.vim/下,并在.vimrc中加入
" 添加markdown文件语法文件
au! Syntax markdown source ~/.vim/markdown.vim
虽然在
terminal下,强调和斜体存在一些问题,不过并不影响使用,毕竟已经可以用网页和pdf来看效果啦。
增加开启浏览器预览功能
既然已经把编译也加进去了,那么再加个自动打开编译后的html来预览的功能吧。
思路是获取生成的html的文件名然后调用默认浏览器打开。
查阅帮助手册:help expand,发现在vim脚本中对当前文件标示符%有如下的扩展:
Modifiers:
:p expand to full path
:h head (last path component removed)
:t tail (last path component only)
:r root (one extension removed)
:e extension only
举一些用法上的例子:
" 假设完整文件路径为: /A/B/C/file.md
% file.md
%:p /A/B/C/file.md
%:p:h /A/B/C/
%:p:t file.md
%:p:r /A/B/C/file
%:p:t:r file
%:r file
%:e md
于是我们只要在配置文件.vimrc中,在编译之后加入自动打开该文件的部分即可:
elseif &filetype == 'markdown'
" 这里改成仅编译html,会更快一些,当然如果喜欢预览pdf也可以自行修改
exec "!gulp compileMDToHtml --file %"
" 浏览器开启html预览
exec "!open ./note_html/%:r.html"
endif
至此使用Vim写markdown,编辑,编译,预览一条龙,撒花。