Vim'de “Devam etmek için ENTER'a basın veya komutu yazın” istemini nasıl devre dışı bırakırım?


104

Harici bir komutu çalıştırdıktan sonra görüntülenen "Devam etmek için ENTER'a basın veya komut yazın" istemini devre dışı bırakmanın bir yolu var mı?

DÜZENLEME: Bir çözüm bulundu: <CR>.lvimrc dosyamdaki kısayola fazladan bir ekle .

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

Daha iyi bir fikrin var mı?


9
Windows 7'de, bu istemi sık sık yazdırılan ancak görmediğiniz "takas dosyası açılamıyor" hataları nedeniyle alırsınız ve bu da soruna neden olur. Çözüm, set dir=$TEMPvimrc'nizi koymaktır . Bu, vim'e geçici dosyaları için doğru temp klasörünü kullanmasını söyler. Bu da hataları düzeltir ve "enter tuşuna basın" istemlerini kaldırır.
Lucas

Yanıtlar:


76

Bunu global olarak nasıl yapacağımdan emin değilim ama tek bir komut için:

:silent !<command>

Sonrasına bir boşluk eklediğinizden emin olun silent


3
Ne yazık ki bana pek yardımcı olmuyor, ekranı karıştırıyor ve Ctrl-L tuşlarına basmam gerekiyor ... bu da boşluk tuşuna basmaktan daha can sıkıcı.
Johan Kotlinski

1
Yine de grep betiğim için çalıştı!
Mikko Rantanen

5
Aşağıdaki yorumcuya göre (komutun sonuna fazladan <CR> eklemeyi öneren kişi), sessiz kullanırken fazladan <Cl> ekleyebilirsiniz, böylece manuel olarak basmanıza gerek kalmaz. O halde ekranla iyi çalışıyor.
Victor Farazdagi

4
sadece: sessiz! komutunu kullanın ve ardından: yeniden çizin! sonra - ben çünkü örneğin bir saat veya başka bir statü ... sadece bir tahmin şeyi izlenmesi kalış istediğiniz ekrana şeyler yapabilir komut otomatik olarak yapmak doesnt düşünüyorum
osirisgothra

2
Evet .. benim için ekranı da bozuyor. :redraw!seçenek onu çözer. İkili <cr>muhtemelen benzerdir. ve daha az karmaşık
alpha_989

58

Bir geçici çözüm bulduk: <CR> Harita komutuna bir ekstra ekleyin .

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

2
Bunu asla düşünmezdim. Kesinlikle harika!
Kohányi Róbert

1
Evet, komutuma fazladan <CR> eklemek de hile yaptı.
Daniel Miessler

2
İnanılmaz derecede basit. Bu süper etkilidir!
Wayne Werner

28
:help hit-enter

1
:help hit-enter"ENTER'a basın ..." komut isteminde oldukça yararlı bazı arka plan bilgileri sağladığından , birinin bu yanıtı neden reddettiğini merak ediyorum . Açıklamak ister misin?
cjs

38
Soruyu yanıtlayan ': hit-enter'a yardım edin' bilgisi? Bulamıyorum
Johan Kotlinski

1
Kapatma yapmadan önce tümünü yaz komutundan "ENTER'a basın" istemi alabilirsiniz. <code> hit-enter </code> 'un bağlantı verdiği <code> kısa mesaj </code> altındaki bilgiler bu durumda geçerlidir. Ancak, aldığınız uyarı bombardımandan geliyor, bu nedenle Wergan'ın önerisi doğru olanıdır. <code>: help: silent </code> 'de belirtildiği gibi "Bunu harici bir komut için kullandığınızda, bu ekran karışıklığa neden olabilir. Temizlemek için | CTRL-L | kullanın". Bunu düzeltmek için komutunuza: redraw veya Ctrl-L ekleyebilirsiniz. Ya da zaten yaptığınız iki dönüşü yapın.
Göze Çarpan Derleyici

Benim için asıl kısayolun kim olduğu için yanlış bir kısayol olarak kullandım set hl( :highlight) ile ilgiliydi . Bir önemli :)hlsearchhlss

1
@JohanKotlinski theset nomore
Tinmarino


18

Harici bir programı sessiz olarak çalıştırmanın metin modunda vim'de ekranı karıştırması sorununu bu şekilde çözdüm (benim deneyimime göre, gvim bu sorundan muzdarip değildir):

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

