Yanıtlar:
Evet, örneğin, yapmak istiyorsanız ls
, şunu deneyin:
:!ls
Bir kabuk üretmek için,
:shell
:w !sudo tee %
nano
Vi'yi ctrl+z
uyumaya meyilliyim , kabuğumda ihtiyacım olanı koştum, sonra fg
vi'yi sürdürmek için. Tam olarak sorunuza bir cevap değil ama çalışmanın çok hızlı bir yolunu buldum.
Arka planda açık bir vi olduğunuzu unutursanız (bu, meşgul olduğunuzda gerçekleşebilir), kabuk kullanarak oturumu ctrl+d
kapatmaya çalıştığınızda, arka planda çalışan işleriniz olduğu konusunda uyarılırsınız ve bunları kapatabilirsiniz, veya oturumu kapatmak için tekrar ctrl + d tuşlarına basın. Ayrıca, aynı dosyayı iki kez yeniden açmaya çalışırsanız, kurtarma uyarısı alırsınız, böylece a
iptal etmek için tuşuna basıp vi'ye geri dönmek için fg komutunu çalıştırabilirsiniz.
"Stdout'u al" dediğinizden, yapabileceğinizi unutmayın
:r! command
ve komutun çıktısı dosyaya eklenecektir, veya
:<range>!command
aralık içerisindeki içeriğin [eg :1,$!wc
] komutuyla filtrelenmesini sağlamak
:%!command
oldukça kullanışlı görünüyor
:.,+20 !sort
]
Tercih ettiğim deyim:
!!command
hangi için steno
:.!command
Geçerli satırı komuttan geçiren ve çıktıyı dosyaya ekleyen. Benim için en yaygın örnek, vi komutuyla komutu düzenlemek ve çalıştırmak:
!!sh
Veya
!<motion>command
gibi (örneğin)
!apsh
Geçerli paragrafın tamamını kabuk boyunca çalıştırmak için.
!}
size paragrafın başında konumlandırılmış lazım, deneyin !ap
. (Bunun her vi ya da sadece
İki nokta ve ünlem işareti kullanarak kabuk yolu ve kabuk komut dosyalarındaki herhangi bir komutu çalıştırabilir, komutun vi / vim programını çalıştıran ve ortamını kullanan kullanıcının altında çalıştığını unutmayın.
:!<command>
Vi, çalıştırıldığında geçerli olan ortamı kullandığından, ana komuttakiyle aynı yolu kullanır. Bazı mermilerin yoldaki programların bir önbelleğini koruduğunu ve vi'nin bu önbellekle çalışmayabileceğini (kullandığı kabuğa bağlı olarak ve sürümüne bağlı olarak çalışmayabileceğini) unutmayın, bu nedenle yanlış ikili dosyayı çalıştırmanız gerekebilir. Aynı ada sahip birden fazla ikili dosya.
Komutun çıktısını, örneğin :!ls -lh
komut modunda yazarak görebilirsiniz .
Komutun çıktısını, düzenlediğiniz dosyaya eklemek isterseniz, sadece bir tane ekleyin r
. Örneğin :r!which perl
,.
Bu benim .vimrc içinde var. Stack Overflow'ta bir süre önce bulundu:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Aynı anda vi'yi diğerinde de çalıştırabilen iki terminal komut satırı penceresi açarak ve Linux'ta kolayca halledebilirdim.