使用Neovim运行C++程序时无法获取输入的问题求助
解决Neovim运行C++程序无法获取输入的问题
你的问题出在当前运行程序的方式上::!%<.exe是在Neovim的非交互式外部命令环境中执行程序,程序无法接收你的输入,导致scanf读取失败,变量N是未初始化的垃圾值(这次刚好为0),所以直接输出0+250=250。
下面是几种可行的解决方法:
方法1:用内置终端缓冲区运行程序
修改你的<C-r>映射,让程序在Neovim内置终端里运行,这样就能直接在终端窗口输入内容:
nnoremap <C-r> :w <CR> :split | terminal %<.exe <CR>
- 按下
<C-r>后,会先保存文件,然后在下方拆分出一个终端窗口,程序会在里面运行,你可以直接在这个窗口输入数字,回车后就能得到正确输出。
方法2:在独立终端窗口运行程序
根据你的操作系统调整映射:
- Windows系统(cmd):
按下nnoremap <C-r> :w <CR> :!start cmd /k %<.exe <CR><C-r>会弹出一个新的cmd窗口,程序在里面运行,你可以在窗口中输入内容。 - Linux/macOS(以xterm为例,需先安装xterm):
会弹出xterm窗口运行程序,支持输入交互。nnoremap <C-r> :w <CR> :!xterm -e %<.exe <CR>
方法3:调整外部命令的交互模式(兼容性较差)
Linux/macOS下可以尝试用stty恢复终端交互性,但这种方式可能在某些环境下失效:
nnoremap <C-r> :w <CR> :silent !stty sane; %<.exe <CR>
修改后的完整init.vim示例(以内置终端方法为例)
set nu set tabstop=4 set autoindent set cindent syntax on nnoremap <C-b> :w <CR> :!g++ % -o %< -std=c++20 <CR> nnoremap <C-r> :w <CR> :split | terminal %<.exe <CR> call plug#begin() Plug 'joshdick/onedark.vim' Plug 'preservim/nerdtree' call plug#end() colorscheme onedark nnoremap <C-n> :NERDTree <CR> nnoremap <C-m> :NERDTreeClose <CR>
内容的提问来源于stack exchange,提问作者17 Yejun
相关产品推荐
相关产品推荐

