【问题标题】:Neovim throws an error running input(), runs ok in VimNeovim 在运行 input() 时抛出错误,在 Vim 中运行正常
【发布时间】:2019-05-21 14:33:41
【问题描述】:

这里是菜鸟问题,Neovim 在命令行窗口中使用 input() 运行脚本时会抛出错误,而在 vim 8.0 中运行相同的脚本。例如

print('Enter your name:')
myName = input()

:! python %

Nvim 输出:

myName: Traceback (most recent call last):
  File "x.py", line 2, in <module>
    myName = input()
EOFError: EOF when reading a line

shell returned 1

我更喜欢 neovim 在它自己的底部窗口中运行脚本的方式,而不是 vim 输出到命令行的方式,但是对于使用 input() 的任何脚本,我必须切换到 vim。

是否有一个 nvim.init 设置或不同的命令我可以在这里成功,或者这是 neovim 中的一个已知缺陷?我正在使用最新的 vim 和 nvim 在 wsl 上。

【问题讨论】:

    标签: python vim neovim


    【解决方案1】:

    我不确定您为什么会收到此错误。但是,由于您使用的是neovim,您是否尝试过使用内置的terminal 模拟器?以下命令可用于在新的拆分窗口中运行 newovim 中的程序:

    :vsplit term://python3 %
    

    python3 是程序的名称,可以替换为任何其他程序。其中% 是当前文件的路径。请参阅:h terminal-start 了解更多信息。

    使用 Vim(8.0 或更高版本)也可以使用以下命令:

    :term python3 %
    

    这将再次为正在运行的程序打开一个新的拆分。请参阅:h terminal 了解更多信息。

    对工作流程的进一步优化是添加特定于文件类型的映射。在我们的例子中,这将是~/.vim/after/ftplugin/python.vim中的(类unix系统)

    nnoremap <leader>r :vsplit term://python3 %<cr>
    

    【讨论】:

    • 感谢 Harish 的有用提示。这两个都很好,术语版本非常适合我快速运行(也适用于 nvim)。我注意到 nvim 版本我必须在 term 或 vsplit term 中点击“i”才能进入终端模式,而在 vim 中它会自动进入终端模式(更好)。有没有我可以调整的设置,或者通过一个选项? nvim 也可以通过 enter 方便地退出到主窗口,而在 vim 中我必须 :q 返回。 (小问题......有趣的是他们的工作方式略有不同)现在两者都工作得更好,干杯伙伴。 :)
    • 在 vim 中,有一个选项可以在工作完成后立即退出。 :term ++close python3 %。有关更多信息,请参阅:help term++close。对于neovim,您可以使用自动命令进入插入模式,但必须弄清楚我们可以使用什么自动命令事件。
    • 谢谢,但我不能使用 ++close,它会在我读取最终结果之前退出 :) 我会考虑设置一个自动命令,干杯。
    • 得到终端插入工作:D ...从这里:github.com/neovim/neovim/issues/8816#issuecomment-410512452 if has('nvim') autocmd TermOpen term://* startinsert endif
    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2012-05-03
    • 2013-06-04
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多