Wie deaktiviere ich die Eingabeaufforderung "Drücken Sie die EINGABETASTE oder geben Sie den Befehl ein, um fortzufahren" in Vim?


102

Gibt es eine Möglichkeit, die Eingabeaufforderung "Drücken Sie ENTER oder geben Sie den Befehl ein, um fortzufahren" zu deaktivieren, die nach dem Ausführen eines externen Befehls angezeigt wird?

BEARBEITEN: <CR>Problemumgehung gefunden: Fügen Sie der Verknüpfung in meinem .lvimrc ein Extra hinzu.

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

Irgendwelche besseren Ideen?


9
Unter Windows 7 wird diese Eingabeaufforderung häufig angezeigt, weil die Fehler "Auslagerungsdatei kann nicht geöffnet werden" gedruckt wurden, aber nicht angezeigt werden. Dies führt zu der Eingabeaufforderung. Die Lösung besteht darin, set dir=$TEMPIhr vimrc einzutragen. Dies weist vim an, den richtigen temporären Ordner für seine temporären Dateien zu verwenden. Dies behebt wiederum die Fehler und entfernt die Eingabeaufforderungen "Drücken Sie die Eingabetaste".
Lucas

Antworten:


76

Ich bin mir nicht sicher, wie ich es global für einen Befehl machen soll:

:silent !<command>

Stellen Sie sicher, dass nach ein Leerzeichen eingefügt wird silent


3
Leider nicht sehr hilfreich für mich, es bringt den Bildschirm durcheinander und ich muss Strg-L drücken ... was noch ärgerlicher ist als das Drücken der Leertaste.
Johan Kotlinski

1
Arbeitete für mein Grep-Skript!
Mikko Rantanen

5
In Übereinstimmung mit dem Kommentator unten (der vorgeschlagen hat, am Ende des Befehls zusätzliches <CR> hinzuzufügen) können Sie bei Verwendung von Silent zusätzliches <Cl> hinzufügen, damit Sie es nicht manuell drücken müssen. Funktioniert also gut mit dem Bildschirm.
Victor Farazdagi

4
Verwenden Sie einfach den Befehl: quiet! und dann: neu zeichnen! nach - ich denke, es tut dies nicht automatisch aufgrund von Skripten, die Dinge auf dem Bildschirm tun können, die Sie bleiben möchten, zum Beispiel eine Uhr oder eine andere
Statusüberwachungssache

2
Ja ... es bringt den Bildschirm auch für mich durcheinander. Die :redraw!Option löst es. Das Doppel <cr>ist wahrscheinlich ähnlich. und weniger kompliziert
alpha_989

57

Eine Problemumgehung wurde gefunden: Fügen Sie <CR> dem Map-Befehl ein zusätzliches hinzu .

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

2
Daran hätte ich nie gedacht. Absolut brilliant!
Kohányi Róbert

1
Ja, das Hinzufügen des zusätzlichen <CR> zu meinem Befehl hat ebenfalls den Trick getan.
Daniel Miessler

2
Unglaublich einfach. Es ist sehr effektiv!
Wayne Werner

28
:help hit-enter

1
Ich bin gespannt, warum jemand diese Antwort abgelehnt hat, da sie :help hit-entereinige ziemlich nützliche Hintergrundinformationen zur Eingabeaufforderung "ENTER drücken ..." enthält. Möchtest du das erklären?
cjs

38
Welche Informationen von ': help hit-enter' beantworten die Frage? Ich kann es nicht finden.
Johan Kotlinski

1
Es ist möglich, dass Sie vor dem Shell-Befehl eine Eingabeaufforderung "Drücken Sie die EINGABETASTE" vom Befehl "Alle schreiben" erhalten. In diesem Fall sind die Informationen unter <code> shortmess </ code> gültig, auf die <code> hit-enter </ code> verweist. Die Eingabeaufforderung, die Sie erhalten, ist jedoch das Beschießen. Wergans Vorschlag ist also der richtige. Wie unter <code>: help: quiet </ code> angegeben. "Wenn Sie dies für einen externen Befehl verwenden, kann dies dazu führen, dass der Bildschirm durcheinander gerät. Verwenden Sie | STRG-L |, um ihn zu bereinigen." Sie können Ihrem Befehl Folgendes hinzufügen: Neuzeichnen oder Strg-L, um dies zu beheben. Oder machen Sie einfach die beiden Retouren, die Sie bereits machen.
Auffälliger Compiler

Für mich ging es um set hl( :highlight), das ich fälschlicherweise als Verknüpfung für hlsearchdie eigentliche Verknüpfung verwendet habe hls. Eins ist swichtig :)

1
@ JohanKotlinski theset nomore
Tinmarino vor

19

Setze das cmdheightin meinem vimrc ( :e $MYVIMRC) auf 2 :

:set cmdheight=2

Mehr Infos hier .


1
Dies ist perfekt für wirklich lange Suchanfragen
Keith Smiley

