Fab*_*ini 13
你想要的是什么:close.它的行为似乎:q但不会让你关闭最后一个窗口:
http://vimdoc.sourceforge.net/htmldoc/windows.html#:close
您可以为q要映射到的命令设置别名close:
cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'close' : 'q')<CR>
Run Code Online (Sandbox Code Playgroud)
感谢@Paradoxial:cabbrev trick.
小智 10
我知道,我知道,这是一个非常古老的问题,但我今天也有同样的问题,我先发现这个帖子.我开发了一个简短的脚本来放入.vimrc
function! ConfirmQuit(writeFile)
if (a:writeFile)
if (expand('%:t')=="")
echo "Can't save a file with no name."
return
endif
:write
endif
if (winnr('$')==1 && tabpagenr('$')==1)
if (confirm("Do you really want to quit?", "&Yes\n&No", 2)==1)
:quit
endif
else
:quit
endif
endfu
cnoremap <silent> q<CR> :call ConfirmQuit(0)<CR>
cnoremap <silent> x<CR> :call ConfirmQuit(1)<CR>
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助别人.
你有什么好怕的呢?!当你还有未保存的更改时,Vim不会让你退出(无论如何没有命令修饰符),所以你唯一可能丢失的是GVIM的窗口位置,大小和任务栏位置.
无论如何,要覆盖内置命令:q,您可以使用cmdalias插件,如下所示:
:Alias q if\ winnr('$')>1||tabpagenr('$')>1||confirm('Really\ quit?',\ "&OK\\n&Cancel")==1|quit|endif
Run Code Online (Sandbox Code Playgroud)
这将检查最后一个窗口(:q不一定退出Vim),并插入确认.
小智 5
您可以使用类似这样的命令来删除该:q命令:
:cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'echo' : 'q')<CR>
Run Code Online (Sandbox Code Playgroud)
这在命令模式下缩写为q,但如果不在第一列中,则echo不允许触发缩写。q这样,edit q就不会缩写为edit echo.