什么是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
函数即可预览当前代码块的结果。
如果你的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>
-
你需要将
g:default_quick_keys
置为0,以表示禁用默认设置。 -
g:org#style#border
可以设置为0-5中的数值。 -
g:org#style#bordercolor
和g:org#style#color
设置为不同的高亮色。你可以设置为keyword
、Identifier
、Statement
、Comment
、PreProc
、Ignore
、Label
、Conditional
、Exception
等不同的值,具体效果会根据你的主题而定。 -
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",
\ }
org#main#runCodeBlock
为运行代码块的函数,org#main#runLanguage
为运行某种语言的函数,你可以按照上面例子绑定到你所喜欢的按键上。
致谢
最后,浮动窗口的设计主要参考了韦大的vim-quickui,感谢韦大提供的优秀范例。