Comment désactiver l'invite «Appuyez sur ENTRÉE ou tapez la commande pour continuer» dans Vim?

102

Existe-t-il un moyen de désactiver l'invite «Appuyez sur ENTRÉE ou tapez la commande pour continuer» qui apparaît après l'exécution d'une commande externe?

EDIT: trouvé une solution de contournement: ajoutez un supplément <CR>au raccourci dans mon .lvimrc.

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

Des meilleures idées?

Johan Kotlinski
la source
9
Sous Windows 7, vous obtiendrez souvent cette invite en raison d'erreurs «Impossible d'ouvrir le fichier d'échange» qui ont été imprimées mais que vous ne voyez pas, ce qui provoque l'invite. La solution est de mettre set dir=$TEMPdans votre vimrc. Cela indique à vim d'utiliser le bon dossier temporaire pour ses fichiers temporaires. Cela corrige à son tour les erreurs et supprime les invites «appuyez sur Entrée».
Lucas

Réponses:

76

Je ne sais pas comment le faire globalement pour une seule commande:

:silent !<command>

Assurez-vous d'inclure un espace après silent

Tabitha
la source
3
Malheureusement pas très utile pour moi, cela gâche l'écran et je dois appuyer sur Ctrl-L ... ce qui est encore plus ennuyeux que d'appuyer sur espace.
Johan Kotlinski
1
A travaillé pour mon script grep cependant!
Mikko Rantanen
5
Conformément au commentateur ci-dessous (qui a suggéré d'ajouter un <CR> supplémentaire à la fin de la commande), lorsque vous utilisez silencieux, vous pouvez ajouter un <Cl> supplémentaire, de sorte que vous n'ayez pas à appuyer dessus manuellement. Fonctionne bien avec l'écran, alors.
Victor Farazdagi
4
utilisez simplement la commande: silent!, puis: redraw! après - je pense qu'il ne le fait pas automatiquement à cause de scripts qui peuvent faire des choses à l'écran que vous voulez rester, par exemple, une horloge ou une autre chose de surveillance de l'état ... juste une supposition
osirisgothra
2
Ouais ... ça gâche l'écran pour moi aussi. l' :redraw!option le résout. Le double <cr>est probablement similaire. et moins compliqué
alpha_989
57

Découvrez une solution de contournement: ajoutez un supplément <CR> à la commande map.

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
Johan Kotlinski
la source
2
Je n'aurais jamais pensé à ça. Absolument brillant!
Kohányi Róbert
1
Oui, ajouter le <CR> supplémentaire à ma commande a également fait l'affaire.
Daniel Miessler
2
Incroyablement simple. C'est super efficace!
Wayne Werner le
28
:help hit-enter
Anthony
la source
1
Je suis curieux de savoir pourquoi quelqu'un a voté cette réponse vers le bas, car :help hit-enterfournit des informations de base assez utiles sur l'invite "Appuyez sur ENTRÉE ...". Soin d'expliquer?
cjs
38
Quelles informations de «: help hit-enter» répondent à la question? Je ne peux pas le trouver.
Johan Kotlinski
1
Il est possible que vous obteniez une invite «Appuyez sur ENTRÉE» à partir de la commande write all avant de décompter. Les informations sous <code> shortmess </code> auxquelles <code> hit-enter </code> renvoie sont valides dans ce cas. Cependant, l'invite que vous recevez provient du bombardement, la suggestion de Wergan est donc la bonne. Comme indiqué dans <code>: help: silent </code> "Lorsque vous utilisez ceci pour une commande externe, cela peut provoquer un désordre de l'écran. Utilisez | CTRL-L | pour le nettoyer". Vous pouvez ajouter: redessiner ou Ctrl-L à votre commande pour résoudre ce problème. Ou faites simplement les deux retours que vous faites déjà.
Compilateur remarquable
Pour moi, il s'agissait de set hl( :highlight) J'ai utilisé à tort comme raccourci pour savoir hlsearchqui est le véritable raccourci hls. On scompte :)
1
@JohanKotlinski theset nomore
Tinmarino
19

Définissez le cmdheightsur 2, dans mon vimrc ( :e $MYVIMRC):

:set cmdheight=2

Plus d'infos ici .

TankorSmash
la source
1
C'est parfait pour les requêtes de recherche très longues
Keith Smiley
18

