Vimで「Enterキーを押すか、コマンドを入力して続行する」プロンプトを無効にするにはどうすればよいですか?


102

外部コマンドの実行後に表示される「Enterキーを押すか、コマンドを入力して続行します」というプロンプトを無効にする方法はありますか?

編集:回避策が見つかりました:<CR>.lvimrcのショートカットにエキストラを追加します。

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

より良いアイデアはありますか?


9
Windows 7では、「スワップファイルを開けません」というエラーが出力されたためにこのプロンプトが頻繁に表示されますが、表示されないため、プロンプトが表示されます。解決策はset dir=$TEMP、vimrc に置くことです。これにより、vimは一時ファイルに正しい一時フォルダーを使用するようになります。これにより、エラーが修正され、「Enterキーを押す」プロンプトが削除されます。
ルーカス

回答:


76

1つのコマンドでグローバルにそれを行う方法はわかりません:

:silent !<command>

後にスペースを入れてください silent


3
残念ながら私にはあまり役に立ちません、それは画面を混乱させ、Ctrl-Lを押さなければなりません...これはスペースを押すよりもさらに面倒です。
ヨハンコトリンスキー

1
私のgrepスクリプトでうまくいきました!
ミッコランタネン

5
以下のコメンター(コマンドの最後に余分な<CR>を追加することを提案した人)と同様に、サイレントを使用する場合、手動で押す必要がないように、余分な<Cl>を追加できます。その場合、画面でうまく機能します。
Victor Farazdagi、2009

4
:silent!commandを使用し、次に:redraw!を使用するだけです。後-時計やその他のステータス監視機能など、画面に残っていることを実行する可能性のあるスクリプトがあるため、これは自動的に行われないと思います...推測
osirisgothra

2
うん..それも私のために画面を台無しにします。:redraw!オプションは、それを解決します。ダブル<cr>はおそらく似ています。それほど複雑ではない
alpha_989 2018

57

回避策が1つ見つかりました:<CR> mapコマンドにエキストラを追加します。

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

2
これを考えたことはありませんでした。絶対に素晴らしい!
Kohányiロバート

1
はい、コマンドに<CR>を追加するとうまくいきました。
Daniel Miessler

2
信じられないほどシンプル。超効果的です!
ウェインヴェルナー、

28
:help hit-enter

1
:help hit-enter「Enterキーを押してください...」というプロンプトに対してかなり役立つ背景情報を提供しているので、なぜ誰かがこの回答に反対票を投じたのかについて知りたいです。説明してもいいですか?
cjs 2009年

38
「:help hit-enter」のどの情報が質問に答えますか?見つかりません。
Johan Kotlinski、

1
シェルアウトする前に、write allコマンドから「Enterキーを押す」プロンプトが表示される可能性があります。その場合、<code> hit-enter </ code>がリンクする<code> shortmess </ code>の下の情報は有効です。ただし、表示されるプロンプトは砲撃によるものなので、Werganの提案は正しいものです。<code>:help:silent </ code>に記載されているように、「これを外部コマンドに使用すると、画面が乱れる場合があります。| CTRL-L |を使用してクリーンアップしてください。」コマンドに:redrawまたはCtrl-Lを追加して修正できます。または、すでに実行している2つのリターンを実行します。
目立つコンパイラ

私にとっては、それが約だったset hl:highlight私が間違ってのショートカットとして使用)hlsearch本当のショートカットが誰であるかのhls。1つのs問題:)

1
@JohanKotlinski theset nomore
ティンマリーノ


18

これが、サイレントモードで外部プログラムを実行すると、テキストモードのvimで画面が乱雑になるという問題に対処する方法です(私の経験では、gvimはこの問題の影響を受けません)。

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

通常のサイレントコマンドの代わりに使用します。

:Silent top

13

vimrcファイルの構文エラーである可能性があります


5
この。私は.vimrcファイルで使用しset number、そのset syntaxすぐ下にありました。set syntaxVim を削除すると、プロンプトは表示されなくなります。
piperchester 2014

1
@piperchester これでうまくいきました!大量の提案を試してみましたが、これだけが機能しました。ありがとう:)
ポール・エヴァンス

vimを更新し、問題を解決しました。しかし、:message何が問題なのかを知るためにタイプ入力できると思います。
NanoNova

うん。私はラインを持っていましたset syntax。に置き換えればset syntax=on、問題が解決します。
McSuperbX1

7

anthonyの答えは正しい場所に連れて行ってくれて、たくさんのメッセージで止まらないようにgvimを設定することができました。
セットshortmess=aoOtIをgvimrcファイルに追加しました。
それはによって提供されたヘルプページで説明されています:help shortmess
文字は、表示したくないメッセージのクラスを意味します。または、Enterキーを押して停止しないようにvimで切り捨てます。
以前はcolumns=130、gvimrcで幅の広い初期ウィンドウを設定することでこれを管理していたため、メッセージがオーバーフローして、Enterキーを押す必要があるという煩わしい、使い果たされる必要があります。


6

これは、「Enterキーを押す」ことなく、トリッキーなシナリオで外部コマンドを実行する方法です。とは異なり:silent、コマンド出力は引き続き表示されます。

コマンドライン

:exe ":!<command>" | redraw

スクリプト/関数

exe ':!<command>' 
redraw

マッピング <expr>

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

<expr>関数を呼び出すマッピング

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

これは何らかの方法で再利用できますか?F5 <command>
キー