18

So ging ich mit dem Problem um, dass das Ausführen eines externen Programms durch stilles Durcheinander den Bildschirm im Textmodus vim durcheinander bringt (meiner Erfahrung nach leidet gvim nicht unter diesem Problem):

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

Verwenden Sie es anstelle des regulären Silent-Befehls:

:Silent top

13

Möglicherweise handelt es sich um einen Syntaxfehler in der vimrc- Datei


5
Dies. Ich hatte set numberund dann set syntaxdirekt unten in meiner .vimrc-Datei verwendet. Nachdem ich set syntaxVim entfernt hatte, wurde ich nicht mehr dazu aufgefordert.
Piperchester

1
@ Piperchester das hat funktioniert! Versuchte Tonnen von Vorschlägen und nur das hat funktioniert. Danke :)
Paul Evans

Ich aktualisiere vim, Problem gelöst. Aber ich denke, die Leute könnten tippen :message, um herauszufinden, was falsch läuft.
NanoNova

Ja. Ich hatte die Leitung set syntax. Ersetzt durch set syntax=onund es behebt das Problem.
McSuperbX1

7

Die Antwort von Anthony brachte mich an den richtigen Ort und ich konnte gvim so konfigurieren, dass nicht viele Nachrichten angehalten werden.
Ich habe set shortmess=aoOtIzu meiner gvimrc-Datei hinzugefügt .
Dies wird auf der Hilfeseite erläutert, die Ihnen von zur Verfügung gestellt wird :help shortmess.
Die Buchstaben bedeuten Klassen von Nachrichten, die Sie nicht sehen möchten oder die vim abschneiden soll, um zu vermeiden, dass die Eingabetaste gedrückt wird.
Ich habe dies zuvor geschafft, indem ich ein breites Anfangsfenster mit columns=130in gvimrc so eingestellt habe, dass nur wenige Nachrichten überlaufen und das nervige, anstrengende Drücken der Eingabetaste erforderlich ist.


6

So führe ich externe Befehle in schwierigen Szenarien aus, ohne "ENTER drücken" zu haben. Im Gegensatz dazu :silentkann ich immer noch die Befehlsausgabe sehen.

Befehlszeile

:exe ":!<command>" | redraw

Skript / Funktion

exe ':!<command>' 
redraw

Mapping mit <expr>

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

Das Mapping <expr>damit ruft eine Funktion auf

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

Ist das in irgendeiner Weise wiederverwendbar? Wenn ich F5 drücke, wird nur eine Zeichenfolge <command>
aufgerufen

1
<command>soll durch einen tatsächlichen externen Befehl ersetzt werden, zBmap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

Sie können verwenden:

call feedkeys(" ")

Beispielsweise:

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

Danke für diese Antwort! Schnell und einfach und tatsächlich effektiv für meinen persönlichen Fall im Gegensatz zu vielen anderen Antworten.
Ab5Tract

3

Das Neuzeichnen vor dem Löschen des Bildschirms funktioniert ebenfalls. Folgendes hatte ich:

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

Dies löst jedoch keine Eingabeaufforderung aus:

exe 'ls'  
redraw  
exe 'b4'

Dies hat mir geholfen, da ich die Eingabeaufforderung an einer bestimmten Stelle innerhalb einer Funktion nur programmgesteuert entfernen musste. Nur ein redrawProblem gelöst. Die andere Lösung passte nicht, da ich Benutzereingaben zwischen der ursprünglichen Nachricht und dem Verschwinden der Eingabeaufforderung akzeptieren wollte.
Daniel Andersson

1

Ich habe ein ähnliches Problem, aber wenn ich ein Argdo ausführe, um dieselbe Zeichenfolge in mehreren Dateien zu ersetzen, z.

 argdo %s/something/Something/eg|update

Ich musste ständig die Seite nach unten drücken.

Sie können die folgende Option festlegen, bevor Sie das Skript ausführen, sodass anstelle vieler Eingabeaufforderungen nur die letzte Eingabeaufforderung angezeigt wird

:set nomore

Das war die Antwort :set nomore:, schlechtes lecken ist es noch am ende. Es ist auch in :h help hit-entervon @anthony
Tinmarino vor

1

Ich mein Fall (ein Autocommand) set shortmess+=Fhat den Trick gemacht.

: h shortmess
F Geben Sie beim Bearbeiten einer Datei keine Dateiinformationen an , wie z:silent


0

Dies passiert mir, wenn ich eine Datei speichere, die sich in einem Verzeichnis befindet, in dem ich keine Schreibberechtigungen für das Verzeichnis habe. Ich habe einen chmod 777 für das Verzeichnis ausgeführt (ich hatte bereits Schreibberechtigungen für die Datei selbst) und die Meldung "ENTER drücken" wird nicht mehr angezeigt.


