【问题标题】:notebook-like Vim and IPython shell类似笔记本的 Vim 和 IPython shell
【发布时间】:2020-01-26 10:42:56
【问题描述】:

用例

我想将 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 的行为和使用。

【问题讨论】:

    标签: vim jupyter-notebook


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢!此外,是否可以粘贴到通过 vim 的 :term 命令运行的 IPython shell 作为 .py 文件下方的窗口,然后运行它并返回到编辑器?这可能吗?
    • 不知道,从未使用过 IPython 或 vim 的 :term。当我需要终端时,我会运行终端模拟器(我使用rxvt-unicode)。当我需要 Python 命令行时,我会使用大量配置的 PYTHONSTARTUP 运行纯 Python。 vim 对我来说只是一个文本编辑器,我不把它用作 IDE。
    • 知道了。另外,我注意到这不适用于最后一个块,因为文件末尾没有 In[...] 。有没有办法解决这个问题?如果不是,只需在文件末尾添加该行就很简单了。
    • 谢谢。我将您的宏修改为此,现在可以使用::nnoremap &lt;C-y&gt; /\(# In\[.*\]:\)\\|\(\%$\)&lt;CR&gt;NjVnk"+ynj:noh&lt;CR&gt;。请修改您的原始答案,以便我将其标记为已回答。
    • 我不知道为什么在 vim 编辑器中正常搜索时使用“/”我只需要一个“\”在管道“|”之前字符,但在 .vimrc 中我必须使用两个宏才能工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多