Како претраживати и заменити више датотека у Вим-у

У овом чланку ћете научити како интерактивно претраживати и замењивати многе датотеке са само две команде, захваљујући Вим-у.

Иако постоји мноштво метода за тражење и замену речи у једној датотеци, шта радите када имате низ за ажурирање у више неповезаних датотека, све са различитим именима? Искористите моћ алата командне линије, наравно!

Прво ће вам требати findсве датотеке које желите да промените. Низање онога за шта су ефикасни упити за претрагу findзаиста је ограничено само вашом маштом.

Ево једноставног примера који проналази Питхон датотеке:

find . -name '*.py' 

На -nameтест тражи образац, као што су све датотеке завршава у .py. Али findможете учинити много више са другим условима тестирања, укључујући -regexтестове. Трчите find --helpда видите мноштво опција.

Даље подесите претрагу тако што grepћете добити само датотеке које садрже низ који желите да промените, на пример додавањем:

grep -le '\' 

-lОпција вам даје само имена датотека за све датотеке које садрже образац (означен са -e) ту утакмицу "кита".

Такође можете користити Вимов импресиван :bufdoкоји вам омогућава да покренете исту команду у више бафера. Интерактивно ради са свим овим датотекама, без заморног отварања, чувања и затварања сваке датотеке, једну по једну.

Прикључимо ваше моћне find+ grepрезултате у Вим са:

vim `find . -name '*.py' \ -exec grep -le '\' {} \;` 

Коришћење бацктицк-проширења за прослеђивање наше претраге Вим-у отвара више бафера спремних за рад. (Урадите :h backtick-expansionу Виму за још.)

Сада можете применити Вим команду :bufdoна све ове датотеке и изводити радње попут интерактивног претраживања и замене:

:bufdo %s/a whale/a bowl of petunias/gce 

Фор gза „глобално“ ће променити појаве узорка на свим линијама. eЋе изоставити грешке уколико се не нађе образац. cОпција чини интерактивна. Ако се осећате самопоуздано, можете га изоставити да унесете промене без прегледавања сваке од њих.

Када завршите са пролазом кроз све бафере, сачувајте сав посао који сте завршили:

:bufdo wq! 

Затим уживајте у слави свог уштеђеног времена и труда.