首页 > 解决方案 > 类似笔记本的 Vim 和 IPython shell

问题描述

用例

我想将 ipython notebook 下载为 .py 文件,因为我不喜欢在 jupyter notebook 环境中工作。但我想使用 Vim 和 ipython shell 从 vim 中模拟 jupyter notebook 的使用/功能,特别是关于单个单元/块的执行。

详细地说,这就是我想要做的:

  1. 将 jupyter notebook 转换为 .py 文件
  2. 在 vim 中编辑 .py 文件
  3. 在 IPython shell 中执行我在 Vim 中编辑的当前单元格/块,以查看结果。
  4. 返回编辑 .py 文件

    • 循环 2-4 直到完成,可能转换回 ipynb。

我当前的设置让 Vim 使用拆分窗口运行。第一个窗口显示 .py 文件进行编辑,第二个窗口运行 vim 终端窗口:term并在第一个窗口下方运行 IPython shell。

这是从 ipython 笔记本转换的 .py 文件的样子:

#!/usr/bin/env python
# coding: utf-8

# In[1]:
import numpy as np
# In[2]:
x = 3
# In[3]:
y = 4
z = 5

我想创建一个 vim 键绑定,它检测我当前在 vim 中编辑的 .py 文件中的哪个单元格块,突出显示它,将其复制到剪贴板,然后将窗口切换到 IPython shell,如果可能,粘贴它,执行它,然后返回 vim .py 文件编辑器窗口。

我试过这个,但没有奏效:

nnoremap <C-y> /# In\[.*\]: <CR> j <C-v> n k "+y

注意:我不想在 jupyter notebook 中使用 vim 键绑定。我想从 vim 本身启用类似 jupyter 的行为和使用。

标签: vimjupyter-notebook

解决方案


映射中的空格太多。请记住:vim从字面上运行映射,空格表示空格,而不是命令之间的分隔符。这对我有用:

:nnoremap <C-y> /# In\[.*\]:<CR>jVnk"+y

更新。要搜索到文件末尾,请使用 pattern \%$。所以你可以搜索“either # In\[.*\]:or eof”:

\(# In\[.*\]:\|\%$\)

括号用于对表达式进行分组;\|分离或分支。


推荐阅读