Come disabilito il prompt "Premi INVIO o digita il comando per continuare" in Vim?


102

Esiste un modo per disabilitare il prompt "Premi INVIO o digita il comando per continuare" visualizzato dopo aver eseguito un comando esterno?

EDIT: trovata una soluzione alternativa: aggiungi un extra <CR>al collegamento nel mio .lvimrc.

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

Qualche idea migliore?


9
Su Windows 7, riceverai spesso questo messaggio a causa di errori "impossibile aprire il file di scambio" che sono stati stampati ma non li vedi, il che causa il prompt. La soluzione è inserire il set dir=$TEMPtuo vimrc. Questo dice a vim di usare la cartella temporanea corretta per i suoi file temporanei. Questo a sua volta corregge gli errori e rimuove le richieste di "premere invio".
Lucas

Risposte:


76

Non sono sicuro di come farlo a livello globale anche se per un comando:

:silent !<command>

Assicurati di includere uno spazio dopo silent


3
Sfortunatamente non molto utile per me, rovina lo schermo e devo premere Ctrl-L ... che è ancora più fastidioso che premere spazio.
Johan Kotlinski

1
Ha funzionato per il mio script grep però!
Mikko Rantanen

5
In linea con il commentatore di seguito (che ha suggerito di aggiungere <CR> extra alla fine del comando), quando si utilizza silent, è possibile aggiungere <Cl> extra, in modo da non doverlo premere manualmente. Funziona bene con lo schermo, quindi.
Victor Farazdagi

4
basta usare il comando: silent! e poi: redraw! dopo - penso che non lo faccia automaticamente a causa di script che possono fare cose sullo schermo che vuoi che rimangano, ad esempio, un orologio o qualche altra cosa di monitoraggio dello stato ... solo una supposizione
osirisgothra

2
Sì .. anche per me rovina lo schermo. l' :redraw!opzione lo risolve. Il doppio <cr>è probabilmente simile. e meno complicato
alpha_989

57

Ho trovato una soluzione alternativa: aggiungi un extra <CR> al comando map.

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

2
Non ci avrei mai pensato. Assolutamente brillante!
Kohányi Róbert

1
Sì, anche l'aggiunta di <CR> extra al mio comando ha funzionato.
Daniel Miessler

2
Incredibilmente semplice. È super efficace!
Wayne Werner

28
:help hit-enter

1
Sono curioso di sapere perché qualcuno ha votato verso il basso questa risposta, dal momento che :help hit-enterfornisce alcune informazioni di base abbastanza utili sul prompt "Premi INVIO ...". Ti va di spiegare?
cjs

38
Quali informazioni da ": help hit-enter" rispondono alla domanda? Non riesco a trovarlo.
Johan Kotlinski

1
È possibile che tu possa ottenere un prompt "Premi INVIO" dal comando scrivi tutto prima di sgranare. Le informazioni in <code> shortmess </code> a cui si collega <code> hit-enter </code> sono valide in questo caso. Tuttavia, il prompt che ricevi è quello di sborsare, quindi il suggerimento di Wergan è quello corretto. Come indicato in <code>: help: silent </code> "Quando si usa questo per un comando esterno, questo potrebbe causare un disordine dello schermo. Usa | CTRL-L | per ripulirlo". Puoi aggiungere: ridisegna o Ctrl-L al tuo comando per risolverlo. O fai semplicemente i due ritorni che stai già facendo.
Conspicuous Compiler

Per me, si trattava di set hl( :highlight) che ho usato erroneamente come scorciatoia per hlsearchchi è la vera scorciatoia hls. Uno sconta :)

1
@JohanKotlinski theset nomore
Tinmarino

19

Imposta il cmdheightsu 2, nel mio vimrc ( :e $MYVIMRC):

:set cmdheight=2

Maggiori info qui .


1
Questo è perfetto per query di ricerca molto lunghe
Keith Smiley

18

