¿Cómo desactivo el mensaje “Presione ENTER o escriba el comando para continuar” en Vim?

102

¿Hay alguna forma de deshabilitar el mensaje "Presione ENTRAR o escriba el comando para continuar" que aparece después de ejecutar un comando externo?

EDITAR: Encontré una solución: agregue un extra <CR>al acceso directo en mi .lvimrc.

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>

¿Alguna idea mejor?

Johan Kotlinski
fuente
9
En Windows 7, recibirá este mensaje con frecuencia debido a errores de "no se puede abrir el archivo de intercambio" que se han impreso pero no los ve, lo que provoca el mensaje. La solución es poner set dir=$TEMPvimrc. Esto le dice a vim que use la carpeta temporal correcta para sus archivos temporales. Esto, a su vez, corrige los errores y elimina las indicaciones de "presionar enter".
Lucas

Respuestas:

76

Sin embargo, no estoy seguro de cómo hacerlo globalmente para un comando:

:silent !<command>

Asegúrese de incluir un espacio después silent

Tabitha
fuente
3
Desafortunadamente no es muy útil para mí, estropea la pantalla y tengo que presionar Ctrl-L ... lo cual es aún más molesto que presionar espacio.
Johan Kotlinski
1
¡Sin embargo, funcionó para mi script grep!
Mikko Rantanen
5
De acuerdo con el comentarista a continuación (quien sugirió agregar <CR> adicional al final del comando), cuando use silencio, puede agregar <Cl> adicional, para que no tenga que presionarlo manualmente. Funciona bien con la pantalla, entonces.
Victor Farazdagi
4
simplemente use el comando: ¡silencioso! y luego: ¡redibujar! después, creo que no hace esto automáticamente debido a scripts que pueden hacer cosas en la pantalla que usted desea que permanezca, por ejemplo, un reloj o alguna otra cosa de monitoreo de estado ... solo una conjetura
osirisgothra
2
Sí ... también me estropea la pantalla. la :redraw!opción lo resuelve. <cr>Probablemente el doble sea ​​similar. y menos complicado
alpha_989
57

Descubrí una solución alternativa: agrega un extra <CR> al comando de mapa.

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
Johan Kotlinski
fuente
2
Nunca hubiera pensado en esto. ¡Absolutamente brillante!
Kohányi Róbert
1
Sí, agregar el <CR> adicional a mi comando también funcionó.
Daniel Miessler
2
Increíblemente simple. ¡Es súper efectivo!
Wayne Werner
28
:help hit-enter
Antonio
fuente
1
Tengo curiosidad por saber por qué alguien rechazó esta respuesta, ya que :help hit-enterproporciona información de fondo bastante útil en el mensaje "Presione ENTER ...". ¿Le importaria explicar?
cjs
38
¿Qué información de ': help hit-enter' responde a la pregunta? No lo encuentro.
Johan Kotlinski
1
Es posible que pueda obtener un mensaje de "Presione ENTRAR" desde el comando escribir todo antes de pagar. La información bajo <code> shortmess </code> a la que se enlaza <code> presionar-ingresar </code> es válida en ese caso. Sin embargo, el aviso que está recibiendo es de desembolsos, por lo que la sugerencia de Wergan es la correcta. Como se indica en <code>: help: silent </code> "Cuando se usa esto para un comando externo, esto puede causar que la pantalla se estropee. Use | CTRL-L | para limpiarla". Puede agregar: redibujar o Ctrl-L a su comando para solucionarlo. O simplemente haga las dos devoluciones que ya está haciendo.
Conspicuous Compiler
Para mí, se trataba de set hl( :highlight) que usé incorrectamente como atajo para saber hlsearchquién es el atajo real hls. Uno simporta :)
1
@JohanKotlinski elset nomore
Tinmarino
19

Establezca el cmdheighten 2, en mi vimrc ( :e $MYVIMRC):

:set cmdheight=2

Más info aquí .

TankorSmash
fuente
1
Esto es perfecto para consultas de búsqueda muy largas
Keith Smiley
18

Así es como manejé el problema de que ejecutar un programa externo a través de silencio estropea la pantalla en vim en modo texto (en mi experiencia, gvim no sufre este problema):

command! -nargs=1 Silent
\ | execute ':silent !'.<q-args>
\ | execute ':redraw!'

Úselo en lugar del comando silencioso normal:

:Silent top
emil.p.stanchev
fuente
13

Posiblemente sea un error de sintaxis en el archivo vimrc

8.8.8.8
fuente
5
Esta. Lo había usado set numbery luego set syntaxjusto debajo en mi archivo .vimrc. Una vez que eliminé set syntaxVim, ya no me lo pidió.
piperchester
1
@piperchester ¡ esto funcionó! Intenté toneladas de sugerencias y solo esto funcionó. Gracias :)
Paul Evans
Actualizo vim, problema resuelto. Pero creo que la gente podría escribir :messagepara averiguar qué está mal.
NanoNova
Sí. Tenía la línea set syntax. Lo reemplazó con set syntax=ony soluciona el problema.
McSuperbX1
7

La respuesta de Anthony me llevó al lugar correcto y pude configurar gvim para que no se detuviera en muchos mensajes. Agregué un
conjunto shortmess=aoOtIa mi archivo gvimrc.
Se explica en la página de ayuda que le ofrece :help shortmess.
Las letras significan clases de mensajes que no desea ver, o que le gustaría que vim truncara para evitar presionar enter detener.
Lo logré antes estableciendo una ventana inicial amplia con columns=130en gvimrc para que pocos mensajes la desborden y requieran la molesta y agotadora necesidad de presionar enter.

Juan Lanús
fuente
6

Así es como ejecuto comandos externos en escenarios complicados sin tener que "Presionar ENTRAR". diferente a:silent , todavía puedo ver la salida del comando.

Línea de comando

:exe ":!<command>" | redraw

Script / función

exe ':!<command>' 
redraw

Mapeo con <expr>

map <expr> <F5> ":exe ':!<command>'\n:redraw\<CR>"

Mapeo con <expr>eso llama a una función

map <expr> <F5> MyFoo()
fu! MyFoo()
    return ":exe ':!<command>' | redraw\<CR>"
endf
svlasov
fuente
¿Es esto reutilizable de alguna manera? Cuando <command>
presiono
1
<command>está destinado a ser reemplazado con un comando externo real, por ejemplomap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov
4

Puedes usar:

call feedkeys(" ")

Por ejemplo:

function! Interactive_Questions()
    echo "Question 1:"
    let response1 = getchar()
    echo "Question 2:"
    let response2 = getchar()

    " Do something

    " Without the next line, you would have to hit ENTER,
    " even if what is written (the questions) has no interest:
    call feedkeys(" ")
endf
yolenoyer
fuente
¡Gracias por esta respuesta! Rápido, fácil y realmente efectivo para mi caso personal, a diferencia de muchas de las otras respuestas enumeradas.
resumen
3

Poner un nuevo dibujo antes de borrar la pantalla también funciona. Esto es lo que tuve:

exe 'ls'  
exe 'b4'  "This redraws, so the Prompt is triggered

Pero esto no activará el mensaje:

exe 'ls'  
redraw  
exe 'b4'
Liang Li
fuente
Esto me ayudó, ya que solo me deshacía programáticamente del indicador en un lugar determinado dentro de una función. Simplemente emitiendo un redrawresuelto. La otra solución no encajaba, ya que quería aceptar la entrada del usuario entre el mensaje original y la desaparición del mensaje.
Daniel Andersson
1

Tengo un problema similar, pero cuando ejecuto un argdo para reemplazar la misma cadena en varios archivos, por ejemplo,

 argdo %s/something/Something/eg|update

Constantemente tenía que presionar la página hacia abajo.

Puede configurar la siguiente opción antes de ejecutar el script para que solo haya el mensaje final en lugar de muchos mensajes

:set nomore
Matt Vukomanovic
fuente
Esa fue la respuesta:, :set nomoremala lamida todavía está al final. También está en :h help hit-enter@anthony
Tinmarino
1

Mi caso (un autocomando) set shortmess+=Fhizo el truco.

: h shortmess
F no da la información del archivo al editar un archivo, como:silent

Biggybi
fuente
0

Esto me sucede si estoy guardando un archivo que está en un directorio donde no tengo permisos de escritura en el directorio. Hice un chmod 777 en el directorio (ya tenía permisos de escritura en el archivo) y el mensaje "Presione ENTER" ya no aparece.

Jayemar
fuente
0
  • Si está utilizando un mapa de teclas, su vida puede ser mucho más fácil si agrega varios más al final de su comando, pero generalmente 2 veces es suficiente.
  • Pero si está ejecutando un comando desde la línea de comandos de vim. Entonces es un poco complicado. Puede agregar una palabra clave silentantes de su comando real. Lo llevará de regreso a la ventana de vim automáticamente después de que se haya ejecutado el comando. Pero aún necesita ejecutar manualmente redrawya que algunas de las ventanas como NERD_Tree deben volver a dibujarse.

    • Para este caso, intente seguir las instrucciones del documento de ayuda de vim:

      Para reducir el número de mensajes de pulsación e introducción:

      • Establezca 'cmdheight' en 2 o más.
      • Agregue banderas a 'shortmess'.
      • Restablece 'showcmd' y / o 'regla'.
    • Este enlace proporciona otra salida. Pon esto en tu archivo vimrc

      ¡mando! -nargs = 1 Silencioso
      \ ejecutar '¡silencioso!' .
      \ | ejecutar 'redraw!'
      

Y luego puede usarlo :Silent commandcomo un comando regular.

huangzonghao
fuente
0

A mi lado la solución fue usar con silentmás frecuencia en una cadena de comando .

Específicamente antes, .vimrchabía:

nnoremap M :silent make\|redraw!\|cc<CR>

Esto se cambió a:

nnoremap M :silent make\|silent redraw!\|silent cc<CR>

Antes, el "Presione ENTER" no siempre aparecía, pero era molesto a menudo. Los adicionales silentsolucionaron esto. (Parece que silentno es necesario redraw!porque aparece el :ccmensaje "Presione ENTER").

Este cambio tiene el inconveniente de que ya no se muestra la salida de :cc, por lo que debe adivinar cuál es el error. Un pequeño ajuste soluciona esto:

nnoremap M :silent make\|redraw!\|cw\|silent cc<CR>

Esto hace que la lista QuickFix de error (Salida de make) aparezca automáticamente (y, por vim-magic, desaparezca si no hay ningún error).

FYI:

El motivo de este Mmapeo es simplemente presionar Men modo normal para:

  • guardar la edición (cuando el uso de maketodo está bajo gitcontrol de todos modos)
  • invocar make
  • y saltar directamente al primer error o advertencia

Por lo general, mis Makefiles se construyen de tal manera que esto solo toma una fracción de segundo.

Con algunos ajustes, esto también se puede aplicar a Ccargas de trabajo que no sean de tipo:

En .vimrcañadir

set efm+=#%t#%f#%l#%c#%m#

Esto permite viminterpretar mensajes como los siguientes para :cc(error de visualización):

#E#file#line#column#message#
#W#file#line#column#message#
#I#file#line#column#message#

( Eerrores, Warnings, Info, basados ​​en vimmagia)

Ejemplo de cómo usar esto para scripts de Python . (Lo siento, no hay copia aquí, es una historia diferente).

Tino
fuente
0

Si su error es causado por E303, entonces la creación de un directorio temporal en el .vimrcarchivo puede solucionarlo.

Después de abrir cualquier archivo, escriba e ingrese:

:messages

Si hay errores, se le preguntará.

Si ve E303 (Error303) "No se puede abrir el archivo de intercambio para" {nombre de archivo} ", la recuperación es imposible", puede indicar que hay un intento anterior de recuperar un archivo de intercambio (probablemente perdido o inexistente) en el sistema. .

Para solucionar este problema, asigne un directorio temporal en el .vimrcarchivo.

Para encontrar la ubicación del .vimrcarchivo, escriba e ingrese esto:

$ locate .vimrc
/root/.vimrc

Abre el archivo $ vi .vimrc

Agregue esto al final del archivo:

set directory=.,$TEMP

Guardar y cerrar con :wq

Finalmente, recargue el perfil con:

$ . /etc/profile

Intente abrir cualquier archivo con VI. El problema se solucionará.

Rafael Vidal
fuente
0

En gvim, si ha configurado guioptions+=!(Añadido !en guioptions), esto es debido a eso. Esta opción ( !) hace que se gvimejecuten algunos comandos en un terminal externo (que admiten más funciones, como el color y tantas otras).

Puede probarlo usando :set guioptions-=iy ver si esto funciona para usted.

Nilesh Kevlani
fuente