Bagaimana cara menonaktifkan prompt "Tekan ENTER atau ketik perintah untuk melanjutkan" di Vim?

102

Apakah ada cara untuk menonaktifkan prompt "Tekan ENTER atau ketik perintah untuk melanjutkan" yang muncul setelah menjalankan perintah eksternal?

EDIT: Menemukan solusi: Tambahkan tambahan <CR>ke pintasan di .lvimrc saya.

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

Ada ide yang lebih baik?

Johan Kotlinski
sumber
9
Pada Windows 7, Anda akan sering mendapatkan prompt ini karena kesalahan "tidak dapat membuka file swap" yang telah dicetak tetapi Anda tidak melihatnya, yang menyebabkan prompt tersebut. Solusinya adalah dengan memasukkan set dir=$TEMPvimrc Anda. Ini memberitahu vim untuk menggunakan folder temp yang benar untuk file temponya. Ini pada gilirannya memperbaiki kesalahan dan menghapus perintah "tekan enter".
Lucas

Jawaban:

76

Saya tidak yakin bagaimana melakukannya secara global untuk satu perintah:

:silent !<command>

Pastikan untuk memasukkan spasi setelahnya silent

Tabitha
sumber
3
Sayangnya tidak terlalu membantu saya, itu mengacaukan layar dan saya harus menekan Ctrl-L ... yang bahkan lebih mengganggu daripada menekan spasi.
Johan Kotlinski
1
Berhasil untuk skrip grep saya!
Mikko Rantanen
5
Sejalan dengan pemberi komentar di bawah ini (yang menyarankan untuk menambahkan <CR> ekstra di akhir perintah), saat menggunakan silent, Anda dapat menambahkan <Cl> ekstra, sehingga Anda tidak perlu menekannya secara manual. Bekerja dengan layar dengan baik, lalu.
Victor Farazdagi
4
cukup gunakan: silent! command, lalu: redraw! setelah - saya pikir itu tidak melakukan ini secara otomatis karena skrip yang mungkin melakukan hal-hal ke layar yang Anda inginkan, misalnya, jam atau hal pemantauan status lainnya ... hanya tebakan
osirisgothra
2
Ya .. itu mengacaukan layar untuk saya juga. yang :redraw!pilihan memecahkan itu. Ganda <cr>mungkin serupa. dan tidak terlalu rumit
alpha_989
57

Menemukan satu solusi: Tambahkan ekstra <CR> ke perintah peta.

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
Johan Kotlinski
sumber
2
Tidak akan pernah memikirkan ini. Benar-benar brilian!
Kohányi Róbert
1
Ya, menambahkan <CR> ekstra ke perintah saya juga melakukan triknya.
Daniel Miessler
2
Sangat sederhana. Ini sangat efektif!
Wayne Werner
28
:help hit-enter
anthony
sumber
1
Saya ingin tahu mengapa seseorang memilih jawaban ini, karena :help hit-entermemberikan beberapa informasi latar belakang yang cukup berguna pada prompt "Tekan ENTER ...". Mau menjelaskan?
cjs
38
Informasi apa dari ': help hit-enter' menjawab pertanyaan? Saya tidak dapat menemukannya.
Johan Kotlinski
1
Mungkin Anda bisa mendapatkan prompt "Tekan ENTER" dari perintah tulis semua sebelum Anda keluar. Informasi di bawah <code> shortmess </code> yang ditautkan <code> tekan-masukkan </code> adalah valid dalam kasus itu. Namun, prompt yang Anda dapatkan adalah dari mengupayakan, jadi saran Wergan adalah yang benar. Seperti disebutkan dalam <code>: help: silent </code> "Saat menggunakan ini untuk perintah eksternal, ini dapat menyebabkan layar menjadi kacau. Gunakan | CTRL-L | untuk membersihkannya". Anda dapat menambahkan: gambar ulang atau Ctrl-L ke perintah Anda untuk memperbaikinya. Atau lakukan saja dua pengembalian yang sudah Anda lakukan.
Penyusun Mencolok
Bagi saya, ini tentang set hl( :highlight) saya salah gunakan sebagai jalan pintas untuk hlsearchsiapa jalan pintas sebenarnya hls. Satu shal yang penting :)
1
@Johanotlinski theset nomore
Tinmarino
19

Setel cmdheightke 2, di vimrc ( :e $MYVIMRC) saya:

:set cmdheight=2

Info selengkapnya di sini .

TankorSmash
sumber
1
Ini sempurna untuk kueri penelusuran yang sangat panjang
Keith Smiley
18

