Vim komutlarının sonucunu kabuğa gönderme


11

Diyelim ki shell ( bash)' deyim ve :scriptnamesverecek çıktıyı görmek istiyorum , ama vim başlatmak istemiyorum ya da belki başka bir dosyaya yankılamak istiyorum.

Bu yüzden idam ediyorum

vim +scriptnames

Bu bana tüm komut dosyalarını gösterir, ancak bunu kabuğun stdout'una nasıl yansıtırım?

Yanıtlar:


10

Bu olur, çünkü genellikle Vim alternatif ekrana geçer ve orada çalışır. Çıktıktan sonra Vim geri döner ve bu nedenle Vim oturumunuzdan geriye hiçbir şey görmezsiniz, ancak Vim'i başlatmadan önce bile çalıştırılan komutun sonucu olur.

Bu özellik :h xterm-screens (link)

Temelde bunu istemiyorsunuz ve bu nedenle devre dışı bırakmak istiyorsunuz. Bunu, bunu :set t_ti= t_te=gerçekleştiren terminal kodlarını boş olarak ayarlayarak yapabilirsiniz.

Hepsini bir araya getirirsek, Vim'i şu şekilde başlatmak istersiniz:

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'

Seçimi sıfırlıyoruz 'more', böylece hit-enter-istemini görmüyorsunuz.


1
Bu HARİKA, çok teşekkür ederim! Aslında bunun mümkün olduğundan şüphelendim.
hgiesel

Bu, VimL'yi stdout'a (özellikle mazoşist için) yazmasına izin vererek tam teşekküllü bir sistem komut dosyası dili olarak kullanmayı mümkün kılıyor mu?
shadowtalker

1
Bununla ilgili bir sorun, terminali kaydıramıyorum. (Metin terminal yüksekliğimden daha uzunsa üst kısmı göremiyorum) Vim'i açar ve sonra çıkarsam da metin kaybolur.
FDinoff

@FDinoff Çağrı cihazları lessbunun için var. Sadece daha az içine boru vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less. Düzen belki ilk başta vidalanmış (terminalimde), ancak <CL> tuşuna bastıktan sonra her şey güzel ve züppe.
hgiesel

Çalışırken hiçbir çıkış görmüyorum vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!', sadece bir "hızlı flaş" var, kod 0 ile komut çıkışı, çıkış yok. Bir şey mi kaçırıyorum?
TrungDQ

3

Ayrıca :redirvim komutlarının sonuçlarını bir dosyaya yönlendirmek için command komutunu kullanabiliriz

Örneğin,

vim -c "redir! > vimout | scriptnames | redir END | q"

Bu, çıktısını scriptnames"vimout" dosyasına yönlendirir


1

Christian Brabandt tarafından verilen cevap için teşekkür ederiz ama daha iyi bir cevap böyle bir başka -c komutunu kullanarak quit komutunu ayırmak olacağını düşünüyorum:

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames' -c 'q!' 

Bu yöntemi kullanmak, birkaç farklı komutu bir araya getirebileceğiniz ve son 'q!' vimden çıkmak için.


0

Vim'in manuel olarak başlattığınız gibi tam olarak yüklenmesi gereken durumlarda, bu işe yarar:

vim -c "autocmd! CursorHold * <commands to run>"

Örneğin, çıktısını :mapkabuktan bir dosyaya yeniden yönlendirmek istedim , ancak vim-havayolu şirketinin yalnızca sekmesini görüntüledikten sonra oluşturduğu eşlemeyi yakalamak istedim (üstteki tüm buffername'leri açık gösteren satır). bunu eşzamansız olarak, -cbir dosyaya bir yönlendirme çalıştırmak , eşlemeler yapması için zaman vermiyordu. Daha iyi bir yol olabilir, ancak bu benim için işe yarar, özellikle de etkinliğin ne kadar süre başlayacağını etkileyen (0.1 saniye) updatetimeayarladığımdan beri . Varsayılan olarak, vim bunu 4 saniyeye ayarlar.100CursorHold

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
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.