VIM终端插入模式组合键映射问题:配置F10退出QEMU及终端窗口
解决Vim终端中映射F10关闭QEMU并退出窗口的问题
你的tnoremap <F10> <C-a>x无效的原因是:Vim内置终端默认把<C-a>作为终端前缀键——按下<C-a>后Vim会进入终端的前缀模式,而不是把这个按键传递给QEMU。所以直接写<C-a>x时,Vim会把<C-a>当成前缀触发自身命令,而非发送给QEMU。
下面给两种可行的解决方法:
方法一:修改终端前缀键(推荐)
把Vim终端的前缀键改成不与QEMU冲突的按键,比如<C-s>,这样<C-a>就能直接传递给QEMU:
在你的vimrc中添加:
let g:terminal_press_prefix = '<C-s>' " 替换终端前缀键为<C-s> tnoremap <silent> <F10> <C-a>x " 终端模式下F10发送QEMU退出组合键 autocmd TermClose * quit " QEMU退出后自动关闭终端窗口
这样设置后,按F10会直接发送<C-a>x给QEMU,QEMU退出后终端进程结束,Vim会自动关闭这个窗口。
方法二:不修改前缀键,正确发送<C-a>
如果不想改前缀键,Vim终端中要发送一个<C-a>给程序,需要连续按两次<C-a>(第一次触发前缀模式,第二次才是传递给程序的<C-a>)。所以映射要写成:
tnoremap <silent> <F10> <C-a><C-a>x " 先发送<C-a>,再发送x autocmd TermClose * quit " 自动关闭退出后的终端窗口
额外说明
如果你的run-qemu.sh是用shell包裹QEMU的(比如脚本最后有exec bash之类的),QEMU退出后shell还会留在终端,这时候autocmd TermClose不会触发。这种情况下可以修改脚本,让QEMU退出后直接结束脚本:
把run-qemu.sh改成:
#!/bin/bash # 执行你的QEMU命令 /path/to/your/qemu-command # QEMU退出后直接结束脚本,让终端进程终止 exit $?
内容的提问来源于stack exchange,提问作者wangloo
相关产品推荐
相关产品推荐