C'est ainsi que j'ai résolu le problème que l'exécution d'un programme externe via le mode silencieux gâche l'écran en mode texte vim (d'après mon expérience, gvim ne souffre pas de ce problème):

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

Utilisez-le à la place de la commande silencieuse habituelle:

:Silent top
emil.p.stanchev
la source
13

Il s'agit probablement d'une erreur de syntaxe dans le fichier vimrc

8.8.8.8
la source
5
Ce. J'avais utilisé set numberet puis set syntaxjuste en dessous dans mon fichier .vimrc. Une fois que je l' ai enlevé set syntaxne plus me Vim poussé.
piperchester
1
@piperchester cela a fonctionné! J'ai essayé des tonnes de suggestions et seulement cela a fonctionné. Merci :)
Paul Evans
Je mets à jour vim, problème résolu. Mais je pense que les gens pourraient taper :messagepour savoir ce qui ne va pas.
NanoNova
Oui. J'avais la ligne set syntax. Remplacé par set syntax=onet il résout le problème.
McSuperbX1
7

La réponse d'Anthony m'a emmené au bon endroit et j'ai pu configurer gvim pour ne pas m'arrêter sur beaucoup de messages.
J'ai ajouté set shortmess=aoOtIà mon fichier gvimrc.
Il est expliqué dans la page d'aide qui vous est proposée par :help shortmess.
Les lettres signifient des classes de messages que vous ne voulez pas voir, ou que vous souhaitez que vim tronque pour éviter la frappe enter stop.
J'ai réussi cela avant en définissant une large fenêtre initiale avec columns=130dans gvimrc afin que peu de messages la débordent et nécessitent le besoin ennuyeux et épuisant d'appuyer sur Entrée.

Juan Lanus
la source
6

C'est ainsi que j'exécute des commandes externes dans des scénarios difficiles sans avoir "Appuyez sur ENTRÉE". Contrairement à :silent, je peux toujours voir la sortie de la commande.

Ligne de commande

:exe ":!<command>" | redraw

Script / fonction

exe ':!<command>' 
redraw

Cartographie avec <expr>

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

Mappage avec <expr>qui appelle une fonction

map <expr> <F5> MyFoo()
fu! MyFoo()
    return ":exe ':!<command>' | redraw\<CR>"
endf
Svlasov
la source
Est-ce réutilisable d'une manière ou d'une autre? Lorsque j'appuie sur F5, cela appelle simplement une chaîne<command>
ashrasmun
1
<command>est destiné à être remplacé par une commande externe réelle, par exemplemap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov
4

Vous pouvez utiliser:

call feedkeys(" ")

Par exemple:

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
la source
Merci pour cette réponse! Rapide et facile et réellement efficace pour mon cas personnel contrairement à la plupart des autres réponses énumérées.
ab5tract le
3

Mettre un nouveau dessin avant que l'écran ne soit effacé fonctionne également. Voici ce que j'avais:

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

Mais cela ne déclenchera pas l'invite:

exe 'ls'  
redraw  
exe 'b4'
Liang Li
la source
Cela m'a aidé car je me suis simplement débarrassé par programme de l'invite à un certain endroit dans une fonction. Juste publier un redrawrésolu. L'autre solution ne convenait pas, car je voulais accepter l'entrée de l'utilisateur entre le message d'origine et la disparition de l'invite.
Daniel Andersson
1

J'ai un problème similaire, mais lorsque j'exécute un argdo pour remplacer la même chaîne dans plusieurs fichiers, par exemple,

 argdo %s/something/Something/eg|update

Je devais constamment appuyer sur la page.

Vous pouvez définir l'option suivante avant d'exécuter le script afin qu'il n'y ait que l'invite finale au lieu de nombreuses invites

:set nomore
Matt Vukomanovic
la source
Telle était la réponse: :set nomore, mauvaise lick il est encore à la fin. C'est aussi dans :h help hit-enter@anthony
Tinmarino
1

Mon cas (une autocommande) a set shortmess+=Ffait l'affaire.

: h shortmess
F ne donne pas les informations sur le fichier lors de l'édition d'un fichier, comme:silent

Biggybi
la source
0

Cela m'arrive si j'enregistre un fichier qui se trouve dans un répertoire où je n'ai pas les autorisations d'écriture dans le répertoire. J'ai fait un chmod 777 sur le répertoire (j'avais déjà des permissions d'écriture sur le fichier lui-même) et le message "Press ENTER" n'apparaît plus.

