Обзор команд перемещения курсора в vi 65Если польз ов ат ель сов ерш ил какое-либо ред акт ир ование, а затем перемест ил курс ор ком анд ой, отличной от G, то ком анда `` вернет курсор наместо последней правки. Есл и вы вызывал и команд у поиск а (/ или ?),то `` верн ет курс ор на мес то начал а этого поиска. Пар а апос троф ов ('')раб от ае т почт и так же, как и пар а обратн ых кавыч ек, но пер ен ос ит курсор не на его предыдущее место в строк е, а на начал о этой строки.Общее число строк, отображ аемое при нажатии CTRL-G, может датьпримерн ое представл ение о том, на сколько строк следуе т пер емест иться. Есл и вы нах одит есь в 10-й строке файл а из 1 000 строк: \"practice\" line 10 of 1000 --1%--и хотите нач ать редактир ование где-то около его конц а, то примерноераспол ож ение ваш ей цели будет задаватьс я ком анд ой 800G.Перемещен ие по номеру строки – хор оший способ быс трог о пер ех од ав больш их файлах.Обзор команд перемещения курсора в vi В табл. 3.1 соб раны команды, расс мотренн ые в этой главе. Таблица 3.1. Команд ы пер емещ ен ияПеремещение Ком анд аПролистать впер ед на один экр ан ^FПрол истать наз ад на один экран ^BПрол истать впер ед на полэ кр ан а ^DПрол истать наз ад на полэ кран а ^UПролистать вперед на одну строк у ^EПролистать наз ад на одн у строк у ^YПер ем естить тек ущую строк у нав ерх экран а и прол истать z ENTERПереместить текущ ую строку в центр экрана и прол истать z.Пер ем естить текущую строк у вниз экран а и прол истать z-Перер исов ать экр ан ^LПер ейт и в самую верхнюю строку экрана HПер ейт и в средн юю строку экран а MПерейт и в сам ую нижнюю строку экрана LПер ейти на перв ый симв ол следующ ей строки ENTERПерейти на перв ый символ след ующей строк и +Перейт и на первый символ предыдущей строк и -Перейти на перв ый непуст ой символ текущей строк и ^
66 Глава 3. Быстрое перемещение Табл ица 3.1 (продолжение)Пер емещение Команд аПерейти на n-й столб ец текущей строк и n|Перейти в конец слов а eПерейти в кон ец слов а (игнор ир уя знак и препин ания) EПерейт и к началу тек ущег о предл ож ения (Пер ейт и к началу след ующ ег о предложения )Пер ейти к нач алу текущего абзаца {Пер ейти к начал у следующ его абзаца }Пер ейт и к нач ал у тек ущ его раздел а [[Пер ейти к началу след ующ его раздела ]]Искать ниж е по текс ту с использ ов ание м шабл она /patternИск ать выш е по тексту с использ ов ание м шаблон а ?patternПовторить пос ледний пои ск nПов торить пос ледн ий пои ск в против оположном нап равлении NПовторить пос ледний поиск ниж е по текс ту /Пов торить пос ледн ий поиск выш е по текс ту ?Пер ейти на следующее вхож д ен ие x в тек ущ ей строк е fxПерейт и на предыд ущее вхож д ение x в текущ ей строк е FxПерейт и на симв ол перед след ующим вхождением x в тек ущей txстрокеПер ейти на симв ол пос ле предыдущего вхож д ения x в тек ущ ей Txстрок еПовтор ить пос леднюю команду пои ска в том же направл ен ии ;Повтор ить последнюю команд у пои ска в прот ив оп оложном ,нап равлен ииПер ейт и на заданн ую строку n nGПерейти в конец файла GВернутьс я к предыдущей метк е или конт екс ту ``Верн уться на нач ало строк и, содерж ащ ей предыд ущую метк у ''Пок азать инф орм ац ию о текущей строк е (не команд а пер ем еще ^Gния)
4 За рамками основ Глава 4.Вы уже поз наком ились с осн овными команд ами ред актиров ан ия vi: i,a, c, d и y, и в этой глав е ваш и знания расш ир ятс я. Она охват ывает:• Опис ан ие доп олнительных средств ред актиров ания, включ ая обз ор общ ей формы команд ы.• Дополн ит ельные спос обы входа в vi.• Работу с буф ер ами, содержащ им и скоп иров анн ые и удал енн ые фраг менты.• Отметк у ваш его положен ия в файл е.Другие сочетания командВ глав е 2 вы изучил и команд ы редактиров ания c, d и y, а такж е нау чились сочетать их с пер емещение м и числовыми арг умент ами (например,2cw или 4dd). В глав е 3 мы доб авил и в вашу копилку больш ое количес тво ком анд пер ем ещ ен ия. Хот я возможн ость совмещ ения ком анд ред актир ован ия и перем ещения для вас уже не нов а, табл. 4.1 поз воляе т увидеть все разн ообраз ие вар иантов правк и текста.Обрат ите вним ан ие, что все пос лед ов ательн ос ти ком анд в табл. 4.1 отвеч аю т след ующ ем у формат у: (number)(command)(text object)number – это необяз ат ельный чис лов ой аргум ент. Для рассматриваемых случ аев command – это ком анд ы c, d и y, а text object – команд а перемещ ения.Общий вид команд vi обсуждалс я в глав е 2 (их переч ень указан в табл. 2.1и 2.2).
68 Глава 4. За рамками основТабл иц а 4.1. Новые ком анды ред актиров анияИзменить Удалить Коп ир ов ать От курсора до...cH dH yH верха экран аcL dL yL низ а экр ан аc+ d+ y+ следующей строк иc5| d5| y5| 5-го столбц а в след ующей строк е2c) 2d) 2y) 2-г о предложен ия ниж е по текстуc{ d{ y{ пред ыдущего абзацаc/pattern d/pattern y/pattern шаблона patterncn dn yn след ующег о вхожд ения patterncG dG yG конц а файл аc13G d13G y13G строки ном ер 13Варианты запуска vi До сих пор вы зап ускали ред актор vi такой команд ой: $ vi file У ком анд ы vi есть и другие полезн ые опц ии. Например, можно отк рыть файл на опред ел енной строк е, или с поиском по указанному шабл ону, или только для чтения. Еще одн а опц ия восстан авливае т измен ен ия в файле, кот ор ый ред актировался в момент сбоя систем ы.Переход на указанную позицию Можно открыть файл и пер ейти на перв ое вхожд ен ие шаблона или строку с определенным номер ом, а такж е указ ать исходное перем еще ние либо пои ск ом, либ о по номеру строки прям о в командной строке1: $ vi +n file Откроет file на строк е n. $ vi + file Отк рое т file на последней строк е. $ vi +/pattern file Отк рое т file на перв ом вхожд ен ии pattern. В файле practice для отк рытия файла и пер ех од а на строк у со словом Screen введ ит е: 1 Согласн о станд арт у POSIX, вместо пок азанн ой здесь ком анд ы +command vi долж ен использ ов ать -c command. Как прав ило, в цел ях обратн ой сов мести мос ти работ ают обе верс ии.
Варианты запуска vi 69Клав иши Результатvi +/Screen practice With a screen editor you can scroll the page, move the cursor, delete lines, and insert characters, while seeing the results of your edits as you make them. Screen editors are very popular, since they allow you to make changes as you read Передач а опц ии +/pattern команде vi и переход к стро ке со словом Screen.Как видн о в этом примере, шабл он ваш его поиска не обязат ельно окажется в самом верху экр ан а. Если в шабл он е есть пробел ы, то необх одимо зак люч ить весь шабл он в один арн ые или двойные кавычк и1: +/\"you make\"или поставить обр атн ую косую черт у перед проб елом: +/you\ makeКром е тог о, если вы хотит е исп ользовать станд артн ый синт аксис дляшабл онов, описанн ый в главе 6, то, скор ее всего, вам прид ется экр ан иров ать спец иа льн ые симв олы с прим енением кав ыч ек или обр атной косой черты, чтоб ы оболочка не интерп ретировала их по-своему.Использов ан ие опц ии +/pattern буд ет пол езн ым, если вам приш лосьвыйт и из сеа нс а ред актир ования до оконч ан ия работ ы. В этом случ аемож ете пом етить текущее мес то в файле, встав ив специа льн ый шаблон, например ZZZ или HERE. Пов торно верн увш ись к файлу, нужн о буд етлишь ввести /ZZZ или /HERE для пер ехода к месту оконч ан ия предыдущег о сеа нс а раб от ы. Как прав ило, при раб от е в vi опция wrapscan включ ена. Есл и в ва ших настройк ах опция wrapscan всегда вык люч ен а (см. «Пов торн ый пои ск» на стр. 61), то вы не сможете восп ользов аться +/pattern. При попытке отк рыт ия файла с этой опцие й vi пом естит курсор на по следн юю строк у и отобраз ит соо бщен ие «Address search hit BOT TOM without matching pattern».Режим «только для чтения» Бываю т случ аи, ког да нужно просмотреть файл и при этом защитить его от случ айн ых изменен ий (нап рим ер, если вы захот ит е открыть большой файл для тренир овки команд пер емещ ен ия vi либо пролис тать ком андн ый файл или текст программ ы). Вы мож ете открыть файл 1 Налич ие кавычек – это требование оболочк и, а не vi.
70 Глава 4. За рамками основ в реж им е «тольк о для чтен ия» (read-only), перем ещ атьс я по нему с по мощ ью люб ых команд пер ем ещен ия, но не иметь возможн ос ти внес ти изм енен ия в файл. Для этог о введ ите либо: $ vi -R file либо $ view file (Ком анд а view, под обн о команд е vi, может сопров ож датьс я любыми оп циями для указ ан ия определенног о мест а в тексте1.) Если вы решит е сдел ать изменения в файл е, то можно отмен ить реж им «только для чте ния», добавив к ком анде сохран ен ия восклиц ат ельный знак: :w! или: :wq! При возн икн ов ен ии проб лем с сох ран ен ием файл а обратитесь к пер еч ню возм ожн ых проб лем, привед енн ом у в приложен ии C.Восстановление буфера Иног да во время редактиров ания файл а может прои зойт и отказ сист е мы. Обычн о в этом случ ае все изм енен ия, сделанн ые в файле пос ле по следн ей зап иси (сох ран ения), тер яю тся. Одн ако сущ еств уе т опция -r, поз воляющ ая восстан овить буф ер, кот ор ый вы редакт иров али во время сист емного сбоя. В трад иц ионн ой сист еме UNIX с оригинальным vi при первом входе в сист ему после сбоя вы пол уч аете почт ов ое соо бщение, где говор ится, что буф ер сохран ен. Кроме того, если ввести ком анд у: $ ex -r или: $ vi -r то можно получ ить спис ок всех файл ов, сохран енных системой. Для восстан овл ен ия ред актируемого буфер а исп ольз уйт е опц ию -r вме сте с именем файл а. Нап рим ер, чтобы восс тан ов ить редактир уем ый бу фер файла practice после сист емн ого сбоя, введ ит е: $ vi -r practice Целес ообразн о восс тан ов ить файл сраз у же, чтоб ы не сделать в нем слу чайн ых прав ок, а затем выбир ать между сох раненным буфер ом и толь ко что отред акт ированн ым файл ом. Ком андой :pre (сокращение от :preserve) можно зас тавить систему со хран ять буфер, даж е когда ник ак ого сбоя нет. Это мож ет оказаться по 1 Как правило, view – это просто ссылка на vi.
Использование буферов 71лезным, ког да вы сдел али изм ен ения в файл е и обнар ужили, что не можете сох ран ить его из-за отсутс тв ия прав на запись. (В этом случ ае можн о также запис ать копию файла под друг им именем либ о в кат алог, гдеу вас есть прав а на запись. См. «Проблем ы при сох ран ении файл ов» настр. 30.) В разных версия х и мод ификац иях vi восс тановл ен ие работ ает по- разн ому, поэтому лучше всего обратитьс я к лок альной докум ент а ции. vile вообще не подд ерж ивает восстан овление. Сог ласн о его до кумент ации реком ендуе тся использов ать опции autowrite и autosave. О том, как это дел ается, чит айте в разделе «Настройка vi» на стр. 117.Использование буферов Вы уже видели, что во время редактир ов ания пос ледн ее удал ение (d или x) или копиров ан ие (y) сохран ялось в буфере1 (специально отв еденн ой об ласти памят и). Вы может е обр ащаться к сод ерж имом у этог о буф ер а и ко мандой вставки (p или P) пом ещать сохран енный текст обратно в файл. vi сох раняе т пос ледн ие девять удалений в нумерованных буфер ах. К люб ому из них можн о обрат итьс я, чтобы восс тановить как ое-либ о из последних девяти удал ен ий (или все сразу). (Неб ольшие удаленн ые фрагмент ы, сос тавляющ ие неполн ую строку, не хран ятся в нум ер ован ных буферах. Их можн о восс тан ов ить только ком андами p или P сразу пос ле удален ия.) vi также поз воляет помещать скоп ир ованн ый ком анд ой y текст в буфе ры под опр едел енным и именам и. Вы можете зад ейс твовать до 26 (a–z) буферов, сод ержащ их скопированн ый текст, и восс тан авл ив ать этот текст ком андой вставки p в любой момент сеа нс а ред акт ирован ия.Восстановление удалений Возм ожн ость удалять больш ие куск и текс та полезна, но что если вы по ошибке удал или 53 нужн ых вам строки? Можн о восстан овить люб ое из девят и последних удален ий, так как они сох ранены в нумер ованн ых бу ферах. Пос ледн ее хранитс я в буф ере 1, предпоследнее – в буфере 2 и т. д. Чтобы восс танов ить удал ение, введит е \" (двойн ую кав ычку), укажите номер буф ера для восстан овл ен ия, а затем введит е ком анду вставк и p. Так, для восс тановл ения предпоследн ег о удаления наб ер ит е: \"2p Удаленный текст из буф ера 2 буд ет пом ещ ен после курс ора. 1 Не путайте его с буф ер ом из пред ыдущ ег о разд ел а: здесь речь идет о специ альн о выдел енн ой области пам ят и для врем енн ого хранения (обмен а) ин форм ац ии; в предыд ущ ем разделе речь о содерж им ом файла, отк рытом в vi и в данн ый момент находящемс я в ОЗУ. – Прим. науч. ред.
72 Глава 4. За рамками основ Если вы не уверен ы, как ой именн о буфер содержит нужный текст, не обяз ат ельн о раз за раз ом вводить \"np. Ком анда пов тор ения (.) в соч ета нии с p после u авт ом ат ичес ки увелич ит номер буф ер а. В рез ультате вы смож ете искать в нумер ов анн ых буф ер ах, исп ользуя: \"1pu.u.u и т. д. чтоб ы пом ещать содержим ое кажд ог о из последующих буфер ов в файл один за друг им. Каждый раз при вводе u восстан овл енный текст исчез а ет, а ког да вы наб ираете точку (.), в файл вставляетс я содержим ое сле дующ ег о буфера. Пов торяйте ввод u и ., пока не восстан овите нужный фрагмент.Копирование в именованный буфер Вы уже знает е, что вставить сод ержимое неи менов анн ого буф ера (ко мандами p или P) можно только до внес ения других изм ен ен ий в файл, инач е этот буфер будет перез апис ан. Такж е можно применить y и d со вместно с 26 имен ованн ыми буф ер ам и (от a до z), исп ользуемым и спе циа льно для коп иров ан ия и пер емещ ения текста. Есл и вы прис воили имя буф ер у, чтобы сох ранить скоп иров анн ый текст, то можно зап ро сить его сод ерж имое в люб ой момент сеанса ред акт иров ания. Чтобы скопировать текст в имено ванный буфер, поставьт е перед коман дой коп ирования y двойн ую кавычк у (\") и букв у, задающую имя буф е ра, в котор ый вы хотит е скопировать текст. Например: \"dyy Коп ир овать тек ущ ую строк у в буф ер d. \"a7yy Коп ир овать след ующие семь строк в буф ер a. Пос ле заг рузк и текс та в именов анные буфер ы и пер ем ещен ия в другой фрагм ент восп ольз уйт есь p или P, чтобы встав ить текст: \"dP Помест ить сод ерж имое буфер а d перед курсор ом. \"ap Поместить сод ерж имое буфер а a после курсора. Помест ить часть буфер а не получится – его сод ерж им ое вставляе тс я только целиком. В следующей главе вы поз накомит есь с редакт иров ан ие м нескольк их файл ов. Научивш ись пер ек люч атьс я межд у файлами без вых од а из vi, вы сможет е применять именов анн ые буф еры для выб ор очн ой пер едач и текс та межд у файлам и. А есл и вы пользует есь функцией многоо конно го редактир ован ия в клонах vi, то также сможете использ овать для этой цел и неимен ов анн ый буф ер. Также можно удал ять текст в именов анн ые буфер ы. При этом исп оль зуе тся пох ожая конс трукция: \"a5dd Удалить пять строк в буфер a. Есл и напис ать имя буф ер а с прописной бук вы, то скопир ованн ый или удал енный текст будет присое динен к тек ущ ем у сод ерж им ому этог о бу
Отметка места 73 фер а. Это дае т больш е прос тор а в копиров ан ии или пер емещ ении. На пример: \"zd) Удалить от курс ор а до конц а тек ущего предл ож ен ия и сох ран ить в буфер е z. 2) Пер ейти на два предложения ниж е. \"Zy) Доб авить нов ое предлож ен ие в буф ер z. Вы мож ете и дальш е добав лять текст в именованный буф ер, но имейте в вид у, что если вы хоть раз заб удетесь и скоп ирует е или удал ит е текст в буфер, указ ав его имя строчной бук в ой, то пер езапиш ет е буфер и тем самым потер яет е все, что был о в нем накоп лено.Отметка места В vi можн о пом ечать свое пол ожение в файл е невид им ой «закладк ой», чтобы после работы с друг им и фрагм ентами текста можно был о вер нуться на эту метк у. В ком андн ом реж им е введ ит е: mx Эта ком анда ставит метк у x на тек ущую позиц ию (x мож ет быть лю бой бук вой). Заметим, что перв он ач альная версия vi допускала ис пользов ан ие только строчных букв. В Vim проп исн ые и строчн ые бук в ы различ аютс я. 'x (Апостроф). Пом ещае т курсор на первый симв ол строки с метк ой x. `x (Обратн ая кав ычк а). Помещае т курс ор на симв ол, помеч енн ый как x. `` (Обратные кавычки). Возв ращае т в точнос ти на пред ыд ущую метку1 или в контекст. '' (Апостроф ы). Возв ращ ае т на начало строки, сод ерж ащ ей предыд у щую метку или контекст. Метки устанавлив аются только для тек ущ его сеа нс а vi и не сох ра няются в файл е.1 Авт ор исп ольз уе т термин «пред ыдущая метка» (previous mark) для обозна чен ия места, в кот ором нах од ился курс ор до вып олнен ия какой-либ о ко манды пер ех ода. – Прим. нау ч. ред.
74 Глава 4. За рамками основДругие продвинутые команды редактирования Сущ ес тв ую т и иные команд ы прод вин ут ог о редактир ов ания, но для их исп ользования вам сначал а нужн о нем ного узн ать о ред акторе ex, о ко тором расс каз ано в следующ ей главе.Обзор команд vi для работы с буфером и меткамиВ табл. 4.2 прив ед ен ы опц ии ком андн ой строки vi, общие для всех версий редактора. В табл. 4.3 и 4.4 предс тавлен ы команд ы работы с буф ером и метк ами.Таблица 4.2. Опц ии командн ой строкиКом анда Значение+n file Отк рывае т файл file на строк е с номер ом n.+ file+/pattern file Отк рывает файл file на последней строк е.-c command file Отк рыв ае т файл file на перв ом вхож д ении шабл она (в POSIX-R исп ольз уе тс я -c).-r Выполняе т ком анду command пос ле отк рытия файла file. Как правил о, это переход на определенн ую строку или поиск (POSIX-версия +). Включает реж им «тольк о для чтения» (то же, что и выз ов view вместо vi). Восстанавлив ает файл после сбоя.Табл ица 4.3. Имен а буферовИмя буф ера Использ ов ан ие буф ера1–9 Пос ледние девять удал ений (чем больш е номер, тем старшеa–z удален ие). Именов анные буф еры. Проп исные буквы доб авл яют текст в буф ер.Табл ица 4.4. Ком анд ы раб оты с буфер ом и метками Команда Знач ение \"b command Вып олнить команд у command c буф ер ом b. mx Постав ить метк у x на текущ ую позицию. 'x Пер еместить курсор на первый символ в строк е с меткой x. `x Переместить курс ор на символ с метк ой x. `` Возвращ ае т на точную позиц ию предыд ущей метки или контекста. '' Возв ращает на нач ало строк и, сод ерж ащей предыдущую метк у или контекст.
5 Введение в редактор ex Глава 5.Вы спрос ит е: если эта книг а расс казывает о vi, то зачем включать в нееглав у о друг ом редакт ор е? На самом деле, ex не совсем друг ой редактор.vi – это визуа льный реж им бол ее общ ег о, баз ового строковог о редактора, которым и явл яе тся ex. Некот орые его ком анды могут приг одитьсяпри раб оте с vi и сэкономить много врем ен и. Мног ие из них можно использ овать, не пок ид ая vi1.Вы уже знаете, что файл можн о рассматр ив ать как наб ор пронумер ованных строк. ex обесп ечив ает пользов ат ел я более моб ильными и мощным и командами редакт иров ан ия. С его помощью вы смож ет е легк опер ем ещатьс я между файл ам и и передав ать текст из одног о файлав другой множ ес тв ом спос об ов, а также быс тр о редактир овать текс товые блок и, разм ер котор ых больше одн ог о экр ана. Кром е тог о, с помощью глобальн ой зам ены можно сделать изм ен ен ие по зад анн ом у шаблону во всем файл е.Эта глав а знакомит вас с ex и его команд ам и. Вы узнаете, как:• пер емещ аться по файлу, исп ользуя ном ер а строк;• применять команд ы ex, чтобы копиров ать, пер емещ ать и удалять текс товые блоки;• сох ран ять файл ы или их части;• раб отать с нескольким и файл ами (счит ывать текст или ком анды, пе рем ещаться межд у файл ами).1 vile отлич аетс я от других модиф икац ий тем, что в нем не раб отаю т многие продвин ут ые команд ы ex. Подробное описание каждой команд ы приводит- ся в главе 18.
76 Глава 5. Введение в редактор exКоманды ex Задолг о до изобретения vi или как ог о бы то ни было друг ого экр анн ог о ред акт ор а люди общались с комп ью тер ом с помощью печатн ых терм и налов, а не через экр ан дисплея (раст ров ый экр ан с устройс твом пози ционир ов ан ия вроде «мыш и» и программ ами эмуляции терм ин ала). Номер а строк игр ал и роль указателя, поз волявшего знать, над какой час тью файла вы работ аете. Строков ые редактор ы были адаптир ов ан ы для редактир ов ан ия подобных файлов. Прог рамм ист или другой поль зоват ель комп ьют ер а распечатывал строку (или нескольк о строк) в тер мин але печ ат и, ввод ил ком анд ы для ред актир ов ания именн о этой стро ки, зат ем печ атал зан ов о и проверял отредакт ир ов анн ую строку. Печатные терм ин ал ы уже давно ник то не примен яет, но некот ор ые из команд ex до сих пор востреб ов ан ы польз оват елям и бол ее изощренн ого редактор а, пос троенн ого на базе ex. Хот я сам о ред акт ир ов ан ие прощ е выполнять в vi, орие нт ац ия ex на строки дает больш ое преимущ ес тв о при шир окомасш табных изм енен иях в нес кольких частях файл а. Мног ие из команд, с кот ор ыми мы встретимся в этой главе, буд ут иметь в качеств е аргумент а имя файла, поэ тому не реком ендуе тся давать файл ам имена, сод ерж ащие проб елы, хот я это и не зап реще но. ex будет сбит с толку, а чтобы объя снить ему, что к чем у, потре буе тся куда больш е усилий, нежел и след овал о бы уделять именова нию файл ов. Пользуйт есь знак ом подчерк ив ан ия, тир е или точка ми, чтобы отд ел ять компон ент ы в имен ах файл ов, и у вас будет го разд о меньше проблем. Пер ед тем как вы начнет е зап ом ин ать команд ы ex (или, что не рек ом ен дуе тся, игнорировать их), дав айт е сначала приотк роем зав ес у тайн ы над строков ыми ред актор ами. Есл и вы увидит е, как работ ает ex при не пос редственном вызове, то непон ятный синт аксис его ком анд станет для вас бол ее осмысленным. Откройте файл practice и попроб уйте выполнить некоторые команды ex. Запуск ред актора с файл ом сов ерш енн о анал ог ич ен подобному дей ствию в vi. При выз ове ex вы увид ит е сообщение с информацией о пол ном колич естве строк в файл е и приг лашен ие в виде двоеточия. Нап ри мер: $ ex practice \"practice\" 6 lines, 320 characters : Пок а вы не скаж ет е ex отобразить строки, вы не увидите ни одн ой стро ки этог о файла. Команд ы ex состоят из адр еса строк и (обычн о это просто ее ном ер) и са мой ком анды, зак анч ивающейся возврат ом каретки (нажат ием ENTER). Одной из осн овных команд явл яе тс я p (от print) для печат и на экран е.
Команды ex 77Нап ример, если ввес ти в командном приг лашен ии 1p, то вы увид ит епервую строк у файла. :1p With a screen editor you can :Факт ич ески можно опуст ить p, так как номер строки сам по себе эквивал ентен команд е печ ат и для этой строк и. Чтобы вывести бол ее однойстроки, укажите диап аз он ном еров строк (наприм ер, 1,3 – два числ а,разд еленные зап ятыми, без проб ел ов между ним и). Прим ерн о так: :1,3 With a screen editor you can scroll the page, move the cursor, delete lines, insert characters, and more,Команда без номер а строки оперир ует с тек ущ ей строкой. Так, команд уподстановк и (s), поз воляющую дел ать зам ену одн ого слова на друг ое,можн о ввес ти след ующим спос обом: :1 With a screen editor you can :s/screen/line/ With a line editor you canОбр ат ите вним ание, что изм ененн ая строка выв ел ась заново пос ле выполнен ия ком анды. Те же изменен ия можн о проделать и друг им спос обом: :1s/screen/line/ With a line editor you canДаж е если вы будет е пользоватьс я командам и ex из vi и не стан ет е выполнять их неп осредств енно, все-так и стоит уделить немного врем ениex как таков ому. Вы увидит е, как именно след уе т указывать ред актор устрок у, с кот орой вы хот ит е работ ать, и какую команду выполн ить.Дав нескольк о команд ex в файл е practice, зап уст ите vi с тем же файлом, чтоб ы увид еть его в более привычн ом визуа льном реж име. Ком анда :vi пер ен ес ет вас из ex в vi.Чтобы выз вать ком анду ex из vi, нужн о ввести специальный символ: (двоет очие) для пер еход а в нижнюю строк у. Затем наб ерит е командуи нажмите ENTER, чтобы выполн ить ее. Наприм ер, в ред актор е ex перем ещ ен ие на строку прои сх одит путем ввода ном ера этой строки в приглаш ен ии с двоеточ ие м. Чтоб ы перемест итьс я на строку 6 посредс твомэтой команд ы в vi, введите: :6После этого наж мите ENTER.Пос ле след ующ его упр ажнения мы обсуд им ком анды ex с точки зрен ияих вызов а из vi.
78 Глава 5. Введение в редактор exУпражнение: редактор exВ приглаш ении ком андной строки UNIX ex practiceвыз ов ите редакт ор ex с файл ом practice:Поя витс я соо бщ ение: \"practice\" 6 lines, 320 charactersПер ейд ите на перв ую строку и напеч ат айте :1(выв ед ит е):Нап еч ат айт е (выведит е) строк и с 1 по 3: :1,3В строк е 1 сделайт е зам ену слов а screen: :1s/screen/lineВыз овите ред акт ор vi с этим файл ом: :viПер ейдите на перв ую строк у: :1Перечень возможных проблем • Во врем я редактир ования в vi вы неожиданн о поп али в редактор ex. Клав иш а Q, наж атая в командном реж име vi, выз ывае т ex. Поп ав в него, можно всегда верн уться в vi команд ой vi.Редактирование в exМногие ком анд ы редактир ов ания ex имею т бол ее простые в обр ащ ен иианал ог и в vi. Очевидно, для удал ен ия одного слов а или строки вы буд ете использ ов ать dw или dd, а не команд у delete из ex. Одн ак о ком анды exудобн ы, когда нужн о прои зв ес ти измен ения в нес кольк их строк ах. Онипоз вол яю т менять большие текс товые блок и всего одной ком анд ой.Эти ком анд ы прив еден ы ниж е вместе с их абб рев иатур ам и. Помн ит е,что в vi пер ед кажд ой команд ой ex нужн о ставить двоеточ ие. В зав ис имости от того, что вам легч е зап омн ить, мож ете использ ов ать либ о сам укоманд у, либ о ее сок ращен ие.Полн ое назван ие Сокращ ение Знач ен иеdelete d Удал яет строк иmove m Перем ещ ае т строкиcopy co Коп ир ует строк и t Копируе т строк и (анал ог co)Для обл егчен ия чтения команды ex можно раздел ять ее элемент ы пробелами. Нап рим ер, под обным обр аз ом можн о отд елять адрес а, шабл оны и команды. Тем не менее нельз я исп ольз ов ать пробел как разделитель внутр и шаблон а или в конц е команд ы подстановк и.
Редактирование в ex 79Адреса строк Каждой ком анд е ред актир ования ex необх одим о соо бщ ить ном ер стро ки (или строк), которые будут редактироваться. А команд ам ex для ко пир ов ан ия и перем ещ ения нужн о вдоб ав ок соо бщ ить, куда именн о вы хотит е перем ест ить текст. Адр ес а строк можно задать нескольким и спос обам и: • явным указан ием ном ер а строк и; • симв олами, указывающ им и ном ер а строк относ ительн о текущ ей по зиции в файл е; • шаблонам и поиска в кач ес тве адресов строк, на которые будет дейс т вовать команда. Расс мотр им нескольк о прим ер ов.Определение диапазона строк Для явног о зад ания диапаз она строк можно использовать их ном ера. Адрес а, исп ользующие явные ном ер а строк, наз ываются абс олютным и адресам и строк. Нап рим ер: :3,18d Удал ить строки с 3 по 18. :160,224m23 Пер ем естить строки с 160 по 224 сраз у пос ле строки 23 (похож е на удал ение и вставку в vi). :23,29co100 Скоп ировать строки с 23 по 29 и встав ить их пос ле строки 100 (ана лог ично коп ирован ию и вставке в vi). Чтоб ы облегчить редакт иров ание с пом ощью номеров строк, можн о включ ить их отображение в левой част и экр ана. Команд а: :set number или ее сок ращ ение: :set nu пок ажет ном ера строк. Файл practice при этом будет выглядеть так:1 With a screen editor2 you can scroll the page,3 move the cursor, delete lines,4 insert characters and moreПри зап иси файла ном ер а строк не сохраняются на диске и не распечатыв аются на принт ер е. Они перес тан ут отображ аться пос ле выход а изvi или отключ ен ия опц ии set:
80 Глава 5. Введение в редактор ex :set nonumber или :set nonu Чтоб ы временно вывест и ном ера для наб ора строк, использ уйте знак #. Нап ример, ком анд а: :1,10# пок аж ет ном ер а строк с 1 по 10. Как уже расс казывал ось в главе 3, команда CTRL-G исп ользуется для вывод а номер а текущ ей строки. Таким обр аз ом, если пер ем еститься на начало блока, наж ать CTRL-G, затем пер ейти в конец блок а и нажать CTRL-G еще раз, то можно опред елить ном ера строк, соответствующих началу и конц у текстового блок а. Еще один спос об узн ать номер строки – команда ex =: := Вывод полн ого числа строк. :.= Вывод ном ера текущ ей строки. :/pattern/= Вывести ном ер следующ ей строк и, которая отвеч ает шабл ону pat tern.Символы адресации строк Для адресац ии строк такж е можно исп ользов ать симв олы. Точка (.) со ответс тв ует тек ущ ей строк е, симв ол $ обоз нач ае т пос леднюю строку файла, а знак % соо тветствуе т всем его строк ам. Аналог ичное значен ие имее т соч ет ан ие 1,$. Эти симв олы можно комб иниров ать с абс олютны ми номерами строк. Нап ример, :.,$d Удал ен ие с тек ущ ей строк и до конц а файл а. :20,.m$ Пер ем естить в кон ец файла блок, сод ержащий строк и с 20-й по тек у щую. :%d Удал ить все строки в файле. :%t$ Скоп ировать все строки и пом ест ить их в кон ец файла (исходн ое со держ имое файл а повторится два раза).
Редактирование в ex 81 Кром е абс олютног о номера строки можно указ ывать адр ес по отноше нию к текущей строк е. Симв олы + и - выполняю т соотв етс твующ ие арифм ет ические операции. Есл и пос тав ить их пер ед числ ом, то оно бу дет доб авл ен о или выч тен о. Наприм ер: :.,.+20d Удалить тек ущ ую строк у и следующие за ней 20 строк. :226,$m.-2 Поместить строк и с 226-й до пос ледней в файле сраз у пос ле строки, располож енн ой на две строк и выш е текущ ей. :.,+20# Отобраз ить номера строк с тек ущ ей до лежащей ниж е на 20 строк. Факт ически при исп ольз ован ии + или - точку (.) ставить необяз ательн о, так как тек ущ ая строка считаетс я старт ов ой позицией по умолчан ию. Есл и после + или - не указать число, то они станут экв ив ал ентн ым и +1 и -1 соо тветс тв енно1. Аналогично ++ и -- расшир яют диапазон строк еще на одн у строк у, и т. д. В следующем разд еле буд ет пок аз ан о, как ис пользов ать + и - с шабл онами поиска. Номер 0 отвечае т самом у началу файла (воо бр ажаем ая нул евая строка) и эквив алент ен 1-. Оба элемента поз вол яют коп иров ать или пер емещать текст в начал о файл а, то есть пер ед перв ой строк ой, отк рывающ ей текст. Нап ример: :-,+t0 Коп ир ование трех строк (от строк и выше курс ор а до строк и ниж е нег о) и их вставк а в нач ал о файла.Шаблоны поиска ex может обр ащ атьс я к строкам пос редств ом шабл он ов поиска. Нап ри мер: :/pattern/d Удалить следующ ую найденную строк у, содерж ащую шабл он pattern. :/pattern/+d Удалить строк у, расположенную ниж е той, кот ор ая сод ерж ит pattern. (Вместо + можн о написать +1.) :/pattern1/,/pattern2/d Удалить от первой строки, сод ерж ащей pattern1, до перв ой строк и, содерж ащей pattern2.1 При исп ользован ии отн осит ельных адресов не нужн о отделять плюс и ми нус от след ующ их за ними чис ел. Нап ример, +10 знач ит «10 след ующ их строк», а + 10 озн ачает «11 следующ их строк (1+10)», то есть не совсем то, что вам нужн о.
82 Глава 5. Введение в редактор ex:.,/pattern/m23 Взять текст от тек ущей строк и (.) до первой, сод ержащ ей pattern, и пер еместить его после строк и 23.Обрат ите вним ание, что шабл он огр ан ичен косыми черт ам и слев а и справа.Если вы удаляете текст с использ ован ием шаблонов и в vi, и в ex, тознайте, что в работе этих двух редакторов есть отлич ия1. Пусть файлpractice содержит следующ ие строки:With a screen editor you can scroll thepage, move the cursor, delete lines, insertcharacters and more, while seeing resultsof your edits as you make them.Клавиш и Результатd/while With a screen editor you can scroll the page, move the cursor, while seeing results of your edits as you make them.:.,/while/d В vi ком анд а удален ия до pattern стирае т текст от курс ор а до сло ва while, но не трог ае т остатки обеи х строк. With a screen editor you can scroll the of your edits as you make them. Команд а ex удал яет весь диап аз он, зад анн ый этим и строками. В нашем случае это текущая строка и строка, сод ержащая шаблон.Переопределение текущего положения курсора Иног да использ ов ание относит ельного адр ес а в ком анде может привес ти к непредсказуем ым результат ам. Предп ол ожим, что курсор нах о дитс я на строке 1 и вы хот ите выв ест и строку 100 и еще пять строк ни же нее. Если наб рать: :100,+5 p то появится соо бщ ение об ошибке «First address exceeds second» (пер вый адр ес прев ыш ае т втор ой). Прич ин а неу дач и в том, что второй адрес выч исл яе тс я по отн ош ен ию к тек ущ ей поз иц ии курс ора (строка 1), так что на сам ом дел е ваш а команда экв ив алентн а следующей: :100,6 p Нужно каким-то образом сделать так, чтоб ы ком анда счит ал а строку 100 тек ущей, несмотря на то, что курсор стои т на перв ой строк е. 1 ex – строковый редакт ор, и поэ тому опер ирует строк ами как целым, тог да как vi может обр абатыв ать часть строки. – Прим. науч. ред.
Редактирование в ex 83 В ex есть так ая возможность. Если вы использует е точк у с зап ятой вме сто запят ой, то тек ущ им будет счит атьс я адрес первой строк и. Напри мер, ком анда: :100;+5 p выв едет требуемые строк и. Теперь +5 выч исляетс я по отнош ен ию к стро ке 100. Точка с зап ятой пол езна при использ ован ии как шаблон ов пои с ка, так и абсолютн ых адрес ов. Например, чтоб ы вывести строк у, сод ер жащую pattern, а такж е 10 следующ их строк, введ ите ком анду: :/pattern/;+10 pГлобальный поиск Вы уже знает е, как в vi исп ольз овать / (кос ую черту) для пои ск а в фай ле по шаблону. В ex есть команда глобальног о поиск а g (от global), поз во ляющая иск ать по шаблон у и выводить все строки с этим шаблоном. Команда :g! имеет против опол ожное дейс тв ие: она (или ее синоним :v) ищет строки, не сод ерж ащие шаблоны. Команду глоб альн ого пои ск а можно использов ать для всех строк в фай ле либ о указывать диап аз он строк, огран ич ивающ их примен ение ко манды глобальн ого поиск а. :g/pattern Находит (пер ех одит на) последн ее вхожд ение pattern в файле. :g/pattern/p Наход ит и выв од ит все строк и в файле, содержащ ие pattern. :g!/pattern/nu Нах одит и вывод ит все строки файла (и их номера), кот ор ые не со держат pattern. :60,124g/pattern/p Нах од ит и вывод ит все строки с номерами, леж ащим и в диапазон е от 60 до 124, сод ержащие pattern. Как можн о дог адатьс я из наз ван ия, g мож ет также исп ольз оватьс я для глобальной замен ы. Об этом мы поговорим в главе 6.Сочетания команд ex Чтобы вып олн ить нов ую команд у ex, необяз ат ельно кажд ый раз вво дить двоеточ ие. Верт ик альная черта (|) служит разд елител ем команд в ex, что поз вол яе т комбин ир овать нес кольк о команд в одном пригла шении ex (примерно так же, как точк а с запят ой разделяет нес кольк о команд в одн ом приг лашении командн ой строк и обол очк и UNIX). При использов ании | нужн о следить за указываемым и адр ес ам и строк. Ес ли одн а из ком анд мен яе т поряд ок строк в файле, то следующ ая будет работать уже с новым расп оложением строк. Например:
84 Глава 5. Введение в редактор ex :1,3d | s/thier/their/ Удал яет строки с 1-й по 3-ю (после этог о вы оказ ываетесь на верхней строк е файла), а затем произв од ит зам ен у в текущей строке (которая имела номер 4 пер ед вызовом ком анд ы ex). :1,5 m 10 | g/pattern/nu Пер ем ещает строк и с 1-й по 5-ю на позиц ию после строк и 10, а зат ем отоб ражае т все строки (с ном ер ам и), содержащие pattern. Обратите вним ан ие, что здесь исп ользуютс я проб елы, чтобы облегч ить чтение ком анд.Сохранение и выход Вы уже знает е ком анду vi ZZ, с помощью которой осуществляется вы ход из прог рамм ы с сохранением (записью) файла. Однак о част о оказ ы ваетс я удобнее вых одить из файла с помощью ком анд ex, так как они обесп ечив ают больший конт роль. По ход у излож ения мы уже упомин а ли нек от ор ые из них. Теп ерь предприм ем бол ее формальный подх од: :w Зап ис ывае т (сохран яе т) буф ер в файл, но не вых од ит из программ ы. Вы может е (и должны) исп ользовать :w во врем я сеанса ред акт ир ова ния, чтобы защитить правки от сист емн ых сбое в и серье зных оши бок при редактировании. :q Выходит из редактора (и возвращ ае т в приг лашение ком андн ой строки UNIX). :wq Выполняет два действия: записыв ае т файл и выход ит из ред актор а. Производ итс я безусл овная зап ись, даже есл и файл не был изм ен ен. :x Зап исывае т файл и выход ит из ред актор а. Файл запис ывае тс я толь ко в том случае, есл и в нем прои зошл и изм ен ен ия1. vi защищ ае т и существующие файл ы, и сдел анн ые правки в буф ере. Например, при попытк е запис ать сод ержим ое буфер а в сущ ествующ ий файл vi выдаст пред уп реж ден ие. Анал огично, есл и вы вызвали vi с файлом, сдел ал и изм енения и хот ите выйти без сох ранен ия, ред актор выд аст соо бщение об ошибк е прим ерн о след ующ его вид а: No write since last change. (пос ледн ие изм ен ения не запис ан ы) 1 Различие в :wq и :x важно при ред актир ован ии исходн ог о код а и исп ользо вании make, действ ия кот ор ого зависят от времени измен ения файл ов.
Сохранение и выход 85 Эти пред уп реж д ения могут пред отврат ить сущес твенные ошибк и, но иногда вам действ ит ельно нужн о вып олн ить так ую ком анду. Воск ли цат ельный знак (!) после команды отменяет все пред упреж д ения: :w! :q! :w! также можно исп ользовать для сох ран ен ия файла, отк рытого в ре жим е «тольк о для чтен ия» командам и vi -R или view (предпол аг ае тся, что у пользователя есть право на запись файла в файловой сист ем е). :q! – это сам ая важная команда редакт иров ан ия, поз вол яющ ая выхо дить из программ ы, не затрагивая перв оначальный файл незав исим о от изм енен ий, сдел анн ых во время сеа нс а. Сод ерж им ое буф ера при этом будет потер яно.Переименование буфера Ком анд а :w мож ет такж е исп ользоваться для сохран ения всего буф ер а (или копии редактир уемого вам и файл а) под друг им именем. Пусть есть файл practice, содержащ ий 600 строк. Вы открываете файл, дел ает е множес тв о прав ок, зат ем хот ите выйт и, но при этом сох ран ить как старую верс ию practice, так и исправл енную, чтоб ы их можно был о сравнив ать. Чтоб ы сох ранить отред актир ов анн ый буфер в файле под наз вание м practice.new, вып олните команд у: :w practice.new Старая верс ия, расп олож енная в файле practice, ост ае тс я неизм енн ой (если только вы не вып олняли :w). Теперь команд ой :q можн о выйт и из редакт ирования новой верс ии.Сохранение фрагмента файла При редактирован ии файла част о может понадоб иться сох ранить его часть в отдельн ом файле. К прим ер у, так можн о пос туп ать с кодам и форм атирования и текс том, кот ор ые буд ут использов атьс я в других файлах в качестве заголовк ов. Для сох ран ен ия част и файла можно использ овать комбинацию коман ды адр есац ии строк с ком анд ой зап иси w. Например, если вы находи тесь в файле practice и хот ит е сох ранить его часть под именем newfile, можно ввес ти: :230,$w newfile Сохраняет от 230-й строки до конц а файл а в файл newfile. :.,600w newfile Сох раняе т строк и с текущ ей до 600-й в newfile.
86 Глава 5. Введение в редактор exДобавление к сохраненному файлу Вместе с ком андой w можно использ ов ать опер ацию перен ап равления UNIX с добавлением (>>). Тогда вы доб авите все содерж имое буфера или его часть к существ ующему файл у. Нап рим ер, если ввес ти: :1,10w newfile а затем :340,$w >>newfile то newfile буд ет содержать строки с 1 по 10, а такж е со строк и 340 до конц а буфера.Копирование одного файла в другой Иногда прих одитс я коп ировать уже имеющиес я в системе текст или данн ые в ред акт ир уемый файл. В vi можно считать сод ерж им ое друг о го файла с помощью ком анд ы ex: :read filename или ее аббрев иат урой: :r filename Эта команд а вставляе т сод ерж им ое filename, нач ин ая со строк и пос ле полож ен ия курс ор а в файле. Есл и нужн о указ ать строку, отл ичн ую от той, где наход итс я курсор, просто введ ите ее номер (или любой другой адрес строки) пер ед ком анд ой read или r. Предп оложим, вы ред акт ир уете файл practice и хот ите счит ать файл под наз ван ие м data из другог о каталога, нап ример /home/tim. Перем ес тит е курс ор на одн у строк у выше той, куда вы хот ит е встав ить нов ые данн ые, и введите: :r /home/tim/data Все сод ерж имое файл а /home/tim/data буд ет счит ан о в practice, нач ин ая со строк и ниж е курсор а. Чтоб ы считать тот же файл и помест ить его пос ле строки 185, введ ит е: :185r /home/tim/data Есть и другие способ ы счит ать файл: :$r /home/tim/data Помещает счит ываемый файл в кон ец текущег о. :0r /home/tim/data Пом ещ ает счит ываемый файл в самое начало тек ущ ег о. :/pattern/r /home/tim/data Помещает считываем ый файл в тек ущ ий пос ле строки, содерж ащ ей pattern.
Редактирование нескольких файлов 87Редактирование нескольких файловКоманды ex поз воляют перек лючаться между нес кольким и файлами.Преи мущ ес тв ом ред акт ир ов ания сраз у нескольких файлов являетсяскорость. При использ овании систем ы совмес тн о с другими польз ователям и вых од из vi и его повторн ый зап уск для следующег о файла займут опред ел енное время. Когда вы остаетесь внутри одног о сеа нс а редактир ован ия, вы выи гр ывает е не только в скор ости перек люч ен иямежду файл ами. Так им обр азом вы сох ран ите ранее опред еленные сокращ ения и пос лед ов ат ельн ос ти ком анд (см. глав у 7), а буфер ы коп ирования (yank) поз вол ят копиров ать текст из одного файла в другой.Вызов vi с несколькими файламиПри перв ом запуск е vi можн о указ ывать более одного файла для ред актир ов ан ия, а впос ледствии пользоватьс я командами ex для перек люч ения между ним и. Например: $ vi file1 file2Внач ал е буд ет ред акт ироватьс я file1. После оконч ания ред акт ир ов ания первого файл а ком анд ой ex :w зап иш ит е (сохраните) file1, а ком андой :n вызов ит е след ующ ий файл (file2).Пусть нужно отр едакт ир овать два файла: practice и note.Клавиш и Результ атvi practice note With a screen editor you can scroll the page, move the cursor, delete lines, insert characters, and more, while seeing Открываются два файла, practice и note. Снач ал а на экран е появится указ анный первым файл practice. Внес ите какие- либо измен ения.:w \"practice\" 6 lines, 328 characters Сохран ит е отр едактир ованный файл practice ком андой ex :w и наж мите ENTER.:n Dear Mr. Henshaw: Thank you for the prompt . . . Ком анд ой ex :n вызов ите след ующ ий файл note, наж мите ENTER и сделайте исправления.:x \"note\" 23 lines, 1343 characters Сохранение втор ог о файла note и вых од из сеа нса редакт и рования.
88 Глава 5. Введение в редактор exИспользование списка аргументовex поз вол яе т вып олнять горазд о больш е дейс тв ий, неж ели простое переключ ен ие на след ующий файл ком анд ой :n. Ком анд а :args (сок ращ аетс я до :ar) перечисляет все файл ы, присутс твов авш ие в ком андн ойстроке, при этом текущий файл зак люч ае тс я в скобк и.Клав иши Рез ульт атvi practice note With a screen editor you can scroll the page, move the cursor, delete lines, insert characters, and more, while seeing:args Отк рыв аю тс я два файл а, practice и note. Сначала на экран е появится указанный первым файл practice. Внес ит е какие- либ о изм ен ен ия. [practice] note vi отоб раз ит аргум ент ы в строке сос тоян ия (имя текущег о файла зак лючен о в скобк и).Ком анд а :rewind (:rew) делае т тек ущ им первый файл в списке файлов,указанных в командн ой строке. В elvis и Vim есть соо тветствующ ая команда :last, кот ор ая пер ек люч ае тс я на последн ий файл в этом списке.Вызов новых файловНеобязательн о выз ывать несколько файл ов в начале сеанс а ред актир ования. Ком андой :e можно пер еключитьс я на нов ый файл в любой момент. Есл и вы хот ите отр ед актир овать в vi другой файл, сох ран ите сначала тек ущ ий (:w), а затем набер ит е команду::e filenameДоп устим, вы работаете с файл ом practice и реш ил и ред актиров атьфайл letter, а пот ом снова вернуться к practice:Клавиш и Результ ат:w \"practice\" 6 lines, 328 characters:e letter Сох ран ите practice команд ой w и наж мите ENTER. practice со хран ен и ост ае тся на экран е. Сейч ас можно пер еключ итьс я на друг ой файл, пос кольку ваш и правки сохранен ы. \"letter\" 23 lines, 1344 characters Вызов ит е командой e файл letter и нажмите ENTER. Прод ел ай те какие-либ о измен ения.
Редактирование нескольких файлов 89 vi «помнит» два имен и файл а как текущее и альт ернат ивное. К ним можн о обращ аться с помощ ью символ ов % (имя тек ущего файл а) и # (аль терн ат ивное). # удобно использовать с командой :e, так как она позволя ет легко пер ек люч аться впер ед и наз ад по этим двум файл ам. В тольк о что прив ед енном прим ер е ком андой :e # можн о верн уться к первому файл у (practice). Сод ержимое файла practice можно счит ать в тек ущ ий файл, есл и выз вать :r #. Есл и тек ущий файл не был сох ран ен, то vi не поз волит перем ещ аться между файлами пос редс тв ом ком анд :e или :n, пока вы не скаж ете ему сделать это прин удительно, добав ив воск лиц ат ельный знак пос ле ко манд ы. Нап ример, если после изм енен ий в letter нужн о отказ аться от них и верн утьс я к practice, наберите :e! #. След ующ ая ком анда тож е пол езн а. Она отмен яет правк и и возвращае т пользоват еля к последн ей сох ран енн ой версии тек ущег о файла: :e! В отлич ие от символа #, % пол езен только при запис и содерж им ого теку щег о буф ер а в новый файл. Нап ример, в недавн ем разд ел е «Пер еимено ван ие буф ер а» на стр. 85 мы пок аз али, как сохран ить дополн ительн ую верс ию файла practice при помощ и команды: :w practice.new Так как имени тек ущего файла соответствует %, эту же строк у можн о ввес ти так: :w %.newПереключение между файлами из редактора vi Поскольку вам, скорее всего, прид етс я часто переключ атьс я на пред ы дущий файл, необяз ательно для этого обращ атьс я к командн ой строке ex. Команд а vi ^^ (клавиши Ctrl и кар етк а) сдел ает это за вас. Вызов этой ком анды эквивал ентен ввод у :e #. Как и в случ ае ком анд ы :e, есл и теку щий буф ер не сохранен, vi не поз вол ит пер ейт и к предыдущ ему файл у.Правки между файлами Если прис воить буферу коп иров ан ия (yank) одн обук в енное имя, то по явитс я удобный способ перемещения текс та из одн ого файл а в друг ой. При загрузке новог о файла в буф ер vi ком андой :e сод ержим ое имено ванных буферов не очищ аетс я. Так им образом, скоп ир овав или удал ив текст из одн ого файла (при необход им ос ти его можно поместить в не сколько имен ованных буф ер ов), вызвав нов ый файл ком анд ой :e и вста вив именов анн ые буф еры в нов ый файл, вы сможет е перен осить фраг мент ы текс та межд у файл ам и.
90 Глава 5. Введение в редактор exСлед ующий прим ер илл юс тр ир уе т, как перен ес ти текст из одн ог о файла в другой.Клавиш и Рез ультат\"f4yy With a screen editor you can scroll the page, move the cursor, delete lines, insert characters, and more, while seeing the results of the edits as you make them Скопируйте чет ыре строки в буф ер f.:w \"practice\" 6 lines, 238 characters:e letter Сохран ит е файл. Dear Mr. Henshaw: I thought that you would be interested to know that: Yours truly, Зайдит е в файл letter команд ой :e и пер ем естит е курс ор туда, где должен будет располаг аться скопир ов анн ый текст.\"fp Dear Mr. Henshaw: I thought that you would be interested to know that: With a screen editor you can scroll the page, move the cursor, delete lines, insert characters, and more, while seeing the results of the edits as you make them Yours truly, Вставьт е скоп ир ованн ый текст из именов анн ого буф ер а f ниже курсора.Другой способ перемещения текс та между файлами состои т в исп ользован ии ком анд ex :ya (от yank) и :pu (от put). Они раб отаю т примерн о также, как их vi-эквив ал ент ы y и p, но использую тс я с именов анным и буфер ам и и адр есацие й строк, принят ой в ex.Например, команда: :160,224ya aскопир уе т строки со 160-й по 224-ю в буф ер a. Пос ле этого ком анд ой :eнужно пер ейт и к файл у, куда вы хотите встав ить эти строк и, помест итькурсор на строку, где нео бходимо вставить скоп ир ов анн ые строки, а затем ввес ти: :pu aчтобы вставить сод ерж имое буфер а a пос ле тек ущей строк и.
6 Глобальная замена Глава 6.Иног да в наполовину готов ом документ е или законченном черновикемогут обн ар ужитьс я нет очн ости. Например, в рук ов одстве по эксп луатац ии мож ет изм енитьс я назван ие тов ара, прис утс тв ующ ее во всемфайле (ох уж этот маркетинг!). Достаточно часто нужн о верн утьс я и что-ниб удь исправ ить, после чего сделать анал ог ичн ые изменения в нескольк их мест ах.Глобальн ая замена – мощн ый инс тр умент для под обных правок. Использ уя только одн у команду, вы сможет е авт ом атич ес ки замен ять слово (или строк у симв олов) в люб ом месте файла.Во врем я глоб альн ой зам ен ы редакт ор ex пров еряет каждую строкуфайла на налич ие зад анн ог о шаблон а симв олов. Во всех строк ах, гдетакой шабл он обнар уж ен, ex зам еняет его на нов ую строку символ ов.Сначал а в качестве шаблон а поиска мы буд ем рассматр ивать прос туюстроку, а далее в этой главе изучим мощный язык поиска по шаблон у,изв естн ый как рег улярн ые выраж ен ия.При глобальн ой зам ен е ex исп ользует тольк о две команды: :g (global)и :s (substitute). Поскольк у их синт аксис может быть дов ольн о сложным, мы начнем рассматр ив ать его поэтапно.Ком анд а замен ы имее т след ующ ий вид: :s/old/new/При этом в тек ущ ей строке перв ое вхож д ение шабл он а old зам ен ится наnew. Знак / (кос ая черта) служ ит раздел ит елем между разным и частями ком анд ы (когда кос ая черта явл яетс я пос ледним симв ол ом в строке,ее можн о не став ить).Команд а зам ен ы с синтакс ис ом: :s/old/new/g
92 Глава 6. Глобальная замена мен яет в тек ущей строк е каждое вхож д ен ие old на new. Ком анда :s до пуск ает нал ич ие опц ий после строки замены. Опц ия g в прив ед енн ом пример е озн ачает глоб альн ость. (Опция g относится ко всем вхож д ен и ям шабл он а в строк е; не путайте ее с ком анд ой :g, зат рагивающей каж дую строку файла.) Есл и пер ед командой :s прип исать адр еса, то диапаз он ее дейс твия рас ширится на несколько строк. Нап рим ер, след ующая команд а будет ме нять каждое вхож д ен ие old на new в строках с 50-й по 100-ю: :50,100s/old/new/g а эта пом ен яе т каждое вхож ден ие old на new во всем файл е: :1,$s/old/new/g Чтоб ы задав ать дейс тв ие в кажд ой строк е файла, можно вмес то 1,$ ука зывать %. Так, последн яя ком анда мож ет быть зап исана след ующ им об разом: :%s/old/new/g Глоб альная зам ена раб отает нам ного быстрее пои ска и замен ы каждого вхожд ения строки. Пос кольку эта ком анда может использоватьс я для сам ых разн ых исправл ений и обладает больш им и возможн ос тями, мы снач ал а проилл юстр ир уем простые замены, а зат ем дойд ем до сложных контекстно-зависимых прав ок.Подтверждаем замены При использ ов ан ии ком анд пои ск а и зам ены лишн яя осторожн ость не пом ешает, так как иногда пол уч ается сов сем не то, что ожид ается. На пример, вводом u можно отмен ить последн юю команд у поиск а и зам е ны. Однак о част о неж ел ат ельные изм енен ия обнар уж ив аютс я, когда уже поздно их отм ен ять. Другой спос об защ иты файла – сох ранить его ком анд ой :w пер ед глобальной замен ой. Так у вас по крайн ей мере буд ет возм ожн ость выйт и из файла без сох ранен ия и верн уться к сох ран енно му вар иа нт у. Такж е целесообразно воспользов атьс я ком анд ой :e!, что бы счит ать пред ыд ущую версию буфера. Рекоменд уе тс я проя влять ост ор ожность и хор ошо поним ать, что имен но нужн о изм енить в файл е. Если вы хот ит е увидеть рез ульт ат пои ск а и подт верждать каждую зам ену пер ед ее выполн ен ием, доб авьт е в ко нец ком анды зам ен ы опц ию c (confirm): :1,30s/his/the/gc ex отоб раз ит всю строк у с искомым текс том и пом ет ит его наб ором каре ток (^^^^): copyists at his school ^^^
Замена, зависящая от контекста 93Чтоб ы вып олн ить эту зам ену, введит е y (yes) и наж мит е ENTER. Дляотм ен ы правк и просто нажмите ENTER. this can be used for invitations, signs, and menus. ^^^Сочетание ком анд vi n (пов тор последн ег о пои ска) и точк и (.) (пов торение пос ледн ей ком анды) также являетс я чрезв ыч айн о важн ым и быс трым способ ом пройт ись по файл у и сделать множ ес твенные замен ы, если вы не хот ите прим ен ять их глобально. Наприм ер, есл и нужн о зам енить все which на that, то можно сдел ать выборочную проверк у кажд оговхожд ения which и поменять тольк о неправильные из них:/which Поиск whichcwthat ESC Смен ить на thatn Пов тор ить пои скn Пов тор ить поиск, пропуст ить измен ение. Повтор ить изм енение (есл и возм ожн о) (и т. д.)Замена, зависящая от контекста Прос тейшая глоб альная зам ена мен яет одно слов о (или фраз у) на дру гое. Есл и был набран файл с пов тор яющим ися опеч аткам и (editer вме сто editor), то можно сделать глоб альную замен у следующим обр аз ом: :%s/editer/editor/g При этом editer буд ет замен ен на editor во всем тексте. Для глоб альной замены есть еще один, бол ее сложный синт акс ис. Он поз вол яет иск ать по одн ому шаблону, а после нахожден ия сод ержащ ей его строк и сде лать замену по друг ому шабл он у. Это можно расс матр ивать как зам ен у, зав ис ящую от контекс та. Синтакс ис имеет следующ ий вид: :g/pattern/s/old/new/g Первая g предп ис ыв ае т команд е обраб отать все строк и в файле. По pat tern ищутс я строк и, где должна быть произвед ена замен а, а в строк ах, сод ерж ащ их pattern, ex должен заменить (s) стар ые симв олы (old) на нов ые (new). Последн яя опц ия g указ ывает, что эта зам ена должна вы полн яться глоб альн о в данн ой строке. Например, при напис ании этой книг и мы исп ольз овали XML-директи вы <keycap> и </keycap> для обрамл ения соч ет ан ия ESC, обоз нач ающ ег о клав иш у Escape. Допустим, вы хотите писать ESC прописными букв а ми, но не жел аете мен ять друг ие Escape, встречающ иес я в тексте. Что бы измен ить Esc на ESC только в строке с дир ектив ой <keycap>, исполь зуйте след ующее выр ажен ие:
94 Глава 6. Глобальная замена :g/<keycap>/s/Esc/ESC/g Если вам нужно не только найти строку по шаблону, но и пом ен ять ее, не обязат ельн о наб ирать этот шабл он дважды. Так, ком анд а: :g/string/s//new/g выполнит поиск всех строк, содержащих string, и выполн ит замен у этой самой string. Обрат ит е вним ание, что ком анда: :g/editer/s//editor/g будет делать то же, что и: :%s/editer/editor/g Во втором случ ае писать нужн о нем ного меньше. Такж е возм ожно ком бин иров ать команд у :g не тольк о с :s, но и с другими ком андами ex, на пример :d, :mo и :co. Этим способ ом можно проделывать глобальные уда ления, пер емещ ения и коп ирован ия.Поиск по шаблону При выполн ении глоб альных зам ен UNIX-ред актор ы, такие как vi, по зволяют иск ать не только фиксир ованные строк и симв ол ов, но и на страив аем ые шабл оны слов, кот ор ые наз ываются рег ул ярными выра жениями. Ког да вы указываете в шабл оне строк у символ ов-лит ерал ов, пои ск мо жет зат ронуть неп одх од ящие вхождения. Проблем а в том, что одно и то же слов о мож ет по-разн ому исп ольз оваться. Регул ярн ые выраж ен ия поз воляю т провести поиск слов в контекс те. Зам ет им, что регулярные выр аж ен ия можн о исп ользовать как в ком андах пои ска vi / и ?, так и в ком анд ах ex :g и :s. В большинс тв е случ аев те же регул ярные выр аж ен ия подойд ут и для других утилит UNIX, например grep, sed, и awk1. Регул ярн ые выраж ения строя тс я комб инир ование м обычн ых симв о лов с метас имв олами2. Метасимв ол ы и спос обы их исп ольз ов ания пе речисл ен ы ниж е. 1 Гораздо больш е инф орм ац ии о рег ул ярн ых выр аж ен ия х можн о найти в двух книг ах, изданных O’Reilly: «sed & awk» Дейл а Дог ерт и (Dale Doughert y) и Арн ольд а Роббинс а (Arnold Robbins) и «Mastering Regular Expressions», Джеффри Е.Ф. Фридл а (Jeffrey E.F. Friedl) – в переводе «Рег ул ярн ые выр а жения», 3-е издание. – Симв ол-Плюс, 2008. 2 Говор я технич ес ким языком, их прав ильн ее называть метап осл едоват ель нос тям и, пос кольку иногда два символа, стоящ ие ряд ом, имеют особ ое зна чение, отличное от их знач ен ия по отд ельн ости. Тем не мен ее терм ин мета символы широко используется в лит ер ат уре по UNIX, поэ тому мы буд ем его придерж ив аться.
Поиск по шаблону 95Метасимволы, используемые при поиске по шаблону . (точка) Соотв етств ует любому одиночному символ у, отл ичном у от пер ев ода строки. Не забыв айте, что проб ел ы также расс матр иваю тс я как сим волы. Нап ример, выр аж ен ию p.p соо тв етствуют такие строк и, как pep, pip и pcp. * Соотв етс тв ует пов торению любог о (в том числе и нулевого) количес тва раз симв ола, стоящ ег о непос редс твенн о перед звездочк ой. Нап рим ер, bugs* соо тв етс тв ует bugs (одн а s), bug (ни одн ой s), bugss, bugsss и т. д. Звезд очка * может стоять такж е пос ле метасимв ол а. К прим еру, в си лу того что . (точк а) отвечает любому симв ол у, соч ет ан ие .* означ ает «любое кол ич ес тв о люб ых симв ол ов». А вот особый прим ер: команд а :s/End.*/End/ удаляе т все симв олы по сле End (ост ат ок строки замен яе тся на «ничто»). ^ При исп ользовании в нач ал е регулярн ог о выражения эта ком анда требуе т, чтобы пос лед ующ ее регул ярн ое выр аж ение находил ось в на чал е строки. Наприм ер, ^Part соотв етствует Part, стоящей в нач але строки, а ^... – перв ым трем симв олам в строке. Есл и знак ^ стои т не в нач ал е регулярн ог о выражения, то он озн ач ает сам себя – символ кар етк и. $ При исп ользован ии в конц е рег улярного выраж ения требует, чтоб ы предшествующее регулярн ое выражен ие расп олаг ал ось в конце стро ки. Нап ример, here:$ соо тветс твуе т тольк о тем here:, которые стоя т в конце строк и. Если $ нах одится не в конц е регулярн ог о выраже ния, то это прос то знак долл ара. \ Указывает, что пос лед ующ ий специа льн ый симв ол долж ен рассмат риватьс я как обычный. К прим ер у, соч етание \. означ ае т прос то точ ку, а не «любой одиночн ый симв ол»; \* – симв ол звездочк и, а не «прои зв ольн ое кол ичес тв о симв ол ов». \ (обратная кос ая черта) пре дотв ращае т интерп рет ацию специа льного символа. Это называе тся «экран ированием симв ол а» (escaping the character). Сам симв ол об ратной черты вводится как \\. [] Соо тв етствуе т люб ом у из симв олов, заключенных в квадр атн ые скоб ки. Нап ример [AB] соо тв етс тв ует A или B, а p[aeiou]t соотв етс тв ует pat, pet, pit, pot или put. Пос лед ов ательн ый диап азон симв олов можн о опр еделить, поставив знак «минус» межд у перв ым и последн им сим волам и этог о диап азон а. Нап ример, [A-Z] будет соо тветс тв ов ать лю бой заглавн ой лат инской букв е, а [0-9] – люб ой цифре от 0 до 9.
96 Глава 6. Глобальная замена Внутри скобок можно размещ ать нес колько диап азон ов, а также смесь диапазонов и отд ельн ых симв олов. Наприм ер, [:;A-Za-z( )] со ответствуе т всем букв ам и четыр ем знак ам препин ания. В сам ом нач але разв ит ия vi и регул ярн ых выр аж ений предпол ага лось, что они будут работ ать только для набора символов ASCII. В эпох у глоб ализ ац ии сов рем енн ые системы подд ерж иваю т локали, что дае т разную инт ерп рет ац ию символов, леж ащих между a и z. Чтобы получ ить правильные рез ультаты, нужн о использ овать в ре гул ярн ых выр аж ен иях специальн ые констр укции POSIX (о них чуть ниж е) и избегать диапаз он ов вида a-z. В скобк ах большая часть мет асимв олов тер яет свое специальное зна чен ие, поэ том у при их использ ов ан ии в качес тв е обычн ых симв ол ов экр ан иров ание не треб уе тс я. Единственные симв олы, кот орые нуж но экр ан иров ать внутри скобок – это \, - и ]. Здесь дефис (-) имее т значение указ ателя диап азон а, а чтоб ы исп ользов ать «настоящий» дефис, его след ует пос тавить внутр и скоб ок на первом месте. Кар етк а (^) имеет особ ое значение, только есл и явл яется первым симв ол ом в скобках, но и в этом случ ае ее значение отличае тс я от обычного мет асимв ол а ^. Буд уч и перв ым знаком в квадр атных скоб ках, ^ меняет их значен ие на обр атн ое, после чего они буд ут соотв ет ствовать люб ом у из симв ол ов не из спис ка. Наприм ер, [^0-9] обозна чает произвольный нецифров ой симв ол. \( \) Сохран яе т шабл он, заключенный между \( и \), в специа льн ом мест е или врем енном буфере (hold buffer). Так им спос обом можн о сох ра нять до девят и буферов. Нап рим ер, шаблон: \(That\) or \(this\) сох раняет That во врем енный буф ер номер 1, а this – во временный буфер ном ер 2. Сохраненн ые шаблон ы мог ут быть «восп роизвед ен ы» с помощью конс тр укц ий от \1 до \9. Например, чтобы фраз а That or this превратил ась в this or That, можн о ввести: :%s/\(That\) or \(this\)/\2 or \1/ Внутр и строк и поиск а или замен ы такж е можно исп ользов ать обо значен ие \n. Нап ример: :s/\(abcd\)\1/alphabet-soup/ мен яет abcdabcd на alphabet-soup1. \< \> Соо тв етств уе т символам в начале (\<) или в конце (\>) слова. Нач ало и кон ец слов а опр еделяю тс я либ о по знак у препинан ия, либо по про 1 Это работ ае т в vi, nvi и Vim, но не работает в elvis и vile.
Поиск по шаблону 97 белу. Наприм ер, выражен ие \<ac будет соотв етствов ать тольк о сло вам, нач ин ающимся на ac, таким как action. В свою очер едь, выр аже ние ac\> соответствует слов ам, оканч ивающимся на ac, наприм ер ma niac, а слово react не отвечает ни одному из этих выр аж ений. Обрати те вним ание, что, в отл ичие от \(...\), их можно использов ать не в паре. ~ Соответствует рег улярн ом у выр аж ен ию, которое исп ольз овал ось в пос ледн ем пои ск е. Так, если вы искал и The, то слово Then можно найти при помощ и /~n. Данн ый шабл он прим еняе тс я только при обычн ом пои ске (клавиш ей /)1. Его нельзя зад ать в качестве шабл о на в команде подстан овк и, но он имеет схожее знач ен ие при исполь зовании в качес тве част и строки замен ы в ком анд е подс тановки. Все клоны подд ержив аю т необязат ельн ый (расш иренный) синтакс ис регулярных выражен ий. За подробностям и обр ащ айт есь к раздел у «Рас шир енн ые регул ярные выр ажения» на стр. 152.Выражения в скобках в стандарте POSIX Мы рассказал и об использован ии скобок для сопоставл ен ия с любым из зак люченных в них симв олов, нап рим ер [a-z]. Станд арт POSIX ввод ит доп олн ит ельные функцион альные возм ожн ости для сопост авлен ия с букв ами друг их алфавитов. Нап ример, франц узс кое è – это бук ва, но в обычн ый класс симв олов [a-z] она не вход ит. Дополнит ельн о в этом стандарт е введен ы пос лед ов ательн ости симв ол ов, с кот орыми нужн о обр ащаться как с един ым блоком при поиск е соотв етс тв ия и при упоря доч ен ии (сортировке) строков ых данн ых. Кром е тог о, в POSIX станд артиз иров ан а терминол ог ия. Нап ример, групп а символов в скобк ах называется группов ым выраж ение м (bracket expression). Внутри так их выр аж ен ий, пом им о лит еральных симв ол ов (a, ! и прочие), могут прис утств овать доп олн ит ельн ые комп оненты: Классы симв олов Класс симв ол ов POSIX состои т из ключев ых слов, зак люч енн ых меж ду [: и :]. Ключев ые слов а опис ывают разл ичные классы символ ов, так ие как алф ав итные, управл яющие симв олы и т. д. (см. табл. 6.1). Объединенные символ ы Объединенн ый симв ол – это мног осимв ольн ая пос лед оват ельн ость, расс матр ив аемая как един ое цел ое. Ее сос тавл яю т символ ы, заклю ченные между [. и .].1 Это довольно странн ая особенность ориг инальног о vi. После ее исп ользова ния сохран енным шаблон ом поиска станов ится новый текст, набранный по сле ~, а не сов окупный новый шаблон, как можн о было бы ожидать. Кроме тог о, ни один из клон ов так себя не ведет. Так что хоть так ая функция и су ществует, мы не буд ем рек ом ендовать ею польз ов аться.
98 Глава 6. Глобальная заменаКласс ы эквивал ентнос ти Класс эквивалентности – это список симв ол ов, котор ые считаютс я эквив алентными, наприм ер e и è. Этот класс содерж ит имен ов анн ый элемент из конк ретной локали, стоящ ий межд у [= и =].Все три конструкц ии должн ы нах од итьс я в квадр атн ых скобк ах скобкового выр аж ения. Наприм ер, [[:alpha:]!] соо тв етствует любому один очному символ у или восклиц ательн ом у знаку, а [[.ch.]] – объединенном у элемент у ch, а не бук в ам c или h. Во французской локал и [[=e=]] соотв етствует бук вам e, è и é. Классы и символ ы соо тветс тв ия пок аз аны в табл. 6.1.Таблиц а 6.1. Классы символ ов POSIXКласс Соотв етствующ ие симв олы[:alnum:] Бук в енн о-цифровые символы[:alpha:] Алфав итные симв олы[:blank:] Символы проб ела и табуляц ии[:cntrl:] Управляющие символы[:digit:] Цифр овые символы[:graph:] Печ ат аемые и вид имые символ ы (не-пробелы)[:lower:] Строчн ые символы[:print:] Печатаем ые симв ол ы (включ ая пробельные)[:punct:] Знаки преп ин ан ия[:space:] Пробельные символ ы[:upper:] Прописные символ ы[:xdigit:] Шес тн ад цатеричные цифр ы В сист емах HP-UX 9.x (и более нов ых) vi подд ерж ивает скобк ов ые вы ражен ия POSIX. То же касае тс я /usr/xpg4/bin/vi (но не /usr/bin/vi) в So laris. Эти возм ожнос ти такж е реализован ы в nvi, elvis, Vim и vile. В ча стн ости, соврем енн ые сист ем ы GNU/Linux чувствит ельн ы к локали, выб ранной во врем я уст ановк и, поэ тому можн о ожидать раз умн ых ре зульт атов при пои ске прописных и строчных букв, исп ольз уя скобко вые выраж ения POSIX.Метасимволы, используемые в строках замены При глобальн ой замене опис анн ые выше мет ас имв олы рег ул ярных вы ражен ий имеют особ ое знач ен ие тольк о в строке пои ска (перв ой част и) ком анды. Например, при исп ользов ан ии след ующей ком анды: :%s/1\. Start/2. Next, start with $100/
Поиск по шаблону 99обр ат ите вним ание, что в строк е замены симв ол ы . и $ поним аю тс я буквальн о, так что вам не нужно их экр аниров ать. Более тог о, предп оложим, что вы ввели: :%s/[ABC]/[abc]/gЕсл и в данн ом случ ае вы рассчитывали зам енить A на a, B на b и C на c,то будет е разо чаров аны. Пос кольку в строке замены скобки вед ут себякак обычн ые символ ы, эта команд а зам ен ит люб ое вхож ден ие A, B илиC на пятисимв ольн ую строк у [abc].Для разр еш ения подобной проблем ы следуе т как-то опр едел ить регул ируемую строку зам ены. К счас тью, существуют дополн ительн ые метасимв олы, имеющ ие особое значение в строк е зам ены.\n Заменяетс я на текст, соответс тв ующий n-му шаблону, сох раненному ранее с пом ощью ком анд \( и \), где n – это числ о от 1 до 9, и сох ра ненн ые ранее шаблоны (нах одящиеся во временных буф ер ах) счита ютс я с лев ого края строк и (об использов ан ии \( и \) читайте в пред ы дущ ем разд еле «Мет ас имв олы, исп ользуем ые при пои ске по шабл о ну» на стр. 95).\ Требуе т, чтоб ы следующ ий специальн ый симв ол расс матр ивалс я как обычн ый. Обр атн ая кос ая черта является таким же метас имв о лом в строк е зам ен ы, как и в строке поиска. Чтоб ы опр ед ел ить сам симв ол обр атн ой косой черт ы, введ ит е две черт ы подр яд (\\).& Нах одясь в строк е зам ены, знак & заменяе тс я на весь текст, соотв ет ств ующий строк е поиска. Это полезн о, есл и вам хоч ется изб еж ать пов торного ввод а текста: :%s/Yazstremski/&, Carl/ Строка замены озн ач ает Yazstremski, Carl. Такж е & мож ет зам ен ять пер ем енный шабл он (в зав исим ости от рег ул ярного выр аж ен ия). На прим ер, чтобы зак лючить каждую из строк с 1-й по 10-ю в круглые скобки, введ ите: :1,10s/.*/(&)/ Шабл он поиск а соо тветствуе т всей строке, а симв ол & «воспрои зво дит заново» всю строк у из ваш ег о текста.~ Имеет знач ение, сходное с тем, котор ое использ уе тс я в строк е пои с ка: найд енн ая строк а замен яе тс я на текст, опред еленный в послед ней ком анде подс тан овк и. Это полезн о при пов торен ии исправл ен ий. Например, можн о в одн ой строк е нап ис ать :s/thier/their/, а в дру гой – :s/thier/~/. При этом строк и поиска не обяз ательн о должн ы быть один аков ым и.
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 1 - 50
- 51 - 100
- 101 - 150
- 151 - 200
- 201 - 250
- 251 - 300
- 301 - 350
- 351 - 400
- 401 - 450
- 451 - 500
- 501 - 512
Pages: