Bash'ta komut çıkışını vim'e nasıl yönlendiririm?

68

Bir bash komutunun çıktısını yeni bir dosyaya yönlendirmeye çalışıyorum.

Boruyu aşağıdaki gibi deneyeceğim:

ls -la | vim

Bash bana hataları gösterir:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Vim'i açabileceğimi biliyorum ve sonra kullanıyorum:

:r !ls -la

Ancak, bash'ın kendisinde bunu yapmanın bir yolu var, böylece Vim açıldı ve çıktı otomatik olarak oraya yapıştırıldı mı?

    
sordu faizal 13.08.2014 18:13

6 cevap

110

Süreç değiştirmeyi kullanabilirsiniz. Bu, aynı zamanda STDIN dizininden oku):

vim <(ls -la)

Veya vim 's işlevinden okumak için STDIN ' s fonksiyonunu kullanın:

ls -la | vim -
    
verilen cevap chaos 13.08.2014 18:58
32

Gerçekten kendine yakınız. Sadece bir karakteri kaçırdın.

ls -la | vim -
    
verilen cevap Cris Holdorph 13.08.2014 18:18
15

İşte başka bir yaklaşım, umarım yeni bir şey öğretmeyi umarım.

:r !ls -la komutunun vim içinde çalıştığını biliyorsanız, vim'i açmak ve en kısa sürede doğrudan bash komutunu çalıştırmak için aşağıdakileri yapabilirsiniz:

vim -c ':r! ls -la'

Bu vim 'yı açıp :r! ls -la komutunu çalıştırmanın eşdeğeridir. Bu, vim seçeneğinden sonra komutun geldiği -c komutuyla çalışmalıdır.

    
verilen cevap Alaa Ali 13.08.2014 19:11
11

Vim'in stdin'i açmasını söyleyebilirsin:

ls -la | vim -
    
verilen cevap iffy 13.08.2014 18:20
1

Hedefiniz çıktıyı bir metin dosyasına almaksa, vim'i çağırmanız gerekmez. Bash bunu tek başına yapabilir

ls -la > outputfile.txt
    
verilen cevap Jake Stewart 24.03.2017 16:44
0
setlocal buftype=nofile değerini değiştirmek için bir takma ad oluşturmak isterseniz

less iyi bir seçenek:

seq 100 | vim +':setlocal buftype=nofile' -

Şimdi yazmanız gerekmiyor! bırakmak için.

Başka bir seçenek:

seq 100 | vim +'nnoremap q :quit!' -

Böylece, yalnızca q<enter> ile çıkabilirsiniz.

    

Etiketlerdeki diğer soruları oku