Jayemar
la source
0
  • Si vous utilisez une carte de touches, votre vie peut être beaucoup plus facile en ajoutant plusieurs autres à la fin de votre commande - mais généralement 2 fois c'est assez bien.
  • Mais si vous exécutez une commande à partir de la ligne de commande vim. Ensuite, c'est un peu délicat. Vous pouvez ajouter un mot-clé silentavant votre commande réelle. Cela vous ramènera automatiquement à la fenêtre vim une fois la commande exécutée. Mais vous devez toujours exécuter manuellement redrawcar certaines des fenêtres comme NERD_Tree doivent être redessinées.

    • Dans ce cas, essayez de suivre les instructions du document d'aide de vim:

      Pour réduire le nombre d'invites de frappe:

      • Réglez 'cmdheight' sur 2 ou plus.
      • Ajoutez des indicateurs à «shortmess».
      • Réinitialisez «showcmd» et / ou «règle».
    • Ce lien offre une autre issue. Mettez ceci dans votre fichier vimrc

      commander! -nargs = 1 Silencieux
      \ exécuter 'silencieux!' .
      \ | exécutez "redraw!"
      

Et puis vous pouvez utiliser :Silent commandcomme une commande ordinaire.

huangzonghao
la source
0

A mes côtés la solution était d'utiliser silentplus fréquemment dans une chaîne de commande .

Plus précisément avant, .vimrcavait:

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

Cela a été changé en:

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

Avant, le "Press ENTER" n'apparaissait pas toujours, mais souvent ennuyeux. Les silents supplémentaires ont corrigé ce problème. (Il semble que ce silentn'est pas nécessaire, redraw!car :ccle message «Appuyez sur ENTRÉE»).

Ce changement a l'inconvénient de ne plus afficher la sortie de :cc, vous devez donc deviner quelle est l'erreur. Un petit ajustement corrige ceci:

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

Cela fait makeapparaître automatiquement la liste des erreurs QuickFix (Sortie de ) (et, par vim-magic, disparaître s'il n'y a pas d'erreur).

FYI:

La motivation de cette Mcartographie est d'appuyer simplement sur Men mode normal pour:

  • enregistrez la modification (lorsque vous utilisez maketout est sous gitcontrôle de toute façon)
  • invoquer make
  • et passez directement à la première erreur ou avertissement

Mes Makefiles sont généralement construits de telle sorte que cela ne prend qu'une fraction de seconde.

Avec quelques ajustements, cela peut également être appliqué aux Ccharges de travail non de type:

En .vimrcplus

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

Cela permet vimd'interpréter les messages comme suit pour :cc(erreur d'affichage):

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

( Errors, Warnings, Info, basés sur la vimmagie)

Exemple d'utilisation de ceci pour les scripts Python . (Désolé, pas de copie ici, c'est une autre histoire.)

Tino
la source
0

Si votre erreur est causée par E303, la création d'un répertoire temporaire dans le .vimrcfichier peut la corriger.

Après avoir ouvert un fichier, écrivez et entrez:

:messages

S'il y a des erreurs, il s'affiche.

Si vous voyez E303 (Erreur 303) "Impossible d'ouvrir le fichier d'échange pour" {filename} ", récupération impossible", cela peut indiquer qu'il y a une ancienne tentative de récupération d'un fichier d'échange (probablement perdu ou inexistant) dans le système .

Pour résoudre ce problème, attribuez un répertoire temporaire dans le .vimrcfichier.

Pour trouver l'emplacement du .vimrcfichier, tapez et entrez ceci:

$ locate .vimrc
/root/.vimrc

Ouvrez le fichier $ vi .vimrc

Ajoutez ceci à la fin du fichier:

set directory=.,$TEMP

Enregistrez et fermez avec :wq

Enfin, rechargez le profil avec:

$ . /etc/profile

Essayez d'ouvrir n'importe quel fichier avec VI. Le problème doit être résolu.

Rafael Vidal
la source
0

Activé gvim, si vous avez défini guioptions+=!(Ajouté !dans guioptions), c'est à cause de cela. Cette option ( !) fait gvimexécuter certaines commandes sur un terminal externe (qui supporte plus de fonctionnalités, comme la couleur et tant d'autres).

Vous pouvez l'essayer en utilisant :set guioptions-=iet voir si cela fonctionne pour vous.

Nilesh Kevlani
la source