Есть ли способ перепроверить: q в vim для более сложной команды, чтобы предотвратить случайное выключение 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>
Так как я хотел только этого для этого для определенного файла