Neovim编译运行C++文件时无法输入内容的问题求解
Neovim运行C++程序无法接受用户输入的解决方案
你当前使用的:!前缀运行外部命令的模式,是Neovim的非交互式子进程调用模式,默认不会将终端的标准输入流绑定到运行的程序上,因此需要用户输入的程序会直接卡住无法响应输入。
方案1:使用Neovim内置终端(最推荐,跨平台)
Neovim自带的:terminal命令会创建一个完整支持交互的终端缓冲区,完美支持用户输入、输出滚动等操作,只需要修改你的运行快捷键配置即可:
autocmd filetype cpp nnoremap <F9> :w <bar> !build.sh %:r <CR> autocmd filetype cpp nnoremap <F10> :terminal ./%:r<CR>
使用说明:
- 按下F10后会自动新建终端缓冲区运行程序,按
i进入终端输入模式即可正常输入内容 - 程序运行结束后,按
Ctrl+\+Ctrl+N可以退出终端输入模式,回到Neovim普通模式操作缓冲区 - 不需要终端缓冲区时执行
:bd即可关闭
方案2:调用外部系统终端运行
如果你希望程序在独立的系统终端窗口中运行,可以根据你使用的系统和终端修改快捷键配置,以下是GNOME桌面Linux环境的示例:
autocmd filetype cpp nnoremap <F10> :!gnome-terminal -- bash -c "./%:r; read -p '按任意键退出'" <CR><CR>
这个配置会弹出独立的终端窗口运行程序,完全和系统终端使用逻辑一致,不需要适配Neovim的操作。
可选优化:编译运行一键完成
如果需要按下单次快捷键同时完成保存、编译、运行三步,可以修改F9的配置如下:
autocmd filetype cpp nnoremap <F9> :w <bar> exec '!build.sh '.expand('%:r') <CR><CR> :terminal ./%:r<CR>
内容的提问来源于stack exchange,提问作者Alexandru Vasile
相关产品推荐
相关产品推荐

