Nahrazovßnφ

Jednφm z nejΦast∞ji pou╛φvan²ch p°φkaz∙ editoru ex je nahrazovßnφ. P°φkaz se naz²vß s (substitute) a mß nßsledujφcφ tvar:
<°ßdky>s/<co_hledat>/<Φφm_nahradit>/<volby>
Jako v╣echny ostatnφ zaΦφnß urΦenφm °ßdk∙, kter²ch se mß nahrazenφ t²kat. Za p°φkazem s se uvßd∞jφ dva °et∞zce, jako obvykle vymezenΘ lomφtky. Prvnφ urΦuje, jak² text mß editor hledat, a druh² Φφm jej nahradit.

P°φklad:
Kdybych cht∞l v celΘm textu nahradit °et∞zec raz °et∞zcem dva, pou╛il bych:
:%s/raz/dva/
P°ipomφnßm, ╛e procento zt∞les≥uje v╣echny °ßdky souboru.
Takto trivißlnφ p°φpad vßs samoz°ejm∞ t∞╛ko ohromφ, ale p°edev╣φm p°i vyhledßvßnφ se ukazuje sφla regulßrnφch v²raz∙. Navφc je m∙╛ete pou╛φvat hned na dvou mφstech: jednak ve specifikaci °ßdk∙ (kde se mß pravidlo pou╛φt), jednak v parametrech vyhledßvßnφ. PokroΦilej╣φ p°φklady uvedu pozd∞ji.

Volby

┌Φinek nahrazovßnφ lze ovliv≥ovat volbami, kterΘ se uvßd∞jφ za zßv∞reΦn²m lomφtkem. NejΦast∞ji pou╛φvanΘ jsou dv∞: g a c.

Volba g zp∙sobφ, ╛e vim nahradφ v╣echny v²skyty °et∞zce na °ßdku. Implicitn∞ toti╛ nahrazuje pouze prvnφ z nich, tak╛e z °ßdku

raz raz raz dvß raz
(oblφbenΘ vojenskΘ zaklφnadlo pro synchronizaci pochodujφcφch) by p°φkaz
:s/raz/dva/
ud∞lal
dva raz raz dvß raz
Teprve p°φkaz
:s/raz/dva/g
zajistφ nahrazenφ v╣ech slov a vznikne
dva dva dva dvß dva
Abych mluvil skuteΦnou pravdu, chovßnφ vim zßvisφ na nastavenφ parametru gdefault. Pokud je zapnut (:set gdefault), editor implicitn∞ nahrazuje v╣echny v²skyty °et∞zce na °ßdku. P°i pou╛itφ volby g pak bude nahrazovat v╛dy jen prvnφ kousek na ka╛dΘm °ßdku. Vypnut² parametr (:set nogdefault) pak zajistφ v²╣e popsanΘ chovßnφ, kterΘ je implicitnφ pro p∙vodnφ editor vi i °adu dal╣φch program∙ systΘmu Unix.

Druhß volba umo╛≥uje potvrzovßnφ ka╛dΘ nßhrady. Zadßte-li

:%s/raz/dva/gc
vim se pokusφ nahradit v╣echny °et∞zce raz v textu, ale ka╛d² z nich nejprve p°edvede a dotß╛e se, zda jej mß skuteΦn∞ nahradit. Tato vlastnost je velmi u╛iteΦnß, pokud se necφtφte silnφ v kolenou a mßte jistΘ obavy, ╛e hledanΘmu °et∞zci by mohlo vyhov∞t i n∞co navφc proti va╣emu zßm∞ru. Svou odpov∞∩ m∙╛ete vybφrat z obvykl²ch mo╛nostφ:
y nahradit dan² v²skyt
n ponechat tento v²skyt v p∙vodnφm tvaru a pokraΦovat dßl
[Esc] nebo q ponechat tento v²skyt v p∙vodnφm tvaru a ukonΦit nahrazovßnφ
a nahradit tento a v╣echny nßsledujφcφ v²skyty

Komplikovan∞j╣φ p°φklady

Kdysi jsem v jednom zdrojovΘm textu pot°eboval v╣echny ΦφselnΘ ·daje vyd∞lit deseti. To vlastn∞ znamenß vyhledat v╣echna Φφsla a p°ed poslednφ Φφslici do nich vlo╛it teΦku. Zmφn∞nou akci obstarß p°φkaz
:%s/\([0-9]*\)\([0-9]\)/\1.\2/g
Hledß skupiny Φφslic a ty si dφky mechanismu zapamatovßnφ (kulatΘ zßvorky s lomφtkem) rozd∞lφ v╛dy na dv∞ Φßsti. Prvnφ je dlouhß podle pot°eby a druhß obsahuje v╛dy prßv∞ jednu (poslednφ) Φφslici. V nahrazovacφm °et∞zci jen zopakuje tyto zapamatovanΘ skupiny, av╣ak mezi n∞ vlo╛φ teΦku.

Nedßvno jsme m∞nili strukturu domßcφch adresß°∙ u╛ivatel∙ na disku. Pro ka╛dΘho u╛ivatele obsahoval soubor informace o u╛ivatelskΘm jmΘn∞ a domßcφm adresß°i - nap°φklad

PAVEL.SATRAPA,USR:HOME\KIT\SATRAPA
Soubor byl uspo°ßdßn abecedn∞ podle u╛ivatelsk²ch jmen. My jsme v╣ak pot°ebovali seskupit u╛ivatele podle kateder, kterΘ se projevujφ v cest∞ k domßcφmu adresß°i za adresß°em HOME (jako╛to p°φslu╣nφk katedry informaΦnφch technologiφ bydlφm v adresß°i KIT). Pot°ebovali jsme tudφ╛ vycucnout dotyΦnΘ jmΘno adresß°e a zapsat je jako prvnφ ·daj na °ßdku - abychom obdr╛eli
KIT,PAVEL.SATRAPA,USR:HOME\KIT\SATRAPA
Takov² soubor pak staΦφ protßhnout standardnφm programem sort a ΦlenovΘ jednotliv²ch kateder se rßzem ocitnou pospolu. Pot°ebnou transformaci obstarß
:%s/\^(.*:HOME\\\)\([^\\]*\)/\2,\1\2
P°i vyhledßvßnφ si p°φkaz zapamatuje v╣e od zaΦßtku °ßdku a╛ po °et∞zec :HOME\ (jeliko╛ lomφtko mß specißlnφ v²znam, musφ se v hledanΘm °et∞zci zdvojit). Pod Φφslem 2 se nßsledn∞ zapamatuje °et∞zec znak∙, odli╣n²ch od lomφtka (jin²mi slovy cel² nßzev adresß°e a╛ po nßsledujφcφ lomφtko). V nahrazovacφm °et∞zci se nejprve vypφ╣e tento nßzev adresß°e, za nφm Φßrka a pak beze zm∞ny ob∞ zapamatovanΘ Φßsti textu.
<-- predchozi  [obsah]  dalsi -->
© 1997, 1998 Pavel Satrapa