Neovim выдает ошибку при запуске input(), работает нормально в Vim

Нубский вопрос, Neovim выдает ошибку при запуске скрипта с использованием input() в окне командной строки, в то время как тот же скрипт работает в vim 8.0. например

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

:! python % ‹- используемая команда ex

Выход 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 в командную строку, но мне приходится переключаться на vim для любых скриптов, использующих input().

Есть ли настройка nvim.init или другая команда, которую я могу использовать для достижения успеха, или это известный недостаток neovim? Я использую wsl с последними версиями vim и nvim.


person bevo009    schedule 20.05.2019    source источник


Ответы (1)


Я не уверен, почему вы получаете эту ошибку. Но, поскольку вы используете neovim, пробовали ли вы использовать встроенный эмулятор terminal? Приведенную ниже команду можно использовать для запуска программы в newovim в новом разделенном окне:

:vsplit term://python3 %

python3 — это имя программы, которое можно заменить любой другой программой. Где % — путь к текущему файлу. См. :h terminal-start для получения дополнительной информации.

То же самое можно сделать с помощью Vim (8.0 или выше) с помощью команды:

:term python3 %

это снова откроет новый сплит для работающей программы. См. :h terminal для получения дополнительной информации.

Дальнейшей оптимизацией рабочего процесса будет добавление сопоставления для конкретного типа файла. В нашем случае это будет (unix-подобные системы) в ~/.vim/after/ftplugin/python.vim

nnoremap <leader>r :vsplit term://python3 %<cr>
person Harish    schedule 21.05.2019
comment
Спасибо за полезные советы, Хариш. Оба они отлично работали, термин версия идеально подходит для меня для быстрого запуска (работает и в nvim). Я заметил, что в версии nvim мне нужно нажать «i», чтобы войти в режим терминала как в термине, так и в термине vsplit, в то время как в vim он автоматически входит в режим терминала (лучше). Есть ли настройка, которую я могу настроить для этого, или передать параметр? Также nvim удобно выходит обратно в главное окно через ввод, а в vim мне приходится возвращаться назад :q. (небольшие придирки... забавно, что они работают немного по-разному) Теперь оба работают намного лучше, ура, приятель. :) - person bevo009; 21.05.2019
comment
В vim есть возможность выйти, как только работа будет выполнена. :term ++close python3 %. См. :help term++close для получения дополнительной информации. А для neovim вы можете использовать автокоманду для перехода в режим вставки, но нужно выяснить, какое событие автокоманды мы можем использовать. - person Harish; 21.05.2019
comment
Спасибо, но я не могу использовать ++close, он закрывается до того, как я могу прочитать окончательный результат :) Я посмотрю на настройку автокоманды, ура. - person bevo009; 21.05.2019
comment
проверьте это: github.com/neovim/neovim/issues/8816#issuecomment- 410512452 - person Harish; 21.05.2019
comment
Вставка терминала работает: D ... отсюда: github.com/neovim /neovim/issues/8816#issuecomment-410512452 if has('nvim') autocmd TermOpen term://* startinsert endif - person bevo009; 21.05.2019
comment
Прохладный! Если это решило вашу проблему, отметьте ответ как ответ. Я считаю, что так работает ТАК! :) - person Harish; 22.05.2019