Лого на страниците (малко).

Заглавна страница > Четива > Четива за глотометрията > cream в режим „expert“ > 21. Търсене и заместване в режим „експерт“

 

Александър Иванов

cream в режим „expert“

21. Търсене и заместване в режим „експерт“

В cream си има стандартно търсене (с Ctrl+F) и заместване (с Ctrl+H), но възможностите на тези две действия в режима „експерт“ са несравнимо по-големи и по-полезни.

Когато натиснете /, курсорът слиза в командния ред и можете да въведете текст за търсене, например:

/кой

Търсенето се извършва от мястото на курсора към края на текста. Ако сте включили оцветяване на търсеното, ще се оцветят всички позиции в текста, където има кой. При това по подразбиране не се прави разлика между малки и главни букви, тоест търсенето ще обхваща и Кой, и КОЙ и пр.

Ако искате да се прави разлика между главни и малки букви, въведете

:set noignorecase

И ако не искате да се различават главни и малки букви:

:set ignorecase

За да продължите търсенето, използвайте само / и Enter — търсенето ще продължи с последния въведен шаблон за търсене. Натискането на малко латинско n (очевидно, от англ. next) в режим „експерт“ дори е още по-удобно.

Обърнете внимание, че програмата започва да търси, още докато вие пишете: когато въведете к, курсорът застава върху първото намерено к, когато въведете о, курсорът застава върху първото намерено ко и т. н. В документацията това се нарича incremental search (нарастващо търсене).

Въведете ?, за да търсите в обратната посока — от мястото на курсора към началото на текста. Не е нужно да въвеждате отново шаблона — просто с ? променяте само посоката на търсене. Още по-лесно и удобно е да използвате главната буква N.

С търсене по този начин се намира всяка поредица от букви, независимо дали е отделна дума, или е в границите на друга, по-дълга дума, например с търсене на кой ще намерите и никой, който, койка, спокойно. По-прецизни начини за търсене се разясняват в раздела Пак търсене и заместване — регулярни изрази.

Звездичката * в режима „експерт“ извършва търсене на думата, в която е курсорът — това е полезна и често използвана команда.

Командата за заместване на Боряна с Даниела в целия текст може да изглежда така:

:%s/Боряна/Даниела/g

Разяснения за синтаксиса на командата:

След двете точки символът % определя търсенето да се направи през всички редове в текста. Изобщо частта от текста, която ще се обработва (в документацията — range), винаги се определя най-отпред, преди командата. Например, ако замените % с 10,20, действието ще обхваща от десети до двадесети ред включително. Още примери за област на действие:

1,$ — синоним на % — от първия (1) до последния ($) ред;

1,$- — от първия до предпоследния ред ($-): това е съкратена форма от $-1 — може да се определи и друго число като отместване спрямо края на текста;

.,$ — от реда, където е курсорът (.), до края на файла ($);

.,^ — от реда, където е курсорът (.), до началото на файла (^);

.,"c — от реда, където е курсорът (.), до отметка ("c);

Командата е s — това е съкращение от substitute и може да изпишете цялата дума, ако не ви мързи.

Непосредствено след командата между левите две наклонени черти се въвежда това, което се търси в текста, шаблонът за търсене, а между втората и третата наклонена черта се въвежда онова, с което ще се замести намереният текст.

И най-накрая командата допуска да се поставят „флагове“ — това са малки латински букви, които променят работата на командата. В примера съм използвал флага g — това е съкращение от global.

Работата е там, че vim по подразбиране замества само първото съвпадение, намерено в реда, и след това преминава към следващия ред, тоест ако в реда се среща два пъти Боряна, ще бъде заменена само първата. А флагът g инструктира командата да продължи търсенето до края на реда — в този смисъл той е „глобален“.

Опитайте с още един флаг — c (от confirm). Командата ще иска потвърждение за всяко заместване.

Особено полезен за филолога може да бъде флагът n — посредством него командата substitute изобщо не извършва замествания, а брои съвпаденията. Така

:1,100s/Боряна//gn

няма да изтрие Боряна, както може би се боите, а ще ни каже колко пъти се среща Боряна от първия до стотния ред и на колко реда. Дали ще има някакъв текст в полето за замяна, или ще го оставите празно, при употреба на n е все едно. Но ако все пак празното поле за замяна ви безпокои, може да поставите в него символа &:

:1,100s/Боряна/&/gn

Символът & в полето за заместване „съдържа“ последното намерено съответствие — тоест, ще заменяме Боряна с Боряна (ако се извършваше замяна наистина).

Не винаги е удобно да се използва наклонената черта като разделител между частите на командата, затова са предвидени и други възможни разделители, например двоеточие, знакът # или =:

:%s:Боряна:Даниела:g

:%s#Боряна#Даниела#g

:%s=Боряна=Даниела=g

Разумно е, преди да правите замяна, да направите само търсене с включено оцветяване на намереното. Може също така да започнете замяната с флаг c (confirm), а като се уверите, че всичко е наред, да направите замени на всичко останало в текста. А ако нещата се оплескат, винаги разполагате с командата undo — тя си работи.

Страница: А. И.
Електронна поща
Дата на публикуване: 15.V.2014
Последна редакция: 27.IV.2023
Съобразено с
html5/css3