【问题标题】:Why does Neovim not allow me to run an IPython embed when I run it in a shell?为什么当我在 shell 中运行时,Neovim 不允许我运行 IPython 嵌入?
【发布时间】:2020-04-26 16:09:54
【问题描述】:

在 Neovim 的 init.vim 中,我在 Vim 中的 .vimrc 中有相同的行,当按下 F12 时,它会使用 python3 解释器运行当前位于缓冲区中的文件:

autocmd FileType python nnoremap <silent> <F12> :!clear;python3 %<CR>

现在我正在尝试通过在正常模式下按 F12 来运行这个小小的“test.py”脚本:

import IPython
IPython.embed()

在 Vim 中运行良好:

尽管在我的 ~/config/nvim/init.vim 中有完全相同的行,但在 neovim 中不起作用:

所以它确实运行 IPython,但随后立即(红色箭头)莫名其妙地询问我是否要退出。它还插入了一堆奇怪的转义序列(黄色箭头),我怀疑这是它想要退出的原因,并且在普通 vim 中不会出现。

我不太喜欢内部的 neovim 终端,那么在这种情况下如何让 neovim 的行为与 vim 完全一样?

【问题讨论】:

    标签: vim neovim


    【解决方案1】:

    这是 NeoVim 的一个已知限制,:! 是非交互式的,它不会分配一个伪终端,而这通常是 IPython 等全屏应用程序正常运行所必需的。

    详情请见issue #1496

    另一种方法是使用 NeoVim(或 Vim 8)对终端的支持,使用 :terminal 命令,或使用诸如 termopen()(在 NeoVim 中)或 term_start()(在 Vim 8 中)之类的函数来运行完整- 屏幕应用程序,例如 IPython。

    在你的情况下,像:term python3 % 这样简单的东西,在一个终端中运行命令,可能是一个足够的替代品。

    您可能还会发现vim-bang-terminal 插件很有趣。它将:! 命令替换为在 Vim/NeoVim 终端内运行的类似命令调用。

    【讨论】:

    • 实际上,我发现运行:term python3 % 现在可以正常运行,因此并没有我想象的那么糟糕。
    • @ThomasBrowne 感谢您的反馈!我将这个直接建议纳入了答案。事实上,虽然与 :! 命令不完全相同,但它是一个很好的直接替代品。
    猜你喜欢
    • 2015-07-26
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2016-10-09
    • 2018-04-20
    相关资源
    最近更新 更多