如何防止意外戒掉病毒?

时间:2012-09-23 21:10:05

标签: vim

有没有办法重新绑定:q在vim中使用更复杂的命令来防止意外退出vim?

6 个答案:

答案 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)

你害怕什么?当你还有未保存的更改时,Vim不会让你退出(无论如何没有!命令修饰符),所以你唯一可能丢失的是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