2013-07-03 31 views
6

Vim komut dosyasında harici bir komut yürütmek istiyorum ancak bunu nasıl yapamıyorum. Örneğin, chmod komutunu kullanarak bir dosya iznini değiştirmem gerekiyor (Lütfen uygulamanın komutu çalıştırmak için yeterli izne sahip olduğunu varsayın)Vim komut dosyasında harici komut nasıl çalıştırılır?

Bunu başarmanın bir yolu var mı?

+1

Muhtemel kopyası [Vimscript aracılığıyla kabuk komutu nasıl çalıştırılır?] (Http://stackoverflow.com/questions/10766033/how-to-run-a-shell-command-through-vimscript) –

cevap

7

Kullanıcıların çıkışı görmesini istiyorsanız (veya komutla etkileşimde) :! doğru komuttur. Sessiz yürütme için (chmod ile istendiği gibi), system() kullanılması tercih edilir. Özellikle Windows'ta bu, el ile kapatılması gereken bir komut isteminin açılır penceresini önler.

:call system('chmod +x ' . shellescape(fname)) 
+0

Güzel bir çözüm. Çağrı sistemi() 'nin çıktısını alıp kullanıcıya manuel olarak göstermenin bir yolu var mı? Örneğin Vim'de echo() komutuyla. –

+2

Çıktıyı döndürür ve çıkış durumu 'v: shell_error' içinde. ': yardım sistemi()' senin arkadaşın :-) –

6

:! vim komutunu kullanabilirsiniz. Örneğin, vim içinden echo 'Hello, World!' için vim

:! echo 'Hello, World\!' 

tip

(ve aynı zamanda da, bir vim komut dosyası içinde). Veya, bir vim senaryosunda, sadece

Önceden gerek duyduğunuz nedeni! çünkü vim özel işlem yapıyor! argümanında bir karakter! Komut. Hiçbiri içermeyen bir komut çalıştırıyorsanız! Karakter, o zaman kaçmaya gerek yok. Bu konuda daha derinlemesine okumak istiyorsanız @FDinoff söylediği gibi

, sen vim

:help :! 

yazabilirsiniz.

+0

Ayrıca emin olun bakmak için:: h:! ' – FDinoff

2

Tercih ettiğim yolu o zaman kabuk istediğimizi yapabiliriz, Ctrl-z itmek veya vim süreci askıya :sus çalıştırmaktır.

İşiniz bittiğinde, vim oturumunuzu devam ettirmek için fg (önalan) çalıştırın.

Daha fazla bilgi here bulunabilir.

İlgili konular