Beginilah cara saya menangani masalah yang menjalankan program eksternal melalui silent mengacaukan layar dalam mode teks vim (menurut pengalaman saya, gvim tidak mengalami masalah ini):

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

Gunakan ini sebagai ganti perintah diam biasa:

:Silent top
emil.p.stanchev
sumber
13

Ini mungkin kesalahan sintaks dalam file vimrc

8.8.8.8
sumber
5
Ini. Saya telah menggunakan set numberdan kemudian set syntaxtepat di bawah di file .vimrc saya. Setelah saya menghapus set syntaxVim tidak lagi meminta saya.
piperchester
1
@piperchester ini berhasil! Mencoba berton-ton saran dan hanya ini yang berhasil. Terima kasih :)
Paul Evans
Saya memperbarui vim, masalah terpecahkan. Tapi saya pikir orang bisa mengetik :messageuntuk mencari tahu apa yang salah.
NanoNova
Ya. Saya punya garis set syntax. Menggantinya dengan set syntax=ondan itu memperbaiki masalah.
McSuperbX1
7

Jawaban oleh anthony membawa saya ke tempat yang tepat dan saya dapat mengkonfigurasi gvim untuk tidak berhenti di banyak pesan.
Saya menambahkan set shortmess=aoOtIke file gvimrc saya.
Ini dijelaskan di halaman bantuan yang dipersembahkan oleh :help shortmess.
Huruf-huruf tersebut berarti kelas pesan yang tidak ingin Anda lihat, atau ingin vim terpotong untuk menghindari tekan enter .
Saya mengelola ini sebelumnya dengan mengatur jendela awal yang lebar dengan columns=130di gvimrc sehingga beberapa pesan akan meluapinya dan memerlukan kebutuhan yang mengganggu, melelahkan, untuk menekan enter.

Juan Lanus
sumber
6

Ini adalah bagaimana saya menjalankan perintah eksternal dalam skenario yang rumit tanpa "Tekan ENTER". Tidak seperti :silent, saya masih bisa melihat keluaran perintah.

Garis komando

:exe ":!<command>" | redraw

Skrip / fungsi

exe ':!<command>' 
redraw

Pemetaan dengan <expr>

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

Pemetaan dengan <expr>itu memanggil suatu fungsi

map <expr> <F5> MyFoo()
fu! MyFoo()
    return ":exe ':!<command>' | redraw\<CR>"
endf
svlasov.dll
sumber
Apakah ini dapat digunakan kembali dengan cara apa pun? Ketika saya menekan F5 itu hanya memanggil sebuah string<command>
ashrasmun
1
<command>dimaksudkan untuk diganti dengan perintah eksternal yang sebenarnya, misalnyamap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov
4

Kamu bisa memakai:

call feedkeys(" ")

Sebagai contoh:

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
sumber
Terima kasih atas jawaban ini! Cepat dan mudah dan benar-benar efektif untuk kasus pribadi saya tidak seperti banyak jawaban lain yang terdaftar.
ab5tract
3

Menempatkan gambar ulang sebelum layar bersih juga berfungsi. Inilah yang saya miliki:

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

Tetapi ini tidak akan memicu prompt:

exe 'ls'  
redraw  
exe 'b4'
Liang Li
sumber
Ini membantu saya karena saya hanya secara terprogram menyingkirkan prompt di tempat tertentu dalam suatu fungsi. Hanya mengeluarkan redrawsolved saja. Solusi lain tidak cocok, karena saya ingin menerima input pengguna di antara pesan asli dan hilangnya prompt.
Daniel Andersson
1

Saya memiliki masalah serupa, tetapi ketika saya menjalankan argdo untuk mengganti string yang sama di beberapa file misalnya,

 argdo %s/something/Something/eg|update

Saya terus-menerus harus menekan halaman ke bawah.

Anda dapat menyetel opsi berikut sebelum menjalankan skrip sehingga hanya ada prompt terakhir, bukan banyak prompt

:set nomore
Matt Vukomanovic
sumber
Itulah jawabannya :set nomore:, jilatan buruk itu masih di akhir. Ini juga di :h help hit-enter@anthony
Tinmarino
1

Saya kasus saya (perintah otomatis) set shortmess+=Fberhasil.

: h shortmess
F tidak memberikan info file saat mengedit file, seperti:silent

Biggybi
sumber
0

Ini terjadi pada saya jika saya menyimpan file yang ada di direktori di mana saya tidak memiliki izin menulis ke direktori. Saya melakukan chmod 777 pada direktori (saya sudah memiliki izin menulis pada file itu sendiri) dan pesan "Tekan ENTER" tidak lagi muncul.

