markdown-org 让你在vim中预览代码块的执行结果

什么是markdown-org

markdown-org是neovim的一款插件(项目地址 https://github.com/Kurama622/markdown-org ,欢迎star),你可以通过它来预览markdown中每一个代码块的执行结果。它会以浮动窗口的形式将结果展示出来,而不会打乱你现有的窗口布局。

如果你的markdown中有多种语言,那么你可以选择运行其中一种语言,它会帮你把这种语言的所有代码块挑选出来,并按照在文中出现的次序,依次运行,结果以浮动窗口的形式展示出来。

比如你有这样一个markdown文件:

# Markdown-Org

## Test Run Code Block

```python
import numpy as np
import matplotlib.pyplot as plt

a = np.random.random((2,3))

plt.figure()
plt.plot(a[0], a[1])
plt.show()

print(">>> a \n", a)
```

将光标放在代码块中,调用org#main#runCodeBlock函数即可预览当前代码块的结果。

runcodeblock

如果你的markdown文件中有多种语言,比如:

# c语言的include和python的import的作用是否相同

## 引入
在c语言中我们经常这样引入头文件:
```c
#include<stdio.h>
```
而在python中我们习惯这样引入库:
```python
import math
```
## 使用
c语言在引入stdio.h头文件后,可以使用其中的printf函数:
```c
int main(){
    printf("F**k you, python!");
    return 0;
}
```
而python在引入math后,可以使用math中的函数:
```python
print("F**k you x {}, c!".format(int(pow(2,10))))
```

我们可以看到这个markdown文件中有两种语言。而且这两种语言都有多个代码块,markdown-org可以帮你挑出一种语言来运行。你只需要调用org#main#runLanguage函数即可。
在这里插入图片描述
但是要注意的是,markdown-org本身不含语法分析功能,它仅仅是顺序执行你选择的某种语言的代码块。所以如果你将引入库或者包的代码块写在调用库或者包的代码块之后,它依旧会报错。

在这里插入图片描述

安装和使用

如果你用vim-plug,你可以通过下面命令安装

Plug 'Kurama622/markdown-org', {'for':'markdown'}

如果你用dein,你可以通过下面命令安装

[[plugins]]
repo = 'Kurama622/markdown-org'
on_ft = 'markdown'

在你的配置文件(.vimrc/init.vim)中,写入

let g:default_quick_keys = 1

将启用默认配置

默认快捷键和参数

参数/快捷键功能
Alt+b展开当前代码片段的运行结果
Alt+l运行某种语言的所有代码片段,会弹出语言选择框
g:language_path设置语言的环境路径
g:org#style#border设置边框的风格(0, 1, 2, 3, 4, 5),0为无边框
g:org#style#bordercolor设置边框颜色
g:org#style#color设置结果文本的颜色

自定义参数和快捷键设置

如果你不想使用默认配置,你可以自定义一些参数和快捷键。示例如下:

let g:default_quick_keys = 0
let g:org#style#border = 2
let g:org#style#bordercolor = 'keyword'
let g:org#style#color = 'Identifier'
let g:language_path = {
            \ "python":"python",
            \ "python3":"python3",
            \ "go": "go",
            \ "c": "gcc",
            \ "cpp": "g++",
            \ "c++": "g++",
            \ "javascript": "node",
            \ }
nnoremap <silent> <M-b> :call org#main#runCodeBlock()<CR>
nnoremap <silent> <M-l> :call org#main#runLanguage()<CR>
  1. 你需要将g:default_quick_keys置为0,以表示禁用默认设置。

  2. g:org#style#border 可以设置为0-5中的数值。

  3. g:org#style#bordercolorg:org#style#color设置为不同的高亮色。你可以设置为keywordIdentifierStatementCommentPreProcIgnoreLabelConditionalException等不同的值,具体效果会根据你的主题而定。

  4. g:language_path写入不同语言的环境路径,如果你环境配置的没有问题,默认的设置就可以很好的工作,如果你的环境有问题,比如你输入python并不能启动python的交互模式,那么你可以将你python的路径写入到g:language_path中:

let g:language_path = {
            \ "python":"/usr/bin/python",
            \ "python3":"python3",
            \ "go": "go",
            \ "c": "gcc",
            \ "cpp": "g++",
            \ "c++": "g++",
            \ "javascript": "node",
            \ }

  1. org#main#runCodeBlock为运行代码块的函数,org#main#runLanguage为运行某种语言的函数,你可以按照上面例子绑定到你所喜欢的按键上。

致谢

最后,浮动窗口的设计主要参考了韦大vim-quickui,感谢韦大提供的优秀范例。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值