Gary Bernhardt'ın ekran videolarında yaptığı gibi, Vim'de kabuk komutları nasıl çalıştırılır?
Gary Bernhardt'ın Destroy All Software ekran videolarını izliyorum , özellikle Scratch'ten A Derleyici . Orada, Vim'den ayrılmadan kabuk komutlarını çalıştırır. Neredeyse emin o sadece 1. dakikada örneğin normal Vim sözdizimi kullanıyor ediyorum: :!chmod u+x compiler.rb
. Bunu bilgisayarımda yaparsam, pencere kabuk komutunu çalıştıracak ve ardından editöre geri dönmek için Enter tuşuna basmam gerekecek. Sanırım bu Vim için normal bir davranış ve diğer insanlar bunu daha önce sormuştu , ancak hiçbir cevabın Gary'nin yaptığı gibi olduğunu düşünmüyorum.
.vimrcDosyasına, özellikle ekran video kaydı yüklenmeden önceki son sürüme baktım , ancak aradığım davranışı elde etmek için neyi değiştirmiş olabileceğini anlayamadım. İndirdim ama yine de doğru davranışı görmüyorum, bu yüzden belli ki bir şeyleri kaçırıyorum. Eklentilerinden hiçbiri bununla ilgili görünmüyor, bu yüzden çoğunlukla onları görmezden geldim.
Ben kullanır tmux bir çözüm arıyorsanız, ya işler gibi değilim neredeyse eminim :split
, :term
, :below terminal
, veya :silent
. Vim dışında bir şey kullanan bir cevap da aramıyorum, Gary'nin sadece Vim ve birkaç eklenti kullandığına inanıyorum.
Gary'nin özellikle Vim hakkında konuştuğu ekran videolarını izledim, ancak bu soruyu ele almadı (ya da ben anlayamadım), bu yüzden birisi :! <shell command>
metin düzenleyiciden ayrılmadan nasıl kullanılacağını anladıysa, gerçekten çok memnun olurum. Bunu halletmeme yardım edebilirsin. Daha önce bahsettiğim seçenekleri hem Mac hem de Linux'ta test ettim ama hiçbir şey istediğim gibi çalışmadı ve her iki platformda da çalışan bir çözümden memnun olurum.
Yanıtlar
Video hızlı bir şekilde geçiyor, ancak onu duraklattım ve şunu yazdığını gördüm:
:!chmod u+x %
Daha sonra bu çıktıyı üretir:
:!chmod u+x compiler.rb
[No write since last change]
"compiler.rb" 5L, 42C
Press ENTER or type command to continue
Yani, aslında, Vim yapar komut tamamlandıktan sonra "ENTER tuşuna basın" istemini ama (belki de zaten bekliyordum? Ya belki o aşağıdaki komutları basarak? Başladı) o kadar çabuk bastırdı görünüyor mesajdı görünüyor atlandı.
Burada ilgili iki ayar vardır, ilki komutu çalıştırırken alternatif ekrandan geçişi önlemek için ve ikincisi, harici komutla değiştirildiğinde dosyayı otomatik olarak yeniden yüklemek için (yalnızca izinler değişse bile).
GitHub dotfiles deposuna baktığımızda, aslında vimrc'de her iki ayarı da 2017-06-29 itibariyle görebiliriz (ki bu, o videonun yayınlandığı zamandır).
- Vim'i alternatif ekrandan geçiş yapmayacak şekilde yapılandırma şu kod parçacığı ile yapılandırılır :
" Prevent Vim from clobbering the scrollback buffer. See
" http://www.shallowsky.com/linux/noaltscreen.html
set t_ti= t_te=
- Bu ayarla harici bir işlem yapıldıktan sonra dosyayı otomatik olarak yeniden yükleyecek şekilde Vim'i yapılandırma :
set autoread
Bu iki ayar açıkken, mesajı almamam dışında, neredeyse tamamen aynı etkiyi yeniden üretebilirim [No write since last change]
. Nereden geldiğinden tam olarak emin değilim, çünkü anlayabildiğim kadarıyla dosyayı chmod
komuttan hemen önce yazmıştı . (Kanıt olarak, durum satırında [+]
dosyanın adının yanında değiştirilmiş bir arabelleğe işaret eden bir işaret gösterilmez.)
Belki de onun vimrc'inden başka bir şey ... Teoride, onu GitHub'dan alıp aynısını denemek mümkün olmalı. Görünüşe göre video Vim 7.4 kullanıyor, bu yüzden onun da bir parçası olabilir.
Hala GitHub dotfiles deposuna bakarken, Vim'in geri kaydırma arabelleğini bozmasına izin vermeye devam etmiş gibi görünüyor, bu yüzden bu kısımla ilgili fikrini değiştirdi.
Bu kısım sizi hala ilgilendiriyorsa, etrafında bazı kontrollerle bu davranışı uygulayan eklenti vim-altscreen'e bir göz atabilirsiniz . Ayrıca, özellikle @ user938271'in istisnai yanıtı olmak üzere, "Alternatif ekran arasındaki :!{cmd}ve :w !{cmd}bununla ilgili fark" sorusuyla ilgili tartışmaya bakın .