Questo è il modo in cui ho affrontato il problema che l'esecuzione di un programma esterno in modalità silenziosa rovina lo schermo in modalità testo vim (nella mia esperienza, gvim non soffre di questo problema):

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

Usalo al posto del normale comando silenzioso:

:Silent top

13

Probabilmente è un errore di sintassi nel file vimrc


5
Questo. Avevo usato set numbere poi set syntaxsubito sotto nel mio file .vimrc. Una volta rimosso, set syntaxVim non mi ha più chiesto.
piperchester

1
@piperchester questo ha funzionato! Ho provato tonnellate di suggerimenti e solo questo ha funzionato. Grazie :)
Paul Evans

Aggiornamento vim, problema risolto. Ma penso che le persone potrebbero digitare :messageper scoprire cosa non va.
NanoNova,

Sì. Ho avuto la linea set syntax. Sostituito con set syntax=one risolve il problema.
McSuperbX1

7

La risposta di anthony mi ha portato nel posto giusto e sono stato in grado di configurare gvim in modo che non si fermasse su molti messaggi.
Ho aggiunto set shortmess=aoOtIal mio file gvimrc.
È spiegato nella pagina della guida fornita da :help shortmess.
Le lettere indicano le classi di messaggi che non vuoi vedere, o vorresti che vim troncasse per evitare il tasto enter stop.
Ci sono riuscito in precedenza impostando un'ampia finestra iniziale con columns=130in gvimrc in modo che pochi messaggi lo trabocchino e richiedessero la fastidiosa, estenuante, necessità di premere invio.


6

È così che eseguo comandi esterni in scenari difficili senza dover "premere INVIO". A differenza :silent, posso ancora vedere l'output del comando.

Riga di comando

:exe ":!<command>" | redraw

Script / funzione

exe ':!<command>' 
redraw

Mappatura con <expr>

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

Mappare con <expr>quello chiama una funzione

map <expr> <F5> MyFoo()
fu! MyFoo()
    return ":exe ':!<command>' | redraw\<CR>"
endf

È riutilizzabile in qualche modo? Quando premo F5, richiama solo una stringa<command>
ashrasmun

1
<command>è pensato per essere sostituito con un effettivo comando esterno, ad esempiomap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

Puoi usare:

call feedkeys(" ")

Per esempio:

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

Grazie per questa risposta! Veloce e facile ed effettivamente efficace per il mio caso personale a differenza di molte altre risposte elencate.
ab5tract

3

Anche il ridisegno prima della cancellazione dello schermo funziona. Ecco cosa ho avuto:

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

Ma questo non attiverà il prompt:

exe 'ls'  
redraw  
exe 'b4'

Questo mi ha aiutato dal momento che ho solo eliminato programmaticamente il prompt in un determinato punto all'interno di una funzione. Solo l'emissione di un redrawrisolto. L'altra soluzione non si adattava, poiché volevo accettare l'input dell'utente tra il messaggio originale e la scomparsa del prompt.
Daniel Andersson,

1

Ho un problema simile, ma quando eseguo un argdo per sostituire la stessa stringa in più file, ad es.

 argdo %s/something/Something/eg|update

Dovevo costantemente premere la pagina verso il basso.

È possibile impostare la seguente opzione prima di eseguire lo script in modo che ci sia solo il prompt finale invece di molti prompt

:set nomore

Questa era la risposta: la :set nomoreleccata cattiva è ancora alla fine. È anche in :h help hit-enterdi @anthony
Tinmarino

1

Il mio caso (un autocomando) set shortmess+=Fha funzionato.

: h shortmess
F non fornisce le informazioni sul file quando si modifica un file, come:silent


0

Questo mi succede se sto salvando un file che si trova in una directory in cui non ho i permessi di scrittura per la directory. Ho fatto un chmod 777 sulla directory (avevo già i permessi di scrittura sul file stesso) e il messaggio "Premi INVIO" non compare più.


