Windows下利用Pandoc为vim配置简单的Markdown预览功能

平时用 vim 书写 Markdown,希望能够方便地预览。我的想法是这样的:按下键盘上的 [F5],就能直接在浏览器中打开 Markdown 文件的 html。现有的解决方案是像 MarkdownPreview 那样的实时浏览器预览插件,但是在 Windows 上面的装用不是很方便。我的电脑已经安装了 Pandoc,希望可以用 Pandoc 加上 vim 编程实现这个 Markdown 预览功能。

关于 Pandoc 的一些基本相关的知识

pandoc 是一款功能强大的文档转换工具,其能够在多种文档格式之间进行转换,可以将 Markdown 语言书写的文档编译成 html 格式的网页文件。安装好 Pandoc 之后,在命令行中输入如下的命令可以实现转换:

pandoc ./[你要转换的文件的文件名].md -f markdown+tex_math_dollars  -t html --mathjax  -s -o ./[你要输出的网页文件的文件名].html

其中,-f 参数表示输入的文件类型。在 markdown 后面加上 +tex_math_dollars ,调用拉泰赫公式的格式,否则 Markdown 中编辑的公式无法显示;下出现的 --mathjax 亦同。-t 参数表示你要输出的文件类型,-s 表示按照标准格式输出,不加上的话主要的问题是代码高亮看不见。-o 表示指定输出的文件。

具体的实现方法

想要实现的效果是:按下 [F5] ,自动打开浏览器并显示编译好的 Markdown 文件,在每次预览结束后删除这个临时的预览文件。我们可以很容易地写出如下的代码添加到 Windows 下 Vim 安装目录下的 .\Vim\_vimrc 文件:


" 定义快捷键
map  <F5>  :w<CR>:call Run()<CR>
imap <F5>  <ESC>:w<CR>:call Run()<CR>

" 写一个用于实现功能的函数
func! Run()
	if expand("%:e") == "md"
		pandoc "%" -f markdown+tex_math_dollars  -t html --mathjax  -s -o ./temprunfile.html && start .\temprunfile.html
		:! del .\temprunfile.html
		redraw!
		echohl WarningMsg | echo " Running on browser ."
	else
        redraw!
        echo "This is not a Markdown File ."
    endif
endfunction

设计的改进和应变

在 Edge 近期更新之后,出现了一些问题,就是不知道微软最近抽什么风,edge 浏览器更新了几个没有用的大聪明功能。起始页的右侧多了这个意义不明的滚动条,加上这个 “必应发现” 按钮和侧边栏。由于国内互联网策略的原因,国内用户没有办法使用 New Bing,所以这个按钮出现在这个位置,会导致人对于自己无法使用 New Bing 的命运感到无可奈何、长吁短叹,非常的膈应。而且主页也很不雅观,图片加载也受到了一些影响,有时候会显示不全。侧边栏的功能,基本也是没有什么用的。因此许多人会选择隐藏旁边的滚动条和必应发现按钮。

不太雅观的必应主页

隐藏滚动条的方法,是在必应启动的时候追加如下的参数:

--disable-features=msUndersideButton 

效果是可以把滚动条变成细长的 Windows 10 的样式。

而隐藏 “必应发现” 按钮则是追加这个参数:

--enable-features=OverlayScrollbar,OverlayScrollbarWinStyle,OverlayScrollbarWinStyleAnimation

日常使用 Edge 方便,可以先关闭 Edge 的 “始终显示侧边栏” 和 “启动增强” 之后,把这两个参数添加到快捷方式的 “目标” 一栏中,这样每一次在桌面上点击 Edge 启动的时候就都可以隐藏这两者。

如图关闭侧边栏
如图关闭启动增强
如图,在这个地方修改必应的快捷方式

