Как предотвратить случайное выключение vim?

Есть ли способ перепроверить: q в vim для более сложной команды, чтобы предотвратить случайное выключение vim?

Ответ 1

Вы хотите :close. Он действует как :q, но не позволит закрыть последнее окно:

http://vimdoc.sourceforge.net/htmldoc/windows.html#:close

Вы можете установить псевдоним для команды q для сопоставления с close:

cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'close' : 'q')<CR>

Спасибо @Paradoxial для этого: трюк cabbrev.

Ответ 2

Я знаю, я знаю, это очень старый вопрос, но сегодня у меня был такой же вопрос, и я сначала нашел этот пост. Я разработал короткий script для ввода .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>

Надеюсь, это поможет кому-то.

Ответ 3

Чего вы боитесь? В любом случае, Vim не позволит вам выйти (без модификатора команды !), если у вас все еще есть несохраненные изменения, поэтому единственное, что вы потенциально проиграете, - это положение окна, размер и, возможно, позиция панели задач GVIM.

В любом случае, чтобы переопределить встроенные команды типа :q, вы можете использовать плагин cmdalias, например:

:Alias q if\ winnr('$')>1||tabpagenr('$')>1||confirm('Really\ quit?',\ "&OK\\n&Cancel")==1|quit|endif

Это проверяет последнее окно (:q не обязательно выходит из Vim) и вставляет подтверждение.

Ответ 4

Вы можете использовать что-то вроде этого, чтобы удалить команду :q:

:cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'echo' : 'q')<CR>

Это сокращает q до echo в командном режиме, но не разрешает аббревиатуру, если q не находится в первом столбце. Таким образом, edit q не будет сокращаться до edit echo.

Ответ 5

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>

Так как я хотел только этого для этого для определенного файла