Shell komutunun (!) Boru çıkışını Vim'deki yeni bir tampon belleğe aktarması


Yanıtlar:


26

Bir kabuk komutunun çıktısını yeni bir arabellek oluşturan bir komuta bağlayamazsınız, ancak yeni bir arabellek oluşturabilir ve bir kabuk komutunun çıktısını Vim'in komut satırında bir girişle o arabelleğe okuyabilirsiniz. Örneğinizin çalışan bir sürümü

:tabnew | r !echo <c-r>=bufname("#")<cr>

Bu durumda boru sembolünün, kabuğun borusu değil Vim ex komutları arasında bir ayırıcı olduğunu unutmayın. Ayrıca bakınız

:help :tabnew
:help :r!
:help :bar

Neredeyse tam ihtiyacım olan şeydi, tam tersi şekilde geçerli tamponun dosya adına erişebilmek için. Not: İstenen nihai sonucu açık bir şekilde netleştirmek için soruyu güncelledi.
Richie Marquez

@Richard Marquez: Bu cevabı güncelledim. Yeni sekme şimdi "eski" bir dosya adıyla açılıyor, bu nedenle aşağıdakileri arayabilirsiniz
:!

Fakat :r!echotamponu değiştirmeden olmaz .
Luc Hermitte

@ Luc Hermitte: tamam, geri alıyorum.
akira

2
@garyjohn, akira: yardımın için teşekkürler. "<cr> = ..." bölümü Vim'e hatalar attı, ancak ": tabnew | r! Echo #" ile çalışmasını sağladım.
Richie Marquez,

14

İşte yaptığım şey. Yukarıdaki cevaplarda yorumlarda bulunulmuştur.

:new | r ! <cmd>
:new | r ! <cmd> #   (# is replaced with filename)

Örnek 1 : içindeki tüm metin dosyalarını bul/tmp

:new | r ! find /tmp -name '*.txt'

Örnek 2 : foo.txt dosyasını düzenliyorsunuz ls -la foo.txtve çıktıyı çalıştırıp tampon belleğe almak istiyorsunuz :

:new | r ! ls -la #

Düzenlemekte #olduğunuz orijinal ara belleğin dosya adı ile değiştirilir. Bu özellikle geçici kaynak kontrol komutları için kullanışlıdır;

:new | r ! hg annotate -un #

:newYatay bölme oluşturur, :vnewbunun yerine dikey bölme istiyorsanız ve :tabnewyeni bir sekme için kullanın .


Bu soruya burada cevap verebilir misiniz ? Geçerli tamponu bir %sonraki tamponla birlikte kullanmayı denemekle ilgilidir, ancak E499.
hhh


2

Sonucu gerçekten yeni bir tamponda saklamanız gerekiyorsa, ancak eski geçerli tampondan bilgi almanız gerekiyorsa, aşağıdakilerden birini kullanabilirsiniz system():

:let res = system('echo '.expand('%'))
:tabnew
:put=res

veya geçerli tampon adını daha sonra kullanmak için saklayın :

:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>

diğer cevabı görün, ismi bir değişkene kaydetmeden yapabilirsiniz. ama yine de iyi cevap.
akira

Aslında. '#'
Nin
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.