想必大家已经意识到了问题的所在:

  1. 我们在 _vimrc 里书写上述这一段代码的时候,并没有指定 msedge.exe 启动的时候使用这两个参数。那么当 Edge 启动之后,用户看见了预览的文件,点击了新选项卡,看到的 Edge 起始界面就会包含未被隐藏的滚动条和 “必应发现” 按钮,很不雅观,而后面的所有新标签都会出现这种情况。
  2. 如果我们在 _vimrc 里添加一段指定 msedge 启动的时候使用这两个参数的代码,形如 :
    pandoc "%" -f markdown+tex_math_dollars -t html --mathjax -s -o ./temprunfile.html && start msedge --disable-features=msUndersideButton --enable-features=OverlayScrollbar,OverlayScrollbarWinStyle,OverlayScrollbarWinStyleAnimation & start .\temprunfile.html && start .\temprunfile.html
    那么如果用户在按下 [F5] 按钮之前就已经通过修改过参数的快捷方式打开了隐藏过 Edge,vim 就会无视这个正在运行的 Edge 打开一个新的 Edge 窗口,而不是新增 Edge 标签。如果用户想要合并两个窗口,还要先把现在这个窗口缩小,然后再握住鼠标拖动,把两个窗口合二为一,然后才能用 Ctrl + Tab 按键在几个窗口之间切换浏览,这一点同样还是非常膈应。

所以我们要解决现在面临的这个境况,就需要整理一下我们的思路。我们一方面希望启动 Edge 的时候可以带上这两个参数,另一方面我们希望在 Edge 已经带参数启动并在运行的时候直接在现有的 Edge 里面打开预览文件。这个程序的流程如下:

流程图

最理想的程度,我们希望可以只按两下键盘,第一下按下 [F5] 进入预览,第二下在 vim 打开的终端里按下任意按键关闭预览删除临时运行文件。因此,上述的流程控制在 _vimrc 文件中必须使用两行代码实现。

因此,我们可以使用管道实现 if 流程控制。

cmd 检测 Edge 是否在运行

使用 tasklist 可以列出所有正在运行的程序,可以列出的结果把参数传递给 find 命令,判断是否存在 msedge.exe 这一进程。使用的命令如下:

tasklist | find /i "msedge.exe"

在此基础上加上 “如果成功执行了 find 命令(也就是成功找到了 Edge 的进程)就不打开 Edge,否则打开 Edge ” 的判断。用管道符号 || 连接前一个命令和带参数运行 Edge 的命令:

tasklist | find /i "msedge.exe" || start msedge --disable-features=msUndersideButton --enable-features=OverlayScrollbar,OverlayScrollbarWinStyle,OverlayScrollbarWinStyleAnimation

看一下执行的效果。第一次在 CMD 中运行的时候,Edge 处于关闭状态,这个时候成功启动了 vim。再次执行,反馈找到了 Edge,没有执行启动 Edge 的操作。

执行效果如图所示

融合上述的设计

再加上成功运行 Pandoc 就执行这一操作和无论上述命令是否成功执行都尝试打开 temprunfile.html 的命令:

pandoc "%" -f markdown+tex_math_dollars -t html --mathjax -s -o "temprunfile.html" && tasklist | find /i "msedge.exe" || start msedge --disable-features=msUndersideButton --enable-features=OverlayScrollbar,OverlayScrollbarWinStyle,OverlayScrollbarWinStyleAnimation & start .\temprunfile.html

故而经过修改,_vimrc 中完整的函数和快捷键定义应该为:


" 定义快捷键
map  <F5>  :w<CR>:call Run()<CR>
imap <F5>  <ESC>:w<CR>:call Run()<CR>

" 写一个用于实现功能的函数
func! Run()
	if expand("%:e") == "md"
		pandoc "%" -f markdown+tex_math_dollars -t html --mathjax -s -o "temprunfile.html" && tasklist | find /i "msedge.exe" || start msedge --disable-features=msUndersideButton --enable-features=OverlayScrollbar,OverlayScrollbarWinStyle,OverlayScrollbarWinStyleAnimation & start .\temprunfile.html
		:! del .\temprunfile.html
		redraw!
		echohl WarningMsg | echo " Running on browser ."
	else
        redraw!
        echo "This is not a Markdown File ."
    endif
endfunction

最终效果

在 Edge 已经启动的情况下,打开的 html 预览会追加到已有的窗口的 tab ,而未启动 Edge 的时候会以修改过滚动条和 “必应发现” 不显示的情况下启动 Edge,预览文件。同时,文件中的 LaTeχ 公式显示正常。

最终预览效果如图所示

而 Edge 的新页标签也是干干净净的,没有糟心的滚动条,图片加载正常,没有 “必应发现” 膈应人。

这样的必应看上去确实好多了

唯一美中不足的是 vim 会产生两个小弹窗,需要切换到弹窗按两下任意按键。

弹窗1

弹窗2

对于浏览器而言,删除本地文件之后浏览器依然可以正常显示,所以这两个弹窗可以随便按。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值