有没有办法重新绑定:q在vim中使用更复杂的命令来防止意外退出vim?
答案 0 :(得分:11)
你想要的是:close
。它的作用类似:q
,但不会让你关闭最后一个窗口:
http://vimdoc.sourceforge.net/htmldoc/windows.html#:close
您可以为q
命令设置别名以映射到close
:
cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'close' : 'q')<CR>
感谢@Paradoxial:cabbrev trick。
答案 1 :(得分:8)
我知道,我知道,这是一个非常古老的问题,但我今天也有同样的问题,我先找到了这个帖子。我开发了一个简短的脚本来放入.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>
我希望这有助于某人。
答案 2 :(得分:6)
!
命令修饰符),所以你唯一可能丢失的是GVIM的窗口位置,大小和任务栏位置。
无论如何,要覆盖:q
等内置命令,您可以使用cmdalias plugin,如下所示:
:Alias q if\ winnr('$')>1||tabpagenr('$')>1||confirm('Really\ quit?',\ "&OK\\n&Cancel")==1|quit|endif
这将检查最后一个窗口(:q
不一定退出Vim),并插入确认。
答案 3 :(得分:2)
您可以使用类似的内容删除:q
命令:
:cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'echo' : 'q')<CR>
在命令模式下,这会将q
缩写为echo
,但如果q
不在第一列中,则不允许缩写。这样,edit q
不会缩写为edit echo
。
答案 4 :(得分:2)
ConfirmQuit.vim:当您尝试退出vim时提供确认对话框
http://www.vim.org/scripts/script.php?script_id=1072
我使用
改编了这个autocmd bufenter c:/intranet/notes.txt cnoremap <silent> wq<cr> call ConfirmQuit(1)<cr>
因为我只想在特定文件中使用
答案 5 :(得分:0)
使用coot/cmdalias_vim插件,我有效地禁用了短暂的脉冲退出命令:q
,:q!
和:wq
。希望这会减慢我的速度,让我考虑是要使用:quit
还是说:bdelete
。这是我的.vimrc
文件的“ autocmd部分”的精简版本:
if has("autocmd")
augroup VIMRC_aliases
au!
au VimEnter * CmdAlias wqu\%[it] write|quit
au VimEnter * CmdAlias q echo\ "Use\ :qu[it]\ instead\ of\ :q"
au VimEnter * CmdAlias q! echo\ "Use\ :qu[it]!\ instead\ of\ :q!"
au VimEnter * CmdAlias wq echo\ "Use\ :wqu[it]\ instead\ of\ :wq"
augroup END
endif