0
  • Se stai usando una mappa chiave, la tua vita può essere molto più facile aggiungendone molte altre alla fine del tuo comando, ma di solito 2 volte è abbastanza bene.
  • Ma se stai eseguendo un comando dalla riga di comando di vim. Allora è un po 'complicato. Puoi aggiungere una parola chiave silentprima del tuo comando effettivo. Ti riporterà automaticamente alla finestra di vim dopo che il comando è stato eseguito. Ma è comunque necessario eseguire manualmente redrawpoiché alcune finestre come NERD_Tree devono essere ridisegnate.

    • In questo caso, prova a seguire le istruzioni dal documento della guida di vim:

      Per ridurre il numero di richieste di conferma:

      • Imposta "cmdheight" su 2 o superiore.
      • Aggiungi flag a "shortmess".
      • Reimposta "showcmd" e / o "righello".
    • Questo collegamento fornisce un'altra via d'uscita. Mettilo nel tuo file vimrc

      comando! -nargs = 1 Silent
      \ esegue "silenzio!" .
      \ | eseguire "ridisegna!"
      

E poi puoi usare :Silent commandcome un normale comando.


0

Al mio fianco la soluzione è stata quella di utilizzare silentpiù frequentemente in una catena di comandi .

In particolare prima, .vimrcaveva:

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

Questo è stato modificato in:

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

Prima, il "Premere INVIO" non sempre si presentava, ma fastidiosamente spesso. Le silents aggiuntive hanno risolto questo problema. (Sembra che silentnon è necessario in redraw!quanto :cccausato il messaggio "Press ENTER".)

Questa modifica ha lo svantaggio di non mostrare più l'output di :cc, quindi devi indovinare qual è l'errore. Un piccolo aggiustamento risolve questo problema:

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

Questo fa makeapparire automaticamente l' elenco degli errori QuickFix (Output di ) (e, per vim-magic, scompare se non ci sono errori).

FYI:

La motivazione di questa Mmappatura è semplicemente premere Min modalità normale per:

  • salva la modifica (quando usi maketutto è sottogit comunque controllo)
  • invocare make
  • e passa direttamente al primo errore o avviso

Mio Makefile solito sono costruiti in modo tale che questo richiede solo una frazione di secondo.

Con un po 'di aggiustamenti questo può essere applicato a nonC carichi di lavoro tipo:

In .vimrcaggiunta

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

Ciò consente vimdi interpretare i messaggi come segue per :cc(errore di visualizzazione):

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

( Errors, Warnings, Info, basato sulla vimmagia)

Esempio di come usarlo per gli script Python . (Spiacenti, nessuna copia qui, è una storia diversa.)


0

Se l'errore è causato da E303, creare una directory temporanea nel .vimrcfile potrebbe risolverlo.

Dopo aver aperto qualsiasi file, scrivi e inserisci:

:messages

Se sono presenti errori verrà richiesto.

Se vedi E303 (Errore303) "Impossibile aprire il file di scambio per" {nomefile} ", ripristino impossibile", potrebbe indicare che c'è un vecchio tentativo di recuperare un file di scambio (molto probabilmente perso o inesistente) nel sistema .

Per risolvere questo problema, assegna una directory temporanea nel .vimrcfile.

Per trovare la posizione di .vimrc file, digita e inserisci questo:

$ locate .vimrc
/root/.vimrc

Apri il file $ vi .vimrc

Aggiungilo alla fine del file:

set directory=.,$TEMP

Salva e chiudi con :wq

Infine, ricarica il profilo con:

$ . /etc/profile

Prova ad aprire qualsiasi file con VI. Il problema deve essere risolto.


0

Attivato gvim, se hai impostato guioptions+=!(Aggiunto !in guioptions), questo è dovuto a quello. Questa opzione ( !) makegvim eseguire alcuni comandi sul terminale esterno (che supportano più funzionalità, come il colore e tanti altri).

Puoi provarlo usando :set guioptions-=ie vedere se funziona per te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.