0
  • Wenn Sie eine Schlüsselkarte verwenden, kann Ihr Leben viel einfacher sein, indem Sie am Ende Ihres Befehls mehrere hinzufügen - aber normalerweise ist 2-mal gut genug.
  • Wenn Sie jedoch einen Befehl über die vim-Befehlszeile ausführen. Dann ist es etwas schwierig. Sie können silentvor Ihrem eigentlichen Befehl ein Schlüsselwort hinzufügen . Nach Ausführung des Befehls kehren Sie automatisch zum vim-Fenster zurück. Sie müssen jedoch weiterhin manuell ausgeführt werden, redrawda einige Fenster wie NERD_Tree neu gezeichnet werden müssen.

    • Versuchen Sie in diesem Fall, die Anweisungen aus dem vim-Hilfedokument zu befolgen:

      So reduzieren Sie die Anzahl der Eingabeaufforderungen:

      • Stellen Sie 'cmdheight' auf 2 oder höher ein.
      • Fügen Sie 'shortmess' Flags hinzu.
      • Setzen Sie 'showmd' und / oder 'Lineal' zurück.
    • Dieser Link bietet einen weiteren Ausweg. Fügen Sie dies in Ihre vimrc-Datei ein

      Befehl! -nargs = 1 Silent
      \ 'Silent!' .
      \ | Führen Sie 'Neu zeichnen!'
      

Und dann können Sie :Silent commandwie ein normaler Befehl verwenden.


0

An meiner Seite bestand die Lösung darin, silenthäufiger in einer Befehlskette zu verwenden .

Speziell vorher .vimrchatte:

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

Dies wurde geändert in:

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

Vorher tauchte die "Drücken Sie ENTER" nicht immer auf, aber ärgerlich oft. Die zusätzlichen silents haben dies behoben. (Es sieht so aus, als würde silentes nicht benötigt, redraw!da :ccdie Meldung "ENTER drücken" ausgelöst wurde.)

Diese Änderung hat den Nachteil, dass die Ausgabe von nicht mehr angezeigt :ccwird. Sie müssen also raten, was der Fehler ist. Eine kleine Änderung behebt dies:

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

Dadurch wird die Fehler-QuickFix-Liste (Ausgabe von make) automatisch angezeigt (und von vim-magic ausgeblendet , wenn kein Fehler vorliegt).

Zu Ihrer Information:

Die Motivation für diese MZuordnung besteht darin, einfach Mim Normalmodus zu drücken, um:

  • Speichern Sie die Bearbeitung (wenn Sie verwenden make, ist gitsowieso alles unter Kontrolle)
  • aufrufen make
  • und direkt zum ersten Fehler oder zur ersten Warnung springen

Meine Makefiles sind normalerweise so aufgebaut, dass dies nur einen Bruchteil einer Sekunde dauert.

Mit ein wenig Optimierung kann dies auch auf CWorkloads ohne Typ angewendet werden :

Zusätzlich .vimrchinzufügen

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

Dies ermöglicht vimdie Interpretation von Meldungen wie folgt für :cc(Anzeigefehler):

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

( ESpiegel, WArnings, Info, basierend auf vimMagie)

Beispiel, wie dies für Python-Skripte verwendet wird . (Sorry, keine Kopie hier, es ist eine andere Geschichte.)


0

Wenn Ihr Fehler durch E303 verursacht wird, kann er durch Erstellen eines temporären Verzeichnisses in der .vimrcDatei behoben werden .

Schreiben Sie nach dem Öffnen einer Datei Folgendes und geben Sie Folgendes ein:

:messages

Wenn es Fehler gibt, werden Sie dazu aufgefordert.

Wenn E303 (Fehler303) "Auslagerungsdatei für" {Dateiname} "kann nicht geöffnet werden, Wiederherstellung nicht möglich" angezeigt wird, weist dies möglicherweise darauf hin, dass ein alter Versuch unternommen wurde, eine Auslagerungsdatei (höchstwahrscheinlich verloren oder nicht vorhanden) im System wiederherzustellen .

Um dies zu beheben, weisen Sie der .vimrcDatei ein temporäres Verzeichnis zu .

Geben Sie .vimrcFolgendes ein und geben Sie Folgendes ein, um den Speicherort der Datei zu ermitteln:

$ locate .vimrc
/root/.vimrc

Öffne die Datei $ vi .vimrc

Fügen Sie dies an das Ende der Datei an:

set directory=.,$TEMP

Speichern und schließen mit :wq

Laden Sie das Profil abschließend neu mit:

$ . /etc/profile

Versuchen Sie, eine beliebige Datei mit VI zu öffnen. Das Problem soll behoben sein.


0

Auf gvimwenn Sie haben festgelegt guioptions+=!(Hinzugefügt !in guioptions), ist dies , weil davon. Mit dieser Option ( !) können gvimeinige Befehle auf einem externen Terminal ausgeführt werden (die mehr Funktionen wie Farbe und so viele andere unterstützen).

Sie können es mit versuchen :set guioptions-=iund sehen, ob dies für Sie funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.