Öğ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?
Öğ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?
Yanıtlar:
Ex modunda (aynı zamanda bilinen ex
) Vim aşağıdaki durumlarda kullanışlıdır:
Olmayan etkileşimli dosyaları olan düzenleme en yaygın kullanımı ve benzeri olarak bir şekilde kullanan insanlar sed
ve awk
ancak onlar daha odaklı akışı vardır ediyoruz - onlar sadece ederken başından sonuna ileriye dosyayı okumak vim
odaklı 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 ex
vi içinden veya tam tersi komut moduna ulaşmak mümkündür. vim -e
Vi 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)
İşte değişen basit bir örnek 127
için 128
sizin bir hosts
dosya 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
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.
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
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.
-V
Komut dosyasını çalışırken görmek için ekleyin .
Daha fazla örnek:
Ayrıca bakınız:
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
for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
.
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.
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).
:!python
vs.