Normal sessiz komut yerine kullanın:

:Silent top

13

Muhtemelen vimrc dosyasında bir sözdizimi hatasıdır


5
Bu. .Vimrc dosyamda kullandım set numberve set syntaxhemen altında. set syntaxVim'i kaldırdıktan sonra artık bana sormadı.
piperchester

1
@piperchester bu işe yaradı! Tonlarca öneri denedim ve sadece bu işe yaradı. Teşekkürler :)
Paul Evans

Vim'i güncelliyorum, problem çözüldü. Ama bence insanlar :messageneyin yanlış gittiğini bulmak için yazı yazabilirler .
NanoNova

Evet. Hat vardı set syntax. İle değiştirildi set syntax=onve sorunu düzeltir.
McSuperbX1

7

Anthony'nin cevabı beni doğru yere götürdü ve gvim'i pek çok mesajda durmayacak şekilde yapılandırabildim. Gvimrc dosyama
set shortmess=aoOtIekledim.
Tarafından size getirilen yardım sayfasında açıklanmıştır :help shortmess.
Harfler, görmek istemediğiniz veya hit enter stop'tan kaçınmak için vim'in kesilmesini istediğiniz mesaj sınıfları anlamına gelir .
Bunu daha önce columns=130gvimrc ile geniş bir başlangıç ​​penceresi ayarlayarak başardım, böylece çok az mesaj onu taşacak ve can sıkıcı, yorucu, enter tuşuna basma ihtiyacı gerektirecekti.


6

Zor senaryolarda "ENTER tuşuna basın" olmadan harici komutları bu şekilde çalıştırıyorum. Aksine :silent, komut çıktısını hala görebiliyorum.

Komut satırı

:exe ":!<command>" | redraw

Komut dosyası / işlev

exe ':!<command>' 
redraw

İle eşleme <expr>

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

<expr>Bununla eşleme bir işlevi çağırır

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

Bu herhangi bir şekilde yeniden kullanılabilir mi? F5'e <command>
bastığımda

1
<command>gerçek bir harici komutla değiştirilmesi amaçlanmıştır, örneğinmap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

Kullanabilirsiniz:

call feedkeys(" ")

Örneğin:

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

Bu cevap için teşekkürler! Listelenen diğer cevapların çoğunun aksine, kişisel durumum için hızlı, kolay ve gerçekten etkili.
ab5tract

3

Ekran netliği çalışmadan önce yeniden çizim yapmak da. İşte sahip olduğum şey:

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

Ancak bu, istemi tetiklemez:

exe 'ls'  
redraw  
exe 'b4'

Bu, bir işlevin belirli bir yerinde istemden programlı olarak kurtulmamı sağladığım için bana yardımcı oldu. Sadece bir redrawçözüldü. Diğer çözüm, orijinal mesaj ile komut isteminin kaybolması arasında kullanıcı girişini kabul etmek istediğim için uymadı.
Daniel Andersson

2

Benim durumum (bir otomatik komut) set shortmess+=Fhile yaptım.

: h shortmess
F bir dosyayı düzenlerken dosya bilgilerini vermez, örneğin:silent


1

Benzer bir sorunum var, ancak aynı dizeyi birden çok dosyada değiştirmek için bir argdo çalıştırdığımda örn.

 argdo %s/something/Something/eg|update

Sürekli olarak sayfayı aşağı bastırmam gerekiyordu.

Komut dosyasını çalıştırmadan önce aşağıdaki seçeneği ayarlayabilirsiniz, böylece birçok komut istemi yerine yalnızca son komut istemi olur

:set nomore

Cevap buydu: :set nomorekötü yalamak, hala sonunda. Ayrıca :h help hit-enter@anthony içinde
Tinmarino

0

Bu bana, dizine yazma iznim olmayan bir dizindeki bir dosyayı kaydediyorsam oluyor. Dizinde bir chmod 777 yaptım (zaten dosyaya yazma izinlerim vardı) ve artık "ENTER'a basın" mesajı görünmüyor.