1
<command>実際の外部コマンドに置き換えることを意図しています。例:map <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

以下を使用できます。

call feedkeys(" ")

例えば:

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

この回答をありがとう!リストされている他の多くの回答とは異なり、私の個人的なケースでは迅速かつ簡単で実際に効果的です。
ab5tract

3

画面クリアの前に再描画を配置しても機能します。ここに私が持っていたものがあります:

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

しかし、これはプロンプトをトリガーしません:

exe 'ls'  
redraw  
exe 'b4'

これは、関数内の特定の場所にあるプロンプトをプログラムで取り除くためだけに役立ちました。redraw解決したそれを発行するだけです。元のメッセージとプロンプトが消えるまでの間にユーザー入力を受け入れたかったため、他のソリューションは適合しませんでした。
Daniel Andersson、

1

同様の問題がありますが、複数のファイルで同じ文字列を置き換えるためにargdoを実行すると、たとえば、

 argdo %s/something/Something/eg|update

私は常にページを押し下げなければなりませんでした。

スクリプトを実行する前に次のオプションを設定して、多くのプロンプトではなく最終プロンプトのみを表示することができます

:set nomore

それが答えでした::set nomore、なめなめはまだ終わりです。それはにもあり:h help hit-enter@anthonyの
Tinmarino

1

私のケース(オートコマンド)set shortmess+=Fがうまくやった。

:h shortmess
Fは、ファイルの編集時にファイル情報を提供しません。:silent


0

これは、ディレクトリへの書き込み権限がないディレクトリにあるファイルを保存しようとすると起こります。私はディレクトリでchmod 777を実行しました(ファイル自体への書き込みアクセス許可を既に持っていました)。「Enterキーを押す」メッセージは表示されなくなりました。


0
  • キーマップを使用している場合は、コマンドの最後にさらにいくつかを追加することにより、作業がはるかに簡単になります。ただし、通常は2回で十分です。
  • しかし、vimコマンドラインからコマンドを実行している場合。それからそれは一種のトリッキーです。silent実際のコマンドの前にキーワードを追加できます。コマンドが実行された後、自動的にvimウィンドウに戻ります。ただしredraw、NERD_Treeなどの一部のウィンドウを再描画する必要があるため、手動で実行する必要があります。

    • この場合、vimヘルプドキュメントの指示に従ってください。

      hit-enterプロンプトの数を減らすには:

      • 「cmdheight」を2以上に設定します。
      • 「shortmess」にフラグを追加します。
      • 「showcmd」や「ルーラー」をリセットします。
    • このリンクは別の方法を提供します。これをvimrcファイルに入れます

      コマンド!-nargs = 1サイレント
      \「サイレント!」を実行する 。
      \ | 'redraw!'を実行します
      

そして:Silent command、通常のコマンドのように使用できます。


0

私の側では、解決策はコマンドチェーンでより頻繁に使用silentすることでし

具体的には、以前.vimrcは:

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

これは次のように変更されました:

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

以前は、[Enterキーを押す]が常に表示されるわけではありませんが、迷惑なほど頻繁に表示されていました。追加silentのはこれを修正しました。(「Enterキーを押してください」というメッセージが表示silentredraw!れた:ccため、必要ではないようです。)

この変更には、の出力が表示されなくなるという欠点がある:ccため、エラーを推測する必要があります。少し微調整は、この修正されます。

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

これにより、エラーQuickFixリスト(の出力make)が自動的に表示されます(エラーがない場合はvim-magicによって表示されません)。

ご参考までに:

このM-mappingの動機はM、Normal-Modeを押すだけです。

  • 編集を保存します(makeすべてを使用する場合はgitとにかく-controlの下にあります)
  • 呼び出す make
  • 最初のエラーまたは警告に直接ジャンプします

Makefileのsは通常、1秒もかからないように構築されています。

少し調整することで、これをCタイプ以外のワークロードにも適用できます。

.vimrc追加

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

これによりvim:cc(表示エラー)の次のようなメッセージを解釈できます。

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

Errrr、Warnings、Info、vim魔法に基づく)

これをPythonスクリプトに使用する方法の例。(申し訳ありませんが、ここにはコピーがありません。別の話です。)


0

エラーの原因がE303の場合は、.vimrcファイルに一時ディレクトリを作成すると修正されることがあります。

ファイルを開いたら、次のように入力します。

:messages

エラーがある場合は、プロンプトが表示されます。

E303(Error303) "Unable to open swap file for" {filename} "、recovery不可能"が表示された場合は、システムにスワップファイルを回復する古い試み(おそらく失われたか、存在しない可能性があります)がある可能性があります。

これを修正するには、.vimrcファイルに一時ディレクトリを割り当てます。

.vimrcファイルの場所を見つけるには、次のように入力して入力します。

$ locate .vimrc
/root/.vimrc

ファイルを開く $ vi .vimrc

これをファイルの最後に追加します。

set directory=.,$TEMP

保存して閉じる :wq

最後に、次のコマンドでプロファイルをリロードします。

$ . /etc/profile

VIで任意のファイルを開こうとします。問題は修正されます。


0

gvimguioptions+=!(Added !in guioptions)を設定している場合、これはそのためです。このオプション(!)はgvim、外部端末でいくつかのコマンドを実行させます(これにより、色などの多くの機能がサポートされます)。

あなたはそれを使ってそれを試して:set guioptions-=i、これがあなたのために働くかどうか見ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.