vim - 类似笔记本的 Vim 和 IPython shell
问题描述
用例
我想将 ipython notebook 下载为 .py 文件,因为我不喜欢在 jupyter notebook 环境中工作。但我想使用 Vim 和 ipython shell 从 vim 中模拟 jupyter notebook 的使用/功能,特别是关于单个单元/块的执行。
详细地说,这就是我想要做的:
- 将 jupyter notebook 转换为 .py 文件
- 在 vim 中编辑 .py 文件
- 在 IPython shell 中执行我在 Vim 中编辑的当前单元格/块,以查看结果。
返回编辑 .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 的行为和使用。
解决方案
映射中的空格太多。请记住:vim
从字面上运行映射,空格表示空格,而不是命令之间的分隔符。这对我有用:
:nnoremap <C-y> /# In\[.*\]:<CR>jVnk"+y
更新。要搜索到文件末尾,请使用 pattern \%$
。所以你可以搜索“either # In\[.*\]:
or eof”:
\(# In\[.*\]:\|\%$\)
括号用于对表达式进行分组;\|
分离或分支。
推荐阅读
- javascript - 不允许 2 个视频同时播放
- python-2.7 - Soup.find 和 findAll 无法在 hockey-reference.com 上找到表格元素
- android - 每个 Android Studio 组件的目录是什么?
- python-2.7 - 如何检查一个具有相同名称和扩展名的文本文件是否存在于python的两个不同文件夹中?
- python - 多进程运行比单个进程慢
- android - 如何隐藏根视图,直到它准备好输入?
- imagemagick - 如何使用 ImageMagick 的识别实用程序格式化日期和时间?
- cryptography - 使用 ECC 生成私钥/公钥对:椭圆曲线
- java - 吸气剂工作不正常
- node.js - Sequelize.js 设置器方法不起作用