0
  • Anahtar bir harita kullanıyorsanız, komutunuzun sonuna birkaç tane daha ekleyerek hayatınız çok daha kolay olabilir - ancak genellikle 2 kez yeterlidir.
  • Ama vim komut satırından bir komut yürütüyorsanız. O zaman biraz aldatıcı. silentGerçekte komutunuzdan önce anahtar kelime ekleyebilirsiniz . Komut yürütüldükten sonra sizi otomatik olarak vim penceresine geri getirecektir. Ancak redraw, NERD_Tree gibi bazı pencerelerin yeniden çizilmesi gerektiğinden, yine de manuel olarak çalıştırmanız gerekir.

    • Bu durumda, vim yardım belgesindeki talimatları izlemeye çalışın:

      Hit-enter istemlerinin sayısını azaltmak için:

      • 'Cmdheight'ı 2 veya daha yüksek bir değere ayarlayın.
      • "Kısa mesaj" a bayraklar ekleyin.
      • 'Showcmd' ve / veya 'cetveli' sıfırlayın.
    • Bu bağlantı başka bir çıkış yolu sağlar. Bunu vimrc dosyanıza koyun

      komut! -nargs = 1 Sessiz
      \ 'sessiz!' .
      \ | "yeniden çiz!"
      

Ve sonra :Silent commandnormal bir komut gibi kullanabilirsiniz .


0

Benim tarafımdan çözüm, bir komuta zincirinde daha sık kullanmaktısilent .

Özellikle daha önce şunlar .vimrcvardı:

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

Bu şu şekilde değiştirildi:

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

Daha önce, "ENTER'a basın" her zaman görünmüyordu, ancak can sıkıcı bir şekilde sık sık karşımıza çıkıyordu. Ek silents bu sabit. (Öyle görünüyor silentüzerinde gerekli değildir redraw!olarak :cc"Basın ENTER" mesajı neden oldu.)

Bu değişikliğin çıktısını daha fazla göstermeme dezavantajı vardır :cc, bu nedenle hatanın ne olduğunu tahmin etmeniz gerekir. Bir küçük çimdik bu giderir:

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

Bu hata QuickFix listesinin (Output of make) otomatik olarak görünmesini sağlar (ve hata yoksa vim-magic ile kaybolur).

Bilginize:

Bu Meşlemenin motivasyonu, MNormal Modda aşağıdakilere basmaktır :

  • düzenlemeyi kaydedin ( makeher şeyi kullanırken gitzaten kontrol altındayken )
  • çağırmak make
  • ve doğrudan ilk hata veya uyarıya atlayın

Benim Makefiles'lerim genellikle öyle yapılandırılır ki bu sadece bir saniyeden daha kısa sürer.

Biraz ince ayar yaparak, bu Ctür olmayan iş yüklerine de uygulanabilir :

Gelen .vimrceklenti

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

Bu, (ekran hatası) vimiçin aşağıdaki gibi mesajların yorumlanmasına izin verir :cc:

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

( Errors, Warnings, Info, vimsihire dayalı )

Bunun Python komut dosyaları için nasıl kullanılacağına bir örnek . (Üzgünüm, burada kopyası yok, bu farklı bir hikaye.)


0

Hatanız E303'ten kaynaklanıyorsa , .vimrcdosyada geçici bir dizin oluşturmak sorunu çözebilir.

Herhangi bir dosyayı açtıktan sonra şunu yazın ve girin:

:messages

Hatalar varsa soracaktır.

E303 (Hata303) "" {dosyaadı} "için takas dosyası açılamıyor, kurtarma imkansız" görüyorsanız bu, sistemde bir takas dosyasını kurtarmaya yönelik eski bir girişimin (büyük olasılıkla kaybolmuş veya mevcut olmaması) olduğunu gösterebilir .

Bunu düzeltmek için .vimrcdosyaya geçici bir dizin atayın .

.vimrcDosyanın konumunu bulmak için şunu yazın ve girin:

$ locate .vimrc
/root/.vimrc

Dosyayı aç $ vi .vimrc

Bunu dosyanın sonuna ekleyin:

set directory=.,$TEMP

Kaydet ve kapat :wq

Son olarak, profili şununla yeniden yükleyin:

$ . /etc/profile

VI ile herhangi bir dosyayı açmayı deneyin. Sorun çözülecektir.


0

Açık gvimayarladığınız takdirde guioptions+=!Eklendi ( !içinde guioptions), bu çünkü taşımaktadır. Bu seçenek ( !) gvim, harici terminalde (renk ve diğerleri gibi daha fazla özelliği destekleyen ) bazı komutları çalıştırır.

Kullanmayı deneyebilir :set guioptions-=ive bunun sizin için işe yarayıp yaramadığını görebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.