jayemar
sumber
0
  • Jika Anda menggunakan peta kunci maka hidup Anda bisa jauh lebih mudah dengan menambahkan beberapa lagi di akhir perintah Anda - tetapi biasanya 2 kali sudah cukup.
  • Tetapi jika Anda menjalankan perintah dari baris perintah vim. Maka itu agak rumit. Anda dapat menambahkan kata kunci silentsebelum perintah Anda sebenarnya. Ini akan membawa Anda kembali ke jendela vim secara otomatis setelah perintah dijalankan. Tetapi Anda masih perlu mengeksekusi secara manual redrawkarena beberapa jendela seperti NERD_Tree perlu digambar ulang.

    • Untuk kasus ini, coba ikuti petunjuk dari vim help doc:

      Untuk mengurangi jumlah perintah tekan-masukkan:

      • Setel 'cmdheight' ke 2 atau lebih tinggi.
      • Tambahkan bendera ke 'shortmess'.
      • Setel ulang 'showcmd' dan / atau 'penggaris'.
    • Tautan ini memberikan jalan keluar lain. Masukkan ini ke file vimrc Anda

      perintah! -nargs = 1 Silent
      \ laksanakan 'diam!' .
      \ | jalankan 'gambar ulang!'
      

Dan kemudian Anda dapat menggunakan :Silent commandseperti perintah biasa.

huangzonghao
sumber
0

Di sisi saya, solusinya adalah menggunakan silentlebih sering dalam rantai perintah .

Khususnya sebelumnya, .vimrcmemiliki:

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

Ini diubah menjadi:

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

Sebelumnya, "Press ENTER" tidak selalu muncul, tetapi sering kali mengganggu. Penambahan silentmemperbaiki ini. (Sepertinya silenttidak diperlukan redraw!karena :ccpesan "Tekan ENTER".)

Perubahan ini memiliki kekurangan yaitu tidak lagi menampilkan output :cc, jadi Anda harus menebak apa kesalahannya. Sebuah tweak perbaikan ini:

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

Ini membuat daftar QuickFix kesalahan (Output dari make) secara otomatis muncul (dan, dengan vim-magic, menghilang jika tidak ada kesalahan).

FYI:

Motivasi dari M-mapping ini adalah dengan menekan Mdalam Mode-Normal untuk:

  • simpan edit (saat menggunakan makesemuanya di bawah git-kontrol)
  • memohon make
  • dan langsung beralih ke kesalahan atau peringatan pertama

MakefileS saya biasanya dibangun sedemikian rupa, sehingga ini hanya membutuhkan sepersekian detik.

Dengan sedikit penyesuaian, ini juga dapat diterapkan ke Cbeban kerja non- tipe:

Di .vimrctambah

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

Ini memungkinkan vimuntuk menafsirkan pesan seperti berikut untuk :cc(kesalahan tampilan):

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

( Ekesalahan, arnings, Wnfo I, berdasarkan vimsihir)

Contoh bagaimana menggunakan ini untuk skrip Python . (Maaf, tidak ada salinan di sini, ini cerita yang berbeda.)

Tino
sumber
0

Jika kesalahan Anda disebabkan oleh E303, membuat direktori sementara di .vimrcfile tersebut dapat memperbaikinya.

Setelah membuka file apa pun, tulis dan masukkan:

:messages

Jika ada kesalahan maka akan diminta.

Jika Anda melihat E303 (Error303) "Tidak dapat membuka file swap untuk" {filename} ", pemulihan tidak mungkin", ini mungkin menunjukkan bahwa ada upaya lama untuk memulihkan file swap (kemungkinan besar hilang atau tidak ada) di sistem .

Untuk memperbaikinya, tetapkan direktori sementara di .vimrcfile.

Untuk menemukan lokasi .vimrcfile, ketik dan masukkan ini:

$ locate .vimrc
/root/.vimrc

Buka file $ vi .vimrc

Tambahkan ini ke akhir file:

set directory=.,$TEMP

Simpan dan tutup dengan :wq

Terakhir, muat ulang profil dengan:

$ . /etc/profile

Coba buka file apa pun dengan VI. Masalahnya harus diperbaiki.

Rafael Vidal
sumber
0

Aktif gvim, jika Anda telah menyetel guioptions+=!(Ditambahkan !dalam guioptions), ini karena itu. Opsi ini ( !) membuat gvimmenjalankan beberapa perintah pada terminal eksternal (yang mendukung lebih banyak fitur, seperti warna dan banyak lainnya).

Anda dapat mencobanya menggunakan :set guioptions-=idan melihat apakah ini berhasil untuk Anda.

Nilesh Kevlani
sumber