Toplu işleme için EX modu ne işe yarar?


20

Öğretici Ör mod toplu işlem için bahseder. Benim için bir araçtan ziyade bir sıkıntı olduğundan, bazı pratik örnekler görmek istiyorum. Kim kullanıyor? Neden?

Toplu işleme için EX modu ne işe yarar?


@Masi: taşınan yayınların taşıma işleminden sonra SU hesabınızla ilişkilendirilmesi için hesaplarınızı bağlayın.
Greg Hewgill

Yanıtlar:


4

Ex modunda (aynı zamanda bilinen ex) Vim aşağıdaki durumlarda kullanışlıdır:

  • Etkileşimli olmayan (komut dosyasının bir parçası olarak) dosyaları (birden çok) düzenlemeniz gerekir.
  • İşlemlerinizden sonra bağlantınız çok yavaş veya ekran güncellenmiyor.
  • Eşlemeler ve kısaltmalar devre dışı bırakıldı.
  • Gibi ortak tuşlar düzgün çalışıyor Escapeveya Controldüzgün çalışmıyor.

Olmayan etkileşimli dosyaları olan düzenleme en yaygın kullanımı ve benzeri olarak bir şekilde kullanan insanlar sedve awkancak onlar daha odaklı akışı vardır ediyoruz - onlar sadece ederken başından sonuna ileriye dosyayı okumak vimodaklı tampon - eğer ileri ve geri hareket edebilir İstediğiniz dosyada. İkincisi vim'in düzenli ifadeleri awk ve sed'in ifadelerinden daha güçlüdür (birden fazla satırla çalışmak için tasarlanmamıştır) - örneğin vim birkaç satır üzerinden eşleşebilir ve sıfır eşleşmeyi destekler.

Ex aynı zamanda bir editördür (vi'nin doğrudan selefi) ve Vim - Ex Modunda öykünür ex(yine de aynı kodu çalıştırırlar), bu yüzden exvi içinden veya tam tersi komut moduna ulaşmak mümkündür. vim -eVi uyumlu Ex-moddan ( vim -E) daha gelişmiş komutlara izin veren Ex modu ( ) ve geliştirilmiş Ex modu vardır . Bakınız: Ex modu ile geliştirilmiş Ex modu arasındaki fark nedir?

Ex, editör ailesinin köküdür: edit, ex ve vi. Ex, en önemli uzantı bir ekran düzenleme olanağı olmak üzere süper bir edidir. ex (1)


örnek 1

İşte değişen basit bir örnek 127için 128sizin bir hostsdosya ve çıktıyı yazdırın:

ex -s +%s/127/128/g +%p +q! /etc/hosts

şuna eşittir:

sed s/127/128/g /etc/hosts

Daha gelişmiş bir çözüm için vim komutlarına sahip bir dosyaya sahip olabilir ve I / O yeniden yönlendirmesine daha klasik bir yaklaşımla kullanabilirsiniz:

echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts

ÖRNEK 2

Bazı görevleri gerçekleştirmek için vim eklentilerini de kullanabilirsiniz.

Örneğin, aşağıdaki tek satır standart kaynaklardan birini kullanarak kaynak kod dosyanızı html'ye dönüştürür:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

Yazdırmak veya web sitenizde yayınlamak için hazır olan kodunuzdan (desteklenen herhangi bir dilde yazılmış) html dosyası (sözdizimi vurgulamalı) oluşturur.


ÖRNEK 3

Veya bazı gerçek canlı örneği dan RPM şartname:

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

Örnek 4

Aşağıdaki komut dosyası, Örnek sitenin html'sini indirerek ve gövdesini otomatik olarak oluşturulan 20x20 tablosuyla rastgele sayılarla değiştirerek yeni bir html dosyası oluşturur:

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

Kullanımı:

ex -s table.html < table.vim

Bu, kıvrılma yüklü * nix benzeri sistemlerde çalışır. -VKomut dosyasını çalışırken görmek için ekleyin .

Daha fazla örnek:


Ayrıca bakınız:


22

Ex-Mode çoğunlukla aynı işlemi birkaç dosyada gerçekleştirmek içindir.

Aşağıdakilere sahip 25 .html dosyanız olduğunu varsayalım:

<a href="/superuser//home.html"> ...

Bunların her birini açmak yerine, Ex-mode'u kullanarak hepsini değiştirebilirsiniz index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF

7
Tam ve daha kısa bir uygulama olurdu for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
intuited

6

Kalıcı geri alma desteği olarak, eski mod ve diğer vim toplu işleme biçimleri olan son 7.3'ten itibaren geri alma geçmişini engellemeyeceği için diğer vim olmayan yöntemlerden daha üstündür.

Ekleme: 'sürekli geri alma' etkinleştirilirse, geri alma geçmişindeki bir dosyadaki tüm değişiklikleri (bir sınıra kadar) vim düzenleme oturumlarında tutar. Dosya harici bir program tarafından düzenlenmişse, vim, değiştirildiği sağlama toplamı ile algılandığında geri alma geçmişini sıfırlayacaktır. vim -E, bir dosyayı toplu olarak düzenlemenize izin verir ve düzenleme geri alma geçmişinde olur.


2
Bu oldukça uzak görünüyor, ama kesinlikle makul ve akıllı! +1
Tarrasch

1

Bu, toplu işleme hakkındaki sorunuza cevap vermez, ancak Ex-mode'un ne olduğunu açıklamanın başka bir yoludur. Nasıl bastığını biliyorsun:komut satırı moduna girip komutları girmek için? Peki Ex-modu aynı komutları girmenize izin verir, ancak Vim bir komut girdikten sonra Ex modundan çıkmaz, Ex modunda kalır ve başka bir komut girebilirsiniz. Yani bir çeşit REPL (okuma, değerlendirme, yazdırma, döngü) gibi, ama baskı olmadan (yani sadece bir REL ...). Neden daha sonra bu tür bir REL isteyebileceğine geri döneceğim. Bu yüzden Ex modu denir, komut satırı modunun yaptığı şey olan Ex komutlarını girmenize izin verir, Ex komutunu girmenizi sağlar. Bunu açıklamanın bir başka yolu da, Vimscript / VimL kodunu girmenize ve hemen çalıştırmanıza izin vermesidir. Vimscript / VimL, ​​Vim eklentilerini yazmak için kullanabileceğiniz bir dildir. Aynı zamanda config (muhtemelen .vimrc) dosyanızı yazmak için kullandığınız dildir. Ayrıca komut satırı modundan veya Ex modundan Ex komutlarını girdiğinizde kullandığınız dildir. Bu açıdan, Ex-mode bir VimL REL olarak görülebilir. Neden bir VimL REL istiyorsunuz? Aynı nedenden dolayı insanlar diğer diller için REPL'leri sever. Özellikle VimL'de eklentiler yazıyorsanız veya yapılandırma dosyanızı son derece özelleştiriyorsanız (muhtemelen SRP ana kuralını ihlal ettiğiniz anlamına gelir ve bunu parçalamanız gerekir) eklentileri).


Eski modun kullanışlılığını göstermek için video olarak bazı örnekler almak harika olurdu. Ben Linux pencere yöneticisini kullanabilirsiniz ve vim ile görsel mod çünkü ben bunu fark asla :!pythonvs.
Léo Léopold Hertz 준영
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.