2012-09-23 13 views
10

¿Hay alguna manera de volver a enlazar: q en vim a un comando más complejo para evitar salir accidentalmente de vim?¿Cómo prevenir el abandono de vim accidentalmente?

+10

: q no es lo suficientemente complejo? Nunca lo golpeé accidentalmente ... –

+0

Estoy de acuerdo con @EricJ. Tienes que escribir ':', luego 'q', luego presionar Enter. ¿Qué comando común que * no * abandona está cerca de eso? –

+0

@KeithThompson - Bueno, 'q:' está cerca de eso, como una manera de hablar. No sé qué tan común es sin embargo. – Rook

Respuesta

5

¿A qué le tienes miedo? Vim no le permitirá salir (sin un modificador de comando !, de todos modos) cuando todavía tiene cambios no guardados, por lo que lo único que perderá potencialmente es la posición de la ventana, el tamaño y tal vez la posición de la barra de tareas de GVIM.

De todos modos, para anular comandos internos como :q, se puede utilizar el cmdalias plugin, así:

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

Esto comprueba la última ventana (:q no necesariamente salir de Vim), e inserta una confirmación .

+0

El problema es que 'q' está muy cerca de'! '. – Qix

+2

@Qix: ¡Pero normalmente necesita Shift para obtener el '!'; ni ': q1' ni': Q! 'a ningún daño. Si estás afectado por el dedo gordo, de todos modos no te divertirás mucho en Vim. –

+0

Estaba siendo parcialmente gracioso. Esta fue la primera vez que he engordado digamos 'q!' En los pocos años que llevo usando Vim, lol. – Qix

2

Usted puede usar algo como esto para eliminar el comando :q:

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

Esto abrevia q a echo en modo comando, pero no permite la abreviatura para desencadenar si el q no está en la primera columna. De esta forma, edit q no abreviará a edit echo.

11

Lo que quiere es :close. Actúa como :q pero no le permitirá cerrar la última ventana:

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

Puede configurar un alias para el comando q para asignar a close:

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

Gracias @Paradoxial para este : truco de cabbrev

2

ConfirmQuit.vim: Proporciona un diálogo de confirmación cuando se intenta salir de vim

http://www.vim.org/scripts/script.php?script_id=1072

Adapté esto mediante el uso

autocmd bufenter c:/intranet/notes.txt cnoremap <silent> wq<cr> call ConfirmQuit(1)<cr> 

Como sólo quería esto en esto para un archivo en particular

+0

¡Gracias! Sin embargo, cualquier persona que use vim simple que utiliza ConfirmQuit.vim querrá eliminar el "if has (" gui_running ")" –

8

Lo sé, lo sé, es una pregunta muy antigua, pero tuve la misma pregunta hoy y encontré esta publicación primero. Desarrollé un guión corto para poner en .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> 

Espero que esto ayude a alguien.

+1

¡Gracias! ¡No quería otro complemento! –

Cuestiones relacionadas