Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore 2013_vi_vim_ru

2013_vi_vim_ru

Published by faustkeller, 2017-09-07 00:23:54

Description: 2013_vi_vim_ru

Search

Read the Text Version

Улучшенные возможности редактирования 401(сю­да отн­ ос­ ят­ся та­кие симв­ ол­ ы, как за­бой, ост­ а­нов и  про­чие, опр­ ед­ е­ляем­ ые на­стройк­ ам­ и stty).Зам­ е­тим, что это при­во­дит к инт­ е­рес­ном­ у явл­ ен­ ию. В ред­ акт­ о­рах ти­паvi ком­ ан­ды мог­ ут иметь очень длинн­ ые име­на, обыч­но с уник­ альн­ ы­мине­сколь­ким­ и пер­вы­ми симв­ ол­ ам­ и, поэ­ то­му прин­ им­ аю­ тс­ я абб­ ре­виат­ у­ры ко­манд. В ре­дакт­ ор­ ах ти­па Emacs имен­ а ком­ анд зач­ аст­ ую не уни­каль­ны в перв­ ых симв­ ол­ ах, но подд­ ерж­ка за­верш­ ен­ ия ком­ анд по­звол­ я­ет уменьш­ ить объе­ м ввод­ а.Стеки тегов Стек­ и тег­ ов бы­ли опи­сан­ ы ран­ ее в  раз­дел­ е «Стек­ и тег­ ов» на стр.  157. В  vile  они дос­туп­ны и  раб­ от­ аю­ т неп­ о­средс­ тв­ ен­ным обр­ а­зом. Здесь они нем­ ног­ о от­ли­чаю­ тс­ я от ост­ аль­ных мод­ и­фик­ а­ций vi. Осн­ овн­ ые отличия – в ком­ ан­дах ре­жи­ма vi, исп­ оль­зуе­мых для по­ис­ка по те­гам и их из­вле­че­ ния из стек­ а. В табл. 18.3 по­каз­ а­ны ко­манд­ ы раб­ о­ты с те­га­ми в vile. Таб­лиц­ а 18.3. Ко­манд­ ы раб­ от­ ы с те­га­ми в vileКом­ ан­да Функ­цияnext-tag Про­дол­жае­ т по­иск дру­гих соо­ т­ветс­ тв­ ий в фай­ле tags.pop[!] Изв­ ле­ка­ет пол­ ож­ е­ние курс­ о­ра из стек­ а, восс­ тан­ ав­ли­вая кур­сор в прежн­ ей поз­ и­ции.show-tagstack Созд­ а­ет нов­ ое окн­ о, в кот­ о­ром по­ка­зан стек те­гов. Со­дер­ жим­ ое ок­на мен­ яе­ тс­ я по ме­ре по­мещ­ е­ния тег­ ов в  стек и их из­влеч­ е­ния из не­го.ta[g][!] [tagstring] Ре­дакт­ и­ру­ет файл, сод­ ер­жа­щий tagstring, как опр­ ед­ ел­ е­ но в фай­ле tags. Воск­ ли­цат­ ель­ный знак ! вы­нуж­ д­ ае­ т vile пер­ е­ключ­ итьс­ я в но­вый файл, да­же есл­ и тек­ ущ­ ий бу­фер из­ме­нен и не сох­ ра­нен.Ком­ ан­ды для реж­ им­ а vi опис­ ан­ ы в табл. 18.4.Таб­лиц­ а 18.4. Ком­ ан­ды ра­бот­ ы с тег­ а­ми в ком­ андн­ ом ре­жим­ е vileКом­ анд­ а Функ­ция^] Ищет в файл­ е tags ме­сто­по­лож­ ен­ ие иден­ти­фи­кат­ о­ра, на^T, ^X ^] ко­то­ром сто­ит кур­сор, и пе­рех­ од­ ит на это ме­сто. Те­ку­щая^A ^] по­зи­ция за­нос­ итс­ я в стек те­гов. Вос­стан­ ав­лив­ ае­ т пред­ ыд­ ущ­ ее пол­ о­же­ние из сте­ка те­гов, то есть изв­ ле­кае­ т из не­го один элем­ ент. То же, что ко­манд­ а :next-tag.Как и в друг­ их ред­ акт­ о­рах, спо­соб обр­ а­щен­ ия vile с ко­ман­да­ми для те­гов управл­ яе­ тс­ я оп­циям­ и, как пок­ а­за­но в табл. 18.5.

402 Глава 18. vile: vi Like Emacs (vi как Emacs) Таб­лиц­ а 18.5. Опц­ ии vile для управ­ле­ния те­гам­ и Опц­ ия Функц­ ия pin-tagstack Пои­ ск по те­гам и из­влеч­ ен­ ие из стек­ а не мен­ я­ют тек­ ущ­ ег­ о окн­ а, то есть оно «зак­ реп­ ­ле­но» (pin). По умол­чан­ ию эта оп­ция име­ет знач­ ен­ ие false. tagignorecase По­иск по те­гам иг­но­рир­ у­ет ре­гистр. По умолч­ ан­ ию ус­тан­ овл­ е­ но знач­ ен­ ие false. taglength Опр­ е­дел­ я­ет кол­ ич­ е­ств­ о знач­ им­ ых симв­ о­лов в  те­ге, ко­то­рый ищетс­ я. Знач­ ен­ ие по умолч­ а­нию, равн­ ое нул­ ю, ука­зыв­ а­ет, что знач­ им­ ы все симв­ о­лы. tagrelative При ис­польз­ о­ван­ ии файл­ а tags из дру­гог­ о ка­та­лог­ а име­на фай­ лов из это­го фай­ла tags рас­смат­рив­ а­ютс­ я от­но­си­тель­но тог­ о ка­ тал­ о­га, где расп­ ол­ ож­ ен файл tags. tags Этой опц­ ии мож­но прис­ во­ить спи­сок фай­лов tags, разд­ ел­ енн­ ых проб­ ел­ а­ми, в кот­ ор­ ых нуж­но ис­кать тег­ и. vile заг­ руж­ ае­ т все файл­ ы tags в спец­ и­альн­ ые буф­ е­ры, кот­ о­рые по умол­чан­ ию скры­ ты, но при жел­ ан­ ии их можн­ о от­ре­дак­тир­ ов­ ать. В tags можн­ о пом­ ещ­ ать пе­рем­ ен­ные окр­ у­жен­ ия и мас­ки обо­лочк­ и. tagword Эта оп­ция го­во­рит, что для по­иск­ а те­га нужн­ о брать все слов­ о, на ко­то­ром сто­ит кур­сор, а не ту его часть, ко­тор­ ая нач­ ин­ ае­ т­ся с поз­ и­ции кур­со­ра. По умол­чан­ ию эта оп­ция вы­клю­чен­ а, что де­ла­ет vile со­вмес­тим­ ым с vi.Бесконечная отмена В  принц­ и­пе здесь vile по­хож на дру­гие ре­дакт­ о­ры, но от­ли­чае­ т­ся от них в практ­ ик­ е при­мен­ е­ния. Как в elvis и Vim, в нем мож­но ус­тан­ о­вить пре­дел для от­мен, но, как в nvi, ком­ ан­да . прои­ з­вед­ ет сле­дующ­ ую от­ме­ ну или по­втор­ ен­ ие в за­ви­сим­ ос­ ти от си­туац­ ии. В реж­ им­ е vi пос­ ле­дов­ а­ тель­ные от­ме­ны и воз­вра­ты реа­лиз­ о­ва­ны разн­ ы­ми ком­ анд­ ам­ и. Для управл­ е­ния кол­ ич­ ес­ тв­ ом за­пом­ ин­ аем­ ых изм­ е­нен­ ий vile исп­ оль­зу­ ет опц­ ию undolimit. По умол­ча­нию она равн­ а 10, то есть вы мо­жет­ е отм­ е­ нить 10 пос­ ледн­ их изм­ ен­ ен­ ий. Есл­ и уст­ а­нов­ ить ее рав­ной ну­лю, то бу­ дет осу­ще­ств­ ­лен­ а по­ист­ ин­ е «бес­ко­неч­ная отм­ е­на», но это мож­ ет пот­ ре­ бо­вать боль­ших объе­ мов па­мя­ти. Что­бы на­чать от­ме­ну, наб­ ер­ ит­ е сна­чал­ а ко­ман­ды u или ^X u. По­сле этог­ о каж­дый по­сле­дую­щий ввод симв­ о­ла . при­ве­дет к  но­вой от­ме­не. Как и в vi, две ко­ман­ды u про­сто пе­рек­ люч­ а­ют сос­ тоян­ ие из­ме­не­ния1, одн­ а­ ко ^X u дейс­ т­ви­тель­но сдел­ а­ет нов­ ую отм­ ен­ у. Ко­манд­ а ^X r вы­полн­ я­ет воз­врат. Ес­ли вве­сти . по­сле ^X r, то он пов­ то­ ритс­ я. К ком­ анд­ ам ^X u и ^X r мож­но доб­ ав­ ить чис­ло, пос­ ле че­го vile про­ из­ве­дет нужн­ ое кол­ ич­ ес­ тв­ о от­мен или возв­ ра­тов. 1 Отм­ ен­ ен­ о или не от­мен­ ен­ о. – Прим. на­уч. ред.

Улучшенные возможности редактирования 403Строки произвольной длины и двоичные данные vile мож­ ет ред­ акт­ ир­ о­вать файл­ ы со строк­ ам­ и прои­ зв­ ольн­ ой дли­ны и с про­изв­ ольн­ ым числ­ ом строк. Прог­ рамм­ а авт­ о­ма­ти­чес­ ки под­дер­жив­ ае­ т дво­ичн­ ые данн­ ые. Для этог­ о не треб­ у­етс­ я ни­как­ их спец­ и­альн­ ых ком­ анд или опц­ ий. Для ввод­ а 8-раз­ рядн­ о­го сим­вол­ а на­жмит­ е ^V, а зат­ ем x и две ше­ст­над­ ца­тер­ ичн­ ые циф­ ры, либ­ о 0 и три вось­ме­ричн­ ые циф­ры, ли­бо три де­сят­ ич­ные цифр­ ы. Так­же можн­ о ввес­ ти 16-раз­ряд­ные данн­ ые Unicode, есл­ и на­жать ^V, за­ тем u, пос­ ле че­го ввес­ ти до че­тыр­ ех шес­ тн­ ад­ ца­тер­ ичн­ ых цифр. Есл­ и знач­ е­ние опц­ ии file-encoding для те­ку­щег­ о бу­фе­ра – одн­ о из юни­ко­дов­ ских (utf-8, utf-16 или utf-32), vile сох­ ран­ яе­ т его нап­ ря­мую как UTF-8, отоб­ ра­жая его сог­ ласн­ о возм­ ож­нос­ тям терм­ ин­ ал­ а или дисп­ лея. Та­ким об­ра­зом, мы приш­ ли к те­ме лок­ ал­ из­ а­ции. Поддержка локализации На про­тя­же­нии мног­ их лет vile имел лишь за­ча­точ­ную подд­ ерж­ку ло­ ка­лей. Час­тичн­ о это объя­ сн­ я­лось тем, что на раз­лич­ных платф­ ор­мах (за иск­ люч­ ен­ ие­ м фирм­ ен­ных сис­тем UNIX) эта подд­ ерж­ка бы­ла руд­ и­мен­ тар­ной. В vile прис­ утс­ тв­ ов­ а­ли собс­ тв­ ен­ные табл­ иц­ ы тип­ ов сим­во­лов (то есть управ­ляю­щие, чи­слов­ ые, пе­ча­тае­мые, зна­ки преп­ ин­ ан­ ия, а так­же исп­ оль­зуем­ ые в  име­нах фай­лов, мас­ках сим­во­лов и  обо­лоч­ке), что по­ звол­ я­ло ука­зать, как­ ие из не-ASCII симв­ о­лов яв­ляю­ т­ся печ­ ат­ аем­ ы­ми. Врем­ ен­ а ме­нял­ ись, и vile ме­нялс­ я со­от­вет­ств­ ен­но по­требн­ о­стям поль­ зо­ват­ ел­ ей. При­ве­дем крат­кий пе­ре­чень изм­ ен­ ен­ ий, упо­ряд­ о­чен­ных ло­ гич­ е­ски, а не по хро­но­лог­ ии разр­ а­ботк­ и: • Теп­ ерь vile имп­ орт­ ир­ уе­ т симв­ оль­ные табл­ иц­ ы с хост­ а и пред­ ост­ ав­ ляе­ т ко­ман­ды для их изм­ е­не­ния че­рез скрип­ты, а не сод­ ер­жит фик­ сир­ ов­ анн­ ые табл­ иц­ ы симв­ ол­ ов.1 • Рег­ у­ляр­ные вы­раж­ ен­ ия vile подд­ ер­жив­ а­ют клас­сы симв­ о­лов POSIX, а так­же класс­ ы, со­отв­ етс­ т­вую­щие соб­ств­ енн­ ым ти­пам симв­ ол­ ов про­ грам­мы. • Ред­ акт­ ор под­держ­ и­ва­ет изв­ ле­чен­ ие лек­си­чес­ ких еди­ниц (ток­ е­нов, to­ kens) с  экр­ ан­ а, нап­ ри­мер для tags, скрип­тов и  проч­ е­го. Раньш­ е это свой­ст­во под­раз­ у­ме­ва­ло смесь про­ве­рок на тип сим­во­ла со спе­ци­аль­ ным син­такс­ и­чес­ ким ана­ли­зат­ ор­ ом. Сей­час это тольк­ о рег­ у­лярн­ ые выр­ аж­ е­ния без необходимости в доп­ олн­ ит­ ельн­ ой лог­ ик­ е ана­ли­за­то­ра. • Ред­ акт­ ир­ ов­ ан­ ие фай­ла, со­дер­жащ­ е­го 8-раз­ряд­ные данн­ ые. Нап­ ри­ мер, пред­ставл­ ен­ ие данн­ ых в код­ и­ровк­ е ISO-8859-7 (Греч­ ес­ кая), ко­ гда ло­каль хос­та исп­ оль­зуе­ т UTF-8, мо­жет оказ­ атьс­ я неп­ рос­ тым де­ лом. При старт­ е vile прог­ рамм­ а про­вер­ я­ет, зак­ анч­ ив­ ае­ тс­ я ли ло­каль1 Эта функ­ция по­лезн­ а даж­ е на фир­менн­ ых сис­тем­ ах UNIX, где не всег­ да име­ютс­ я пра­вильн­ ые таб­ли­цы.

404 Глава 18. vile: vi Like Emacs (vi как Emacs) на UTF-8 (или на схож­ ие симв­ ол­ ы), нап­ ри­мер el_GR.UTF-8. Ес­ли да, то ред­ ак­тор подд­ ер­жи­вае­ т ре­дакт­ ир­ ов­ ан­ ие в  со­от­вет­ст­вующ­ ей 8-раз­ ряд­ной лок­ ал­ и, нап­ рим­ ер el_GR. • Анал­ о­гичн­ о при ре­дак­ти­ро­ван­ ии файл­ ов в  сред­ е хост­ а, под­дер­жи­ ваю­щей UTF-8, буд­ ут встре­чатьс­ я фай­лы в код­ и­ров­ке UTF-8. В бол­ ее нов­ ой вер­сии можн­ о прик­ аз­ ать vile сох­ ран­ ять фай­лы в раз­лич­ных код­ ир­ овк­ ах Unicode и счи­ты­вать те же код­ и­ров­ки. Подд­ ер­жи­ва­етс­ я 8-разр­ ядн­ ая мод­ ель ре­дакт­ и­ров­ ан­ ия, в ко­то­рой бу­фер­ ы, от­меч­ енн­ ые как 8-раз­рядн­ ые, прео­ бр­ аз­ у­ют­ся в 8-раз­рядн­ ую код­ и­ров­ку, а буф­ е­ ры в Unicode ре­дак­ти­рую­ тс­ я неп­ о­средс­ т­венн­ о (то есть без прео­ б­раз­ о­ ван­ ия). Все это – расш­ и­ре­ния. На кажд­ ом этап­ е все еще ост­ а­ют­ся стар­ ые функ­ ции. Есть и дру­гие асп­ ект­ ы ло­ка­ли­за­ции, та­кие как фор­мат со­общ­ е­ний и по­ ряд­ ок срав­не­ния тек­ста, но vile их не расс­ матр­ и­вае­ т. Форматы файлов Ког­ да vile счит­ ы­ва­ет файл, он дел­ ае­ т не­скольк­ о предп­ о­ло­жен­ ий о его сод­ ерж­ и­мом, чтоб­ ы пред­ста­вить поль­зов­ ат­ е­лю по­нят­ные данн­ ые: • Про­вод­ итс­ я пров­ ерк­ а на на­ли­чие у  польз­ о­ват­ е­ля прав на зап­ ись файл­ а. • Про­вер­ я­етс­ я тип конц­ а строк­ и (CR, LF или CR/LF). • Де­лае­ тс­ я про­верк­ а от­мет­ ок по­ряд­ка сле­дов­ а­ния байт­ ов для Unicode. • Пров­ е­ряе­ тс­ я, ис­польз­ у­ет­ся ли мног­ об­ ай­тов­ ая ко­дир­ ов­ка Unicode. На ос­но­ве этих пров­ ер­ ок про­грамм­ а ус­тан­ авл­ ив­ ае­ т свойс­ тв­ а (они наз­ ы­ ва­ют­ся «реж­ и­ма­ми») для толь­ко что счит­ анн­ ог­ о бу­фер­ а, ко­то­рые при­ ме­няю­ т­ся к этом­ у буф­ ер­ у. Кроме того, vile мож­ ет пре­об­раз­ ов­ ыв­ ать дан­ ные при чтен­ ии сле­дующ­ им об­раз­ ом: • Удал­ ять симв­ ол кон­ца строк­ и из каж­дой строк­ и, за­пом­ ин­ ая соо­ тв­ ет­ ств­ ую­щий реж­ им recordseparator. • Ес­ли у файл­ а нет зав­ ер­шающ­ е­го пер­ ен­ ос­ а строк­ и, про­грамм­ а ус­та­ нав­ли­вае­ т опц­ ию nonewline. • Пе­ре­вод­ ить данн­ ые UTF-16 и UTF-32 в UTF-8, за­по­мин­ ая соо­ т­вет­ст­ вую­щую опц­ ию file-encoding. Ко­гда vile пол­ у­чае­ т ко­ман­ду со­хра­нить бу­фер в  файл, он исп­ ольз­ уе­ т эти лок­ аль­ные опц­ ии для восс­ тан­ ов­лен­ ия фай­ла.Инкрементный поиск Как упом­ ин­ а­лось ранее в разд­ е­ле «Ин­кре­мент­ный пои­ ск» на стр. 162, в vile инк­ ре­мент­ный по­иск осущ­ ес­ т­вл­ яе­ тс­ я ком­ анд­ ам­ и ^X S и ^X R. Что­ бы его акт­ ив­ и­ров­ ать, не нужн­ о уст­ а­нав­лив­ ать как­ ую-ли­бо опц­ ию.

Улучшенные возможности редактирования 405 При вво­де кур­сор пе­ре­ме­щае­ тс­ я по файл­ у, все­гда поп­ ад­ ая на перв­ ый симв­ ол текс­ та, где об­на­руж­ ен­ о соо­ т­вет­ст­вие. ^X S про­из­во­дит инк­ ре­ ментн­ ый по­иск впе­ред по файл­ у, а ^X R – в об­рат­ном на­прав­лен­ ии. Воз­мож­но, вы за­хо­ти­те доб­ а­вить в файл .vilerc сле­дую­щие ком­ анд­ ы (про них буд­ ет расс­ ка­зан­ о позж­ е в разд­ е­ле «Мо­дель ре­дакт­ и­ров­ ан­ ия vi­le» на стр. 411), чтоб­ ы ин­крем­ ентн­ ый по­иск про­изв­ о­дилс­ я бол­ ее зна­ком­ ым­ и команд­ а­ми по­иск­ а / и ?: bind-key incremental-search / bind-key reverse-incremental-search ? Так­же пред­ставл­ яе­ т ин­тер­ ес воз­мож­ность «visual match» (ви­зуал­ из­ а­ ции сов­пад­ ен­ ий), ко­гда под­све­чив­ а­ют­ся все вхо­ж­де­ния ис­ко­мо­го вы­ра­ жен­ ия. Сле­дую­щая строк­ а в файл­ е .vilerc: set visual-matches reverse предп­ ис­ ы­ва­ет vile исп­ ольз­ ов­ ать для виз­ уал­ и­за­ции сов­па­ден­ ий инв­ ер­ сию цве­та. По­скольк­ у ино­гда под­светк­ а мо­жет усл­ ож­нять прос­ мотр, ком­ анд­ а = вык­ люч­ ае­ т лю­бую те­кущ­ ую подс­ вет­ку, по­ка вы не вве­дет­ е но­вый шаб­лон пои­ с­ка.Прокрутка влево-вправо Как упом­ ин­ а­лось ра­нее в раз­дел­ е «Прок­ рутк­ а вле­во-вправ­ о» на стр. 163, так­ ая про­крут­ка в vile вклю­чае­ т­ся опц­ ие­ й :set nolinewrap. В от­ли­чие от друг­ их ре­дакт­ о­ров, здесь она уст­ ан­ овл­ ен­ а по умолч­ а­нию. Длинн­ ые стро­ки от­меч­ аю­ тс­ я сле­ва и спра­ва знач­ка­ми < и >. Зна­че­ние sideways оп­ ре­де­ляе­ т ко­лич­ ес­ т­во симв­ ол­ ов, на кот­ о­рые vile сме­щае­ т эк­ран при про­ крутк­ е влев­ о или впра­во. Ес­ли sideways уст­ а­нов­ ить равн­ ым ну­лю, каж­ дая про­крутк­ а пе­рем­ ес­тит экр­ ан на одн­ у треть. Ина­че экр­ ан бу­дет сме­ щать­ся на за­данн­ ое ко­ли­че­ст­во симв­ ол­ ов.Визуальный режим vile отл­ ич­ ае­ т­ся от elvis и Vim в том, как он под­свеч­ и­ва­ет текст, ожи­ даю­щий об­раб­ от­ку. Ре­дакт­ ор исп­ ольз­ у­ет ком­ ан­ду «вы­де­лен­ног­ о пер­ е­ мещ­ е­ния» (quoted motion) – q. В нач­ а­ле об­лас­ти вы ввод­ ит­ е q, затем люб­ ые ком­ ан­ды пе­ре­ме­ще­ния vi, чтоб­ ы до­бр­ ать­ся до кон­ца об­лас­ти, и сно­ва наж­ и­мае­те q, что­бы за­кон­ чить вы­де­лен­ное пер­ ем­ е­ще­ние. vile подс­ ве­тит выд­ ел­ ен­ный текст. Арг­ ум­ ент­ ы ко­манд­ ы q зад­ аю­ т тип под­светк­ и. 1q (то же, что и q) вы­пол­ ня­ет точ­ную под­светк­ у, 2q под­све­чив­ ае­ т толь­ко строк­ и, а 3q вы­полн­ я­ет прям­ о­угольн­ ое вы­дел­ ен­ ие. Как прав­ ил­ о, выд­ е­лен­ное пе­рем­ е­щен­ ие исп­ ольз­ уе­ тс­ я в со­че­тан­ ии с опе­ ра­тор­ ом, так­ им как d или y. Так­ им обр­ а­зом, d3qjjwq уда­лит пря­мо­уголь­ ник, за­данн­ ый пе­рем­ ещ­ ен­ ие­ м. Есл­ и ис­поль­зо­вать вы­де­ле­ние без опе­ра­ то­ра, об­ласть ост­ ае­ т­ся под­свеч­ ен­ной, и к ней мож­но об­рат­ итьс­ я наж­ а­ тие­ м ^S. Та­ким обр­ аз­ ом, d ^S уда­лит под­свеч­ ен­ную об­ласть.

406 Глава 18. vile: vi Like Emacs (vi как Emacs) Кроме того, прям­ оу­ гольн­ ые обл­ аст­ и мог­ ут зад­ ав­ ать­ся метк­ ам­ и1. Как из­вестн­ о, мет­ка мож­ ет ис­польз­ о­вать­ся для от­сылк­ и ли­бо к оп­ред­ е­лен­ ном­ у симв­ ол­ у (ко­гда к ней обр­ ащ­ а­ютс­ я по `), ли­бо к оп­ред­ ел­ ен­ной стро­ ке (ко­гда к ней обр­ ащ­ аю­ тс­ я по '). Кром­ е тог­ о, ссыл­ка на метк­ у (ска­жем, мет­ку, зад­ анн­ ую ком­ анд­ ой mb) с пом­ о­щью `b вме­сто 'b ме­ня­ет тип про­из­ вод­ и­мой операции – d'b удал­ ит на­бор строк, а  d`b – част­ и двух строк и строк­ и межд­ у ним­ и. Исп­ оль­зов­ ан­ ие ссыл­ки на мет­ку в вид­ е ` даст бо­ лее «точн­ ую» обл­ асть, чем ссыл­ка на мет­ку вид­ а '. В vile есть ссылк­ а на метк­ у третье­ й раз­нов­ идн­ о­сти. Ком­ ан­да \ мож­ ет исп­ оль­зо­ватьс­ я как нов­ ый спос­ об ссылк­ и на метк­ у. Сам­ а по се­бе она ве­ дет се­бя как ` и пе­рем­ ещ­ а­ет курс­ ор на тот симв­ ол, где бы­ла ус­та­новл­ ен­ а мет­ка. Ес­ли же ее со­че­тать с  опер­ а­тор­ ом, то ее по­вед­ е­ние ме­няе­ т­ся. Ссылк­ а на мет­ку стан­ о­витс­ я «пря­моу­ гольн­ ик­ ом», так что дей­ств­ ие d\b удал­ ит этот прям­ оу­ гольн­ ик из симв­ ол­ ов, угл­ ы ко­тор­ о­го опр­ е­дел­ я­ютс­ я по­ло­же­ни­ем курс­ ор­ а и симв­ о­лом, на ко­то­ром стои­ т мет­ка b. Клав­ иш­ и Ре­зуль­тат ma The 6th edition of <citetitle>Learning the vi Editor</citetitle> brings the book into the late 1990&rsquo;s. In particular, besides the &ldquo;original&rdquo; version of <command>vi</command> that comes as a standard part of every Unix system, there are now a number of freely available &ldquo;clones&rdquo; or work-alike editors. Уст­ ан­ ов­ ить на b в book мет­ку a. 3jfr The 6th edition of <citetitle>Learning the vi Editor</citetitle> brings the book into the late 1990&rsquo;s. In particular, besides the &ldquo;original&rdquo; version of <command >vi</command> that comes as a standard part of every Unix system, there are now a number of freely available &ldquo;clones&rdquo; or work-alike editors. ^A ~\a Пе­ре­мес­тить курс­ ор на r в number, чтоб­ ы от­ме­тить про­ти­во­по­лож­ ный угол. The 6th edition of <citetitle>Learning the vi Editor</citetitle> brings the BOOK INTO The late 1990&rsquo;s. In particulAR, BESIDES the &ldquo;original&rdquo; version of <command>vi</COMMAND> that comes as a standard part of every Unix system, there are nOW A NUMBER of freely available &ldquo;clones&rdquo; or work-alike editors. По­мен­ ять ре­гистр пря­мо­уголь­ник­ а, ог­ра­ни­чен­ног­ о метк­ ой a. 1 Спа­сиб­ о По­лу Фокс­ у (Paul Fox) за это объя­ с­нен­ ие.

Помощь программисту 407Ком­ ан­ды, зад­ аю­щие про­изв­ оль­ные обл­ ас­ти и про­из­во­дя­щие над ним­ иопе­ра­ции, обоб­щен­ ы в табл. 18.6.Табл­ иц­ а 18.6. Ком­ анд­ ы vile для блоч­ног­ о ре­жим­ аКом­ анд­ а Опе­ра­цияq^A r Нач­ а­ло и ко­нец выд­ е­ленн­ ог­ о пе­ре­мещ­ ен­ ия.> Отк­ рыв­ а­ет пря­моу­ голь­ник.< Смещ­ е­ние тек­ста вправ­ о. То­же, что и ^A r, ко­гда обл­ асть яв­ляе­ т­y ся прям­ оу­ голь­ни­ком.c Смещ­ ен­ ие текс­ та влев­ о. То­же, что и d, ког­ да об­ласть яв­ляе­ тс­ я прям­ о­уголь­ник­ ом.^A u^A l Ко­пир­ ов­ а­ние всей обл­ ас­ти. vile зап­ ом­ и­нае­ т, что она был­ а прям­ о­^A ~ уголь­ной.^A SPACEp, P Изм­ е­нен­ ие обл­ аст­ и. Для неп­ ря­мо­угольн­ ой обл­ аст­ и уда­ляе­ т весь текст меж­ду ко­нечн­ ы­ми точк­ а­ми и пер­ ех­ од­ ит в реж­ им встав­ки.^A p, ^A P Есл­ и обл­ асть пря­мо­уголь­ная, зап­ ра­шив­ ае­ т ввод текс­ та, ко­тор­ ый бу­дет за­полн­ ять стро­ки. Ме­няе­ т рег­ истр всех букв обл­ ас­ти на проп­ ис­ной. Мен­ яе­ т рег­ истр всех букв об­лас­ти на строчн­ ый. Пе­ре­клю­ча­ет рег­ истр всех букв обл­ ас­ти. Зап­ олн­ я­ет обл­ асть проб­ е­лам­ и. Встав­ля­ет текст обр­ атн­ о. vile вып­ олн­ яе­ т прям­ оу­ голь­ную встав­ ку, ес­ли ис­ходн­ ый текст был прям­ о­уголь­ным. Зас­ тавл­ я­ет ра­нее скоп­ и­ров­ ан­ный текст вста­витьс­ я обр­ ат­но, как есл­ и бы он был прям­ о­угольн­ ым. В ка­чес­ т­ве ши­ри­ны прям­ оу­ голь­ ник­ а бер­ етс­ я длин­ а са­мой длин­ной ско­пир­ о­ван­ной стро­ки.Помощь программисту В  этом разд­ е­ле рас­сматр­ ив­ а­ют­ся воз­можн­ ос­ ти обл­ егч­ ить раб­ от­ у про­ грам­ми­ста в vile.Ускорение цикла редактирование-компиляция Для управл­ е­ния раз­раб­ отк­ ой прог­ рам­мы vile исп­ оль­зу­ет две ком­ ан­ды реж­ и­ма vi, ко­тор­ ые при­ве­де­ны в табл. 18.7. Про­грам­ма по­ним­ ае­ т соо­ б­щен­ ия Entering directory XXX и Leaving direc­ tory XXX, ге­не­ри­рую­щие GNU make, что по­звол­ яе­ т ей оты­скать нужн­ ый файл, да­же ес­ли он на­ход­ итс­ я в дру­гом кат­ а­ло­ге. Анал­ из соо­ бщ­ е­ний об ошиб­ках осущ­ е­ств­ л­ я­етс­ я с пом­ о­щью рег­ у­ляр­ных выр­ а­жен­ ий, хран­ я­щихс­ я в бу­фер­ е [Error Expressions]. vile созд­ ае­ т его авт­ о­мат­ ич­ ес­ ки, а зат­ ем исп­ ольз­ уе­ т при наж­ а­тии ^X ^X. При нео­ б­ход­ и­мо­

408 Глава 18. vile: vi Like Emacs (vi как Emacs) сти ту­да мож­но до­бав­лять вы­раж­ ен­ ия. То­гда прог­ рамм­ а исп­ оль­зу­ет расш­ и­рен­ный син­так­сис, поз­ во­ляю­щий указ­ ы­вать рас­пол­ о­же­ние имен фай­лов, ном­ ер­ ов строк, столб­цов и проч­ ег­ о в соо­ б­ще­ни­ях об ошиб­ках. В он­лайн-справк­ е мож­но проч­ и­тать подр­ обн­ о­сти, хот­ я, воз­мож­но, вам не при­дет­ся де­лать ник­ ак­ их из­мен­ е­ний, пос­ кольк­ у да­же в  из­нач­ аль­ ном ви­де все раб­ от­ а­ет хо­рош­ о. Таб­ли­ца 18.7. Ко­ман­ды vile для разр­ а­бот­ки про­грамм в реж­ им­ е vi Ком­ ан­да Функ­ция ^X !command ENTER За­пус­ка­ет ком­ анд­ у, а ее вы­вод сох­ ра­няе­ т в буф­ ер под ^X ^X име­нем [Output]. Нах­ о­дит сле­дующ­ ую ошиб­ку. vile дел­ а­ет синт­ акс­ и­че­ ский ана­лиз выв­ о­да и пе­ре­мещ­ ае­ т на по­зиц­ ию след­ ую­ щей ошиб­ки. Пои­ ск ошиб­ ок в vile так­же отс­ леж­ и­ва­ет изм­ ен­ ен­ ия фай­ла, учи­ты­вая встав­ки и уда­лен­ ия при пе­ре­хо­де от одн­ ой ошибк­ и к друг­ ой. По­иск ошиб­ ок прим­ е­ня­ет­ся к са­мом­ у по­след­не­му бу­фер­ у, созд­ анн­ ом­ у пу­тем чтен­ ия выв­ о­да ком­ анд­ ы обол­ оч­ки. На­при­мер, ко­манд­ а ^X!command сге­нер­ и­ру­ет буф­ ер с име­нем [Output], а ко­ман­да :e !command – с имен­ ем [!command]. Пои­ ск оши­бок под­стро­итс­ я соо­ т­ветс­ тв­ ую­щим обр­ аз­ ом. Исп­ ольз­ уя ком­ анд­ у :error-buffer, можн­ о вы­пол­нить пои­ ск ошиб­ ок в лю­ бом прои­ зв­ оль­ном буф­ е­ре (а не тольк­ о в том, ко­то­рый явл­ яе­ тс­ я вы­во­дом ко­манд обол­ оч­ки). Это по­зво­лит ис­польз­ ов­ ать по­иск ошиб­ ок для пре­ дыд­ ущ­ е­го выв­ од­ а комп­ и­ля­тор­ а или ко­ман­ды egrep.Подсветка синтаксиса vile подд­ ерж­ и­вае­ т подс­ ветк­ у синт­ ак­си­са во всех свои­ х кон­фи­гур­ а­ция­ х. Для рас­цвет­ки син­так­си­са ис­польз­ ую­ тс­ я спе­ци­аль­ные про­грам­мы – фильтр­ ы син­такс­ ис­ а. Они мог­ ут быть встро­ен­ным­ и в vile или за­пус­ кать­ся как внеш­ние. Ред­ ак­тор пос­ ы­лае­ т со­держ­ им­ ое рас­кра­шив­ ае­мо­го бу­фер­ а в фильтр син­такс­ ис­ а, счи­ты­вае­ т вер­сию с раз­метк­ ой и при­мен­ я­ ет эту раз­метк­ у для рас­краск­ и буф­ ер­ а. Встро­ен­ные фильт­ры раб­ от­ аю­ т быс­ т­рее внешн­ их прог­ рамм, и обо­ лоч­ка не ока­зы­вае­ т влия­ния на их отоб­ раж­ ен­ ие в тер­мин­ а­ле. На не­ ко­тор­ ых плат­форм­ ах мож­ ет осущ­ ес­ т­вл­ ять­ся дин­ а­ми­чес­ кая под­ грузк­ а фильтр­ ов син­такс­ и­са. Это по­звол­ я­ет умень­шить раз­мер ис­ полн­ яем­ о­го мо­ду­ля прог­ рам­мы, хоть и не дае­ т та­кой же скор­ ос­ ти, как при встро­ен­ных фильтр­ ах. На нас­ тоящ­ ий мом­ ент су­щес­ тв­ у­ет 71 прог­ рамм­ а, а  так­же отд­ ельн­ ая прог­ рамм­ а для man-стра­ниц UNIX. Нек­ от­ о­рые про­грамм­ ы ис­польз­ у­ ютс­ я для файл­ ов нес­ коль­ких тип­ ов. На­прим­ ер, C, C++ и  Java име­ют сход­ный синт­ ак­сис, но разн­ ые клю­че­вые слов­ а.

Помощь программисту 409в vile есть макр­ ос­ ы, зап­ уск­ аю­щие фильтр­ ы син­так­си­са либ­ о ав­то­ма­ти­че­ски при из­ме­не­нии бу­фер­ а, ли­бо по зап­ рос­ у. Они при­вед­ ен­ ы в табл. 18.8.Табл­ и­ца 18.8. Ком­ ан­ды под­светк­ и син­такс­ и­са в vileКом­ анд­ а Прив­ язк­ а Функ­ция кла­виш:HighlightFilter Выз­ ы­вае­ т под­свет­ку синт­ акс­ и­са для дан­но­го бу­фер­ а. vile выб­ ир­ ае­ т фильтр, осн­ о­выв­ а­ясь на рас­ши­рен­ном свойс­ тв­ е буф­ е­ра, наз­ ыв­ ае­ мом осн­ ов­ным ре­жи­мом (о нем бу­дет рас­ска­ зан­ о поз­же в раз­дел­ е «Осн­ овн­ ые реж­ им­ ы» на стр. 412). Есл­ и фильт­ры встрое­ н­ные, иниц­ иал­ из­ а­ция vile уст­ а­нав­ли­ва­ет ре­жим autocolor, что­бы выз­ вать этот мак­рос че­рез пять се­кунд пос­ ле оконч­ а­ния из­ме­не­ния бу­фер­ а польз­ ов­ а­те­лем.:HighlightFilterMsg ^X-q Прик­ реп­ ­ля­ет под­свет­ку к тек­ у­ще­му бу­фер­ у с по­мо­щью HighlightFilter. По­сле за­верш­ ен­ ия вы­во­дит соо­ б­ще­ниеa.:HighlightClear ^X-Q Очи­щае­ т все подс­ вет­ки для тек­ ущ­ ег­ о буф­ ер­ а. Не влияе­ т на ос­нов­ной реж­ им бу­фер­ а.:set-highlighting Мен­ яе­ т ос­нов­ной реж­ им бу­фе­ра на majormodemajormode и зап­ ус­ка­ет подс­ вет­ку синт­ акс­ ис­ а.:show-filtermsgs По­каз­ ы­ва­ет ошиб­ки фильт­ра синт­ акс­ и­са для тек­ у­ще­го буф­ е­ра. Есл­ и фильтр син­такс­ ис­ а об­на­руж­ и­вае­ т ошиб­ки, он соо­ б­щае­ т о  них, и vile ото­браж­ ае­ т их в бу­фе­ре [Filter Messa­ ges], по­звол­ яя пе­рем­ ещ­ ать­ся по по­зи­ция­ м, где бы­ли об­на­ру­жен­ ы ошибк­ и.a Ког­ да в  се­ред­ ин­ е 1990-х под­свет­ка син­так­сис­ а бы­ла впер­вые реа­ли­зов­ ан­ а в vile, бы­ло важ­но пок­ а­зать, что она за­верш­ и­лась. Вре­мен­ а изм­ ен­ ил­ ись – маш­ ин­ ы стал­ и бы­стр­ ее.При кажд­ ом свое­ м за­пуск­ е фильтр синт­ ак­сис­ а счит­ ы­ва­ет один или бо­лее внеш­них фай­лов, со­дер­жа­щих клю­че­вые сло­ва, кот­ ор­ ые нуж­но вы­дел­ ять цве­том, а  такж­ е со­отв­ етс­ тв­ ующ­ ие цвет­ а и  ат­риб­ ут­ ы для них(жирн­ ый, под­черк­нут­ ый, курс­ ивн­ ый и  проч­ ие). Он ищет эти файл­ ы(с  расш­ ир­ е­ние­ м .keywords), ис­польз­ уя имя реж­ им­ а majormode бу­фе­ра.В он­лайн-справк­ е прив­ е­ден­ ы пра­ви­ла для этог­ о пои­ ск­ а. Мож­но исп­ оль­зо­вать мак­рос :which-keywords, что­бы уви­деть, где vile ищет эти фай­лы,а такж­ е где именн­ о он их на­шел. См. при­мер 18.1.При­мер 18.1. При­мерн­ ый выв­ од «:which-keywords cmode»Show which keyword-files are tested for: cmode 

410 Глава 18. vile: vi Like Emacs (vi как Emacs) (* marks found-files) $cwd  ./.c.keywords $HOME ~/.c.keywords ~/.vile/c.keywords $startup-path  * /usr/local/share/vile/c.keywords  major mode, ко­то­рый всег­ да за­канч­ ив­ ае­ тс­ я на «mode»  Ваш те­кущ­ ий ра­бо­чий кат­ а­лог  Путь по­ис­ка скрип­тов vile Фильт­ры син­такс­ и­са vile исп­ ольз­ ую­ т общ­ ий на­бор цве­тов, оп­ре­дел­ ен­ ный как клас­сы: Action, Comment, Error, Ident, Ident2, Keyword, Keyword2, Lit­e­ral, Number, Preproc и Type, не­за­вис­ им­ о от тог­ о, сконф­ иг­ у­рир­ ов­ ан ли vile для X11, тер­мин­ а­ла (termcap, terminfo, curses) или Windows. Боль­ шая часть оп­ре­дел­ ен­ ий ключ­ ев­ ых слов от­сы­ла­ет к класс­ у. Это поз­ во­ляе­ т мен­ ять все цвет­ а, от­ред­ ак­ти­ров­ ав лишь один файл, обычно – $HOME/.vi­ le.keyw­ords. Онл­ айн-справк­ а дае­ т подр­ обн­ о­сти на­строй­ки цве­тов син­ так­сис­ а. С  одн­ ой сто­ро­ны, по прич­ ин­ е осущ­ ес­ т­в­лен­ ия под­свет­ки син­так­сис­ а внеш­ней прог­ рамм­ ой мож­но нап­ ис­ ать сколь­ко угодн­ о под­све­ток для раз­ных язык­ ов. С дру­гой, из-за тог­ о что эти функ­ции ра­бот­ аю­ т на низ­ ком уровн­ е, вы­полн­ е­ние под­ об­ной за­дач­ и не­про­грамм­ ис­ там­ и зат­ руд­ни­ тельн­ о. Он­лайн-справ­ка опи­сыв­ ае­ т, как ра­бо­та­ют фильтр­ ы подс­ ветк­ и. Ка­тал­ ог ftp://invisible-island.net/vile/utilities сод­ ер­жит фильт­ры для рас­ крас­ки фай­лов make, input, perl, HTML и troff, созд­ ан­ные и при­слан­ные поль­зов­ ат­ е­лям­ и. Там же есть мак­ро­сы, кот­ ор­ ые раск­ ра­шив­ аю­ т строк­ и фай­лов RCS по их воз­рас­ту!Интересные особенности vile со­дер­жит ряд инт­ ер­ ес­ных особ­ ен­нос­ тей по те­ме это­го разд­ ел­ а: Мод­ ель ре­дакт­ ир­ ов­ ан­ ия vile Мод­ ель ред­ акт­ и­ро­ва­ния vile силь­но от­ли­чае­ т­ся от мо­дел­ и vi. Взяв за ос­нов­ у конц­ еп­ции Emacs, она обес­пе­чи­ва­ет изм­ ен­ ен­ ие прив­ я­зок кла­ виш и бол­ ее дин­ а­мич­ную ко­мандн­ ую строк­ у. Ос­новн­ ые ре­жим­ ы vile под­дер­жив­ ае­ т «ре­жи­мы» ред­ ак­ти­ро­ва­ния. Это групп­ ы уст­ а­нов­ ок опц­ ий, обл­ ег­чающ­ ие ред­ ак­ти­ров­ ан­ ие файл­ ов оп­ре­де­лен­ног­ о тип­ а. Проц­ е­дур­ный язык Про­цед­ ур­ный язык ред­ ак­тор­ а по­звол­ яе­ т оп­ре­дел­ ять функц­ ии и мак­ рос­ ы, де­лающ­ ие прог­ рам­му бо­лее гиб­кой и прог­ рамм­ и­руе­мой.

Интересные особенности 411 Разн­ о­обр­ аз­ные неб­ оль­шие функ­ции Нес­ кольк­ о не­больш­ их функ­ций для обл­ ег­че­ния пов­ сед­ нев­но­го ре­ дак­ти­ро­ва­ния.Модель редактирования vile В  vi и  его мо­ди­фи­ка­ци­ях функц­ ии ре­дакт­ ир­ о­ван­ ия «за­шит­ ы» в  про­ грамм­ у, а  асс­ оц­ иа­ции меж­ду сим­во­лам­ и ком­ анд и  их дей­ств­ ия­ми за­ фик­си­ров­ а­ны в ко­де. Нап­ ри­мер, кла­виш­ а x удал­ я­ет сим­вол­ ы, а клав­ и­ ша i зап­ ус­ка­ет реж­ им встав­ки. Не обр­ ащ­ ая­ сь к гол­ ов­ о­круж­ и­тельн­ ым фок­ у­сам, вы не смо­же­те пом­ ен­ ять функц­ ио­наль­ность этих двух кла­ виш (ес­ли воо­ бщ­ е смо­жет­ е). Мод­ ель ред­ ак­ти­ров­ а­ния vile, по­луч­ ен­ная из Emacs чер­ ез MicroEMACS, со­всем дру­гая. В ред­ акт­ о­ре есть опр­ е­де­лен­ные имен­ ов­ анн­ ые функ­ции, каж­дая из кот­ ор­ ых вып­ олн­ яе­ т отд­ ель­ную зад­ а­чу ред­ акт­ и­ро­ва­ния, на­ прим­ ер delete-next-character или delete-previous-character. Мно­гие из этих функ­ций прив­ я­зан­ ы к соч­ е­та­ния­ м кла­виш, нап­ рим­ ер delete-next- cha­racter прив­ яз­ ан­ а к кла­виш­ е x.1 vile име­ет раз­лич­ные раз­нов­ идн­ ос­ ти прив­ яз­ ок клав­ иш для ком­ андн­ ог­ о реж­ и­ма, ре­жи­ма встав­ки и  реж­ им­ а вы­де­ле­ния. Здесь мы опи­сыв­ ае­ м прив­ яз­ки для нор­маль­но­го реж­ им­ а ред­ ак­тир­ о­ван­ ия. Сме­нить прив­ яз­ ку очень прос­ то: нужн­ о выз­ вать ком­ анд­ у :bind-key, а  в  ка­чес­ т­ве арг­ у­ мент­ ов за­дать ей имя функ­ции и соч­ е­тан­ ие кла­виш, к ко­тор­ о­му она бу­ дет при­вя­за­на. Как уже упо­мин­ а­лось ран­ ее, в файл .vilerc мож­но по­ мес­тить след­ ующ­ ие ко­манд­ ы: bind-key incremental-search / bind-key reverse-incremental-search ? Они мен­ я­ют ком­ ан­ды пои­ с­ка / и  ? так, что­бы те прои­ зв­ од­ и­ли инк­ ре­ мент­ный пои­ ск. Помимо пред­ оп­ ред­ е­лен­ных функ­ций vile со­дер­жит прос­ той язык про­ грам­мир­ ов­ ан­ ия, по­зво­ляющ­ ий пи­сать про­це­дур­ ы. Учит­ ы­вая это, вы смож­ е­те прив­ я­зать ко­манд­ у, выз­ ы­ваю­щую про­цед­ у­ру, к оп­ред­ е­лен­но­ му со­чет­ а­нию кла­виш. В ка­че­ств­ е свое­ го язы­ка GNU Emacs исп­ оль­зуе­ т чрез­вы­чайн­ о мощн­ ый вар­ и­ант Lisp. В  vile есть бол­ ее прос­ той язык с мень­шим ох­ва­том. Как и в Emacs, ко­мандн­ ая стро­ка vi имее­ т боль­шие ин­те­ракт­ ив­ные воз­ можн­ ос­ ти. Мног­ ие ком­ ан­ды в  кач­ ес­ тв­ е арг­ ум­ ен­та ото­бра­жаю­ т зна­че­ ние по умол­чан­ ию. Вы мож­ е­те либ­ о от­ре­дак­тир­ ов­ ать его под­хо­дящ­ им обр­ аз­ ом, ли­бо при­нять, на­жав на ENTER. При вво­де ко­манд ред­ акт­ и­ро­ ва­ния в реж­ им­ е vi, так­ их как ко­манд­ ы из­мен­ ен­ ия или уда­ле­ния симв­ о­ лов, вы уви­дит­ е от­клик от этой опер­ ац­ ии в стро­ке со­стоян­ ия.1 В vile 9.6 имее­ тс­ я 421 функц­ ия (включ­ ая дос­тупн­ ые толь­ко для конф­ и­гу­ ра­ций X11 или Win32), а пре­до­пре­дел­ енн­ ых при­вя­зок клав­ иш – окол­ о 260.

412 Глава 18. vile: vi Like Emacs (vi как Emacs) «Люб­ о­пытн­ ый» реж­ им ex, о ко­тор­ ом Пол (Paul) го­вор­ ил раньш­ е, луч­ше всег­ о от­ра­жен в  дейс­ т­вии ком­ анд­ ы :s (substitute). Она выд­ а­ет нов­ ое приг­ лаш­ е­ние в трех слу­чая­ х: для вво­да шаб­лон­ а пои­ с­ка и тек­ста зам­ е­ ны, а так­же во фла­гах ко­манд­ ы. В ка­че­ст­ве при­ме­ра предп­ ол­ о­жим, что вам за­хот­ ел­ ось по­мен­ ять в фай­ ле все вхо­жд­ е­ния perl на awk. В дру­гих ред­ ак­то­рах вы бы нап­ и­сал­ и про­ сто :1,$s/perl/awk/gENTER и имен­но это уви­де­ли бы в ко­мандн­ ой строк­ е. След­ ующ­ ие при­мер­ ы по­ка­зыв­ а­ют сод­ ер­жим­ ое ко­манд­ной строк­ и с двое­ то­чие­ м vile по ме­ре вво­да вы­шеу­ каз­ анн­ ой ко­ман­ды: Кла­виш­ и Рез­ уль­тат :1,$s Пер­вая часть ко­манд­ ы зам­ ен­ ы. / substitute pattern: vile за­праш­ ив­ а­ет шабл­ он для пои­ с­ка. Сюд­ а под­ставл­ я­етс­ я люб­ ой ран­ ее ввод­ ивш­ ийс­ я шаб­лон для пов­ тор­но­го ис­поль­зо­ва­ния. perl/ replacement string: На сле­дую­щем раз­де­лит­ е­ле / прог­ рамм­ а по­прос­ ит вве­сти текст за­ ме­ны. Буд­ ет пред­ла­гать­ся лю­бой ран­ ее ис­поль­зов­ ав­ший­ся текст. awk/ (g)lobally, ([1-9])th occurrence on line, (c)onfirm, and/or (p)rint result: У пос­ лед­нег­ о раз­де­лит­ ел­ я ред­ акт­ ор подс­ ка­зыв­ ае­ т не­обяз­ ат­ ельн­ ые флаг­ и. Введ­ ит­ е лю­бой нужн­ ый вам и на­жмит­ е ENTER. vile при­держ­ ив­ а­ет­ся это­го сти­ля во всех под­хо­дящ­ их ко­манд­ ах ex. На­ при­мер, ко­манд­ а чтен­ ия (:r) пред­лаг­ а­ет имя по­следн­ ег­ о счит­ анн­ ог­ о фай­ла. Чтоб­ ы счи­тать его снов­ а, на­жмит­ е ENTER. Нак­ он­ ец, ана­лиз­ ат­ ор ком­ анд ex в vile сла­бее, чем в дру­гих ред­ ак­тор­ ах. На­при­мер, вы не смож­ е­те ис­польз­ о­вать шаб­ло­ны по­иск­ а для за­да­ния диап­ а­зо­на строк (:/now/,/forever/s/perl/awk/g), а  ко­ман­да пе­ре­ме­ще­ния (m) не реал­ из­ о­ва­на. Тем не ме­нее на прак­тик­ е отс­ ут­ст­вие этих функц­ ий не явл­ яе­ тс­ я прег­ ра­дой.Основные режимы Ос­новн­ ой реж­ им (major mode)1 – это сов­ ок­ упн­ ость ус­та­нов­ ок оп­ций, ко­ тор­ ые прим­ ен­ яю­ т­ся при ред­ акт­ ир­ о­ва­нии фай­лов опр­ е­де­ленн­ о­го ти­па. Эти оп­ции, нап­ ри­мер ши­рин­ а та­бу­ля­ции, прим­ ен­ яю­ тс­ я от­дель­но к каж­ до­му бу­фер­ у. vile пре­дос­тавл­ яе­ т оп­ции трех тип­ ов: • Уни­вер­сальн­ ые (Universal), дей­ств­ у­ют во всей про­грамм­ е. • Буф­ ерн­ ые (Buffer), прим­ е­няю­ т­ся к со­держ­ им­ о­му бу­фер­ а па­мя­ти. 1 В док­ у­мент­ а­ции vile это слов­ о пиш­ ет­ся слитн­ о.

Интересные особенности 413• Оконн­ ые (Window), прим­ ен­ яю­ тс­ я к  окн­ ам (в  на­шей тер­мин­ ол­ о­гии это пан­ ел­ и).Уст­ ан­ овк­ и оп­ций для бу­фе­ра (buffer) и для ок­на (window) мо­гут быть ло­каль­ным­ и и гло­бальн­ ым­ и. Люб­ ой буф­ ер (или ок­но, в зав­ ис­ и­мо­сти от оп­ции) мож­ ет иметь собс­ т­венн­ ое прив­ атн­ ое (лок­ аль­ное) знач­ е­ние оп­ции.Ес­ли та­ков­ ог­ о нет, исп­ ольз­ уе­ т­ся глоб­ аль­ное. Осн­ ов­ные реж­ им­ ы ввод­ ятно­вый уро­вень межд­ у лок­ аль­ным­ и и гло­баль­ным­ и пер­ ем­ ен­ным­ и бу­фе­ра, пред­ ос­тавл­ яя зна­чен­ ия опц­ ий, кот­ ор­ ые исп­ ольз­ у­ютс­ я буф­ ер­ ом приотс­ утс­ т­вии у нег­ о их прив­ ат­ных зна­чен­ ий.vile имее­ т два встрое­ нн­ ых ос­новн­ ых реж­ им­ а: cmode для прав­ки про­грамм на C и C++ и реж­ им vile mode для скрип­тов ре­дак­то­ра, ко­то­рыеза­груж­ ен­ ы в буф­ ер­ ы пам­ ят­ и. В реж­ им­ е cmode мож­но исп­ оль­зов­ ать % длясо­отв­ етс­ тв­ ия ком­ анд­ ам пред­про­цесс­ о­ра C (#if, #else и #endif). Прог­ рам­ма вы­полн­ ит авт­ ом­ а­ти­че­скую рас­стан­ овк­ у отс­ ту­пов при вво­де фиг­ ур­ных ско­бок ({ и }) и ос­мыс­лен­ное фор­ма­ти­ров­ ан­ ие комм­ ент­ а­ри­ев C. Зна­чен­ ия опц­ ий tabstop и shiftwidth такж­ е ус­та­навл­ ив­ аю­ т­ся для каж­дог­ оос­новн­ ог­ о ре­жим­ а в отд­ ель­нос­ ти.С пом­ о­щью осн­ овн­ ых реж­ и­мов мож­но исп­ ольз­ о­вать эти функ­ции в про­грам­мах, нап­ ис­ анн­ ых на друг­ их язы­ках. Сле­дующ­ ий при­мер, лю­без­нопре­дос­тавл­ ен­ный Том­ а­сом Дик­ и (Thomas Dickey), опр­ ед­ е­ляе­ т но­вый ос­новн­ ой реж­ им shmode для ре­дак­ти­ров­ а­ния скрип­тов обол­ очк­ и Bourne.(Для друг­ их обо­лоч­ ек стил­ я Bourne, так­ их как ksh, bash или zsh, он то­же подх­ од­ ит.)define-mode shset shsuf \"\.sh$\"set shpre \"^#!\\s*\/.*sh\\>$\"define-submode sh comment-prefix \"^\\s*/[:#]\"define-submode sh comments \"^\\s*/\\?[:#]\\s+/\\?\\s*$\"define-submode sh fence-if \"^\\s*\\<if\\>\"define-submode sh fence-elif \"^\\s*\\<elif\\>\"define-submode sh fence-else \"^\\s*\\<else\\>\"define-submode sh fence-fi \"^\\s*\\<fi\\>\"Пе­рем­ ен­ная shsuf (от shell suffix) опис­ ы­вае­ т при­став­ку к име­ни файл­ а,указ­ ыв­ ающ­ ую, что файл явл­ яе­ т­ся скрипт­ ом обо­лоч­ки. Пе­рем­ енн­ ая shpre(от shell preamble) опи­сыв­ а­ет перв­ ую строк­ у фай­ла, указ­ ы­вающ­ ую, чтов файл­ е со­держ­ ит­ся скрипт обо­лоч­ки. За­тем ком­ ан­да define-submode до­бавл­ яе­ т опц­ ии, прим­ ен­ яем­ ые тольк­ о к  тем буф­ ер­ ам, в  кот­ о­рых былуст­ ан­ овл­ ен соо­ т­ветс­ т­вую­щий осн­ ов­ной ре­жим. В  этом при­ме­ре ус­та­нав­ли­ва­ет­ся ин­тел­лект­ у­альн­ ое фор­ма­тир­ ов­ ан­ ие комм­ ент­ ар­ ие­ в и  ин­телл­ ект­ уа­ льн­ ое пов­ е­де­ние ко­ман­ды % для скрип­тов обо­лоч­ки.Вы­шеп­ ри­вед­ ен­ный прим­ ер подр­ обн­ ее, чем нуж­но. При ис­польз­ о­ван­ ии~with язык скрипт­ ов vile рас­по­знае­ т бол­ ее со­кра­щен­ную за­пись:define-mode sh~with define-submode sh suf \"\.sh$\"

414 Глава 18. vile: vi Like Emacs (vi как Emacs) pre \"^#!\\s*\/.*sh\\>$\" comment-prefix \"^\\s*/[:#]\" comments \"^\\s*/\\?[:#]\\s+/\\?\\s*$\" fence-if \"^\\s*\\<if\\>\" fence-elif \"^\\s*\\<elif\\>\" fence-else \"^\\s*\\<else\\>\" fence-fi \"^\\s*\\<fi\\>\" ~endwith В  скрип­тах иниц­ иал­ и­за­ции vile сод­ ерж­ ат­ся бол­ ее 90 пред­ о­пред­ е­лен­ ных осн­ овн­ ых реж­ и­мов. Чтоб­ ы увид­ еть опр­ ед­ ел­ ен­ ия дост­ уп­ных основ- ных режимов, вос­польз­ уй­тесь ком­ анд­ ой :showmajormodes. Кри­тер­ ии suffix и prefix ис­поль­зую­ тс­ я vile для за­да­ния осн­ овн­ о­го ре­ жим­ а, кот­ о­рый нуж­но при­ме­нить при счит­ ы­ван­ ии фай­ла в  буф­ ер.1 В табл. 18.9 пе­ре­числ­ е­ны все эти кри­тер­ ии. Таб­ли­ца 18.9. Кри­те­рии для осн­ овн­ ых реж­ им­ ов Кри­те­рий Опи­са­ние after Зас­ тавл­ яе­ т вып­ ол­нять про­вер­ку оп­ред­ е­ленн­ о­го ос­новн­ о­го ре­жим­ а по­сле данн­ ог­ о. Как прав­ ил­ о, осн­ ов­ные реж­ им­ ы про­вер­ яю­ т­ся в том по­рядк­ е, в ка­ком они опр­ ед­ ел­ е­ны. before Зас­ тавл­ яе­ т вы­полн­ ять пров­ ер­ку опр­ ед­ ел­ ен­ног­ о ос­новн­ о­го реж­ им­ а пе­ред дан­ным. Как пра­вил­ о, ос­новн­ ые ре­жим­ ы про­вер­ я­ют­ся в том пор­ яд­ке, в ка­ком они опр­ ед­ ел­ ен­ ы. mode-filename (mf) Рег­ ул­ яр­ное вы­раж­ ен­ ие, опр­ е­дел­ яю­щее име­на файл­ ов, для кот­ ор­ ых бу­дет уст­ а­новл­ ен соо­ тв­ етс­ т­вую­щий осн­ ов­ной ре­ жим. Это вы­ра­же­ние прим­ е­няе­ тс­ я тольк­ о к той час­ти пол­ ног­ о име­ни фай­ла, из кот­ о­рой уда­ле­но имя ка­тал­ о­га. mode-pathname (mp) Рег­ ул­ яр­ное выр­ аж­ ен­ ие, опр­ ед­ ел­ яющ­ ее пу­ти файл­ ов, для ко­ тор­ ых бу­дет ус­та­нов­лен со­от­вет­ств­ ую­щий осн­ ов­ной ре­жим. preamble (pre) Ре­гул­ яр­ное вы­раж­ ен­ ие, оп­ре­де­ляющ­ ее пер­вую стро­ку фай­ лов, для кот­ ор­ ых буд­ ет уст­ а­новл­ ен соо­ тв­ етс­ т­вующ­ ий ос­нов­ ной ре­жим. qualifiers Указ­ ыв­ а­ет, как соч­ ет­ ать крит­ ер­ ии preamble и suffixes. Ис­ поль­зуй­те аll, что­бы исп­ оль­зов­ ать оба, и any, чтоб­ ы вос­ польз­­ о­ваться люб­ ым из них. suffixes (suf) Рег­ у­лярн­ ое вы­ра­жен­ ие, оп­ре­де­ляю­щее рас­шир­ е­ния в име­ нах файл­ ов, для кот­ ор­ ых бу­дет ус­та­нов­лен соо­ тв­ ет­ст­вую­ щий ос­нов­ной реж­ им. Это вы­раж­ ен­ ие прим­ е­няе­ тс­ я тольк­ о к той част­ и име­ни файл­ а, ко­тор­ ая идет пос­ ле пер­вой точк­ и. Оп­ред­ е­лен­ный ос­нов­ной реж­ им мож­но всег­ да зад­ ать сам­ о­му, на­прим­ ер: :setl cmode 1 Эти крит­ е­рии яв­ля­ютс­ я оп­циям­ и чет­вер­той кат­ ег­ о­рии, счи­тая унив­ ер­саль­ ные, буф­ ер­ные и окон­ные. Они не пе­ре­чис­лен­ ы с друг­ им­ и в  таб­л. B.5, по­ скольк­ у зад­ а­ют­ся со­вер­шенн­ о друг­ им пут­ ем.

Интересные особенности 415 ука­жет про­грам­ме ус­та­нов­ ить «c» mode1, но это дейс­ тв­ ие не обн­ ов­ ит под­ светк­ у синт­ ак­сис­ а. Что­бы сдел­ ать и то, и дру­гое, исп­ оль­зуйт­ е макр­ ос: :set-h cmode (set-highlighting; см. табл. 18.8).Процедурный язык Проц­ е­дур­ный язык vile прак­тич­ ес­ ки не от­лич­ а­ет­ся от то­го, кот­ о­рый был в  MicroEMACS. Комм­ ен­та­рии на­чин­ а­ют­ся в  точ­ки с  за­пя­той или двой­ной ка­вычк­ и, имен­ а пер­ е­менн­ ых окр­ уж­ ен­ ия (оп­ции ре­дак­то­ра) – с $, а польз­ о­ва­тельс­ кие переменные – с %. Для про­верк­ и усл­ о­вий су­ще­ ст­ву­ет не­сколь­ко встрое­ нн­ ых функ­ций, име­на кот­ о­рых на­чи­на­ют­ся с &. Ком­ анд­ ы управл­ е­ния вы­полн­ е­ни­ем и нек­ о­тор­ ые друг­ ие на­чи­наю­ тс­ я с ~. Знак @, ис­поль­зо­ван­ный вмес­ те со строк­ ой, за­праш­ ив­ ае­ т польз­ о­ва­тель­ ский ввод и воз­вращ­ ае­ т на­бран­ное. Мы взял­ и из фай­ла macros.doc сле­ дующ­ ий до­вольн­ о странн­ ый при­мер, что­бы вы по­чув­ств­ ов­ ал­ и «вкус» этог­ о язы­ка: ~if &sequal %curplace \"timespace vortex\" insert-string \"First, rematerialize\n\" ~endif ~if &sequal %planet \"earth\" ;If we have landed on earth... ~if &sequal %time \"late 20th century\" ;and we are then write-message \"Contact U.N.I.T.\" ~else insert-string \"Investigate the situation....\n\" insert-string \"(SAY 'stay here Sara')\n\" ~endif ~elseif &sequal %planet \"luna\" ;If we have landed on our neighbor... write-message \"Keep the door closed\" ~else setv %conditions @\"Atmosphere conditions outside? \" ~if &sequal %conditions \"safe\" insert-string &cat \"Go outside......\" \"\n\" insert-string \"lock the door\n\" ~else insert-string \"Dematerialize..try somewhen else\" newline ~endif ~endif По­доб­ные проц­ ед­ у­ры мож­но хран­ ить в  ну­мер­ ов­ анн­ ых макр­ ос­ ах ли­бо прис­ ваи­вать им имен­ а, чтоб­ ы к ним можн­ о был­ о прив­ я­зать клав­ иш­ и. По­каз­ ан­ный прим­ ер особ­ енн­ о по­ле­зен при ис­поль­зов­ ан­ ии пор­та vile на Tardis. ☺1 Ко­манд­ а setl ус­тан­ ав­ли­ва­ет лок­ альн­ ые свой­ст­ва буф­ ер­ а, а команда :set cmode – осн­ овн­ ой реж­ им по умолч­ ан­ ию, ес­ли vile не смог рас­поз­ нать файл.

416 Глава 18. vile: vi Like Emacs (vi как Emacs) Бо­лее реа­ли­стичн­ ый прим­ ер от По­ла Фокс­ а (Paul Fox) зап­ уск­ ае­ т grep, ищу­щий слов­ о под кур­со­ром во всех фай­лах C. Зат­ ем он по­ме­ща­ет ре­ зуль­тат­ ы пои­ с­ка в буф­ ер, наз­ ванн­ ый по данн­ о­му сло­ву, и вы­пол­няе­ т та­ кие ус­тан­ ов­ки, что­бы встро­енн­ ый по­иск ошиб­ ок (^X ^X) исп­ ольз­ о­вал этот вы­вод в ка­че­ств­ е спи­ска строк, на кот­ о­рые нуж­но пер­ ейт­ и. В конц­ е этот мак­рос прив­ я­зы­ва­етс­ я к ^A g. Ко­манд­ а ~force раз­ре­шае­ т авар­ ийн­ ое зав­ ер­шен­ ие ко­ман­ды без выв­ од­ а со­общ­ ен­ ия об ошиб­ке: 14 store-macro set-variable %grepfor $identifier edit-file &cat \"!egrep -n \" &cat %grepfor \" *.[ch]\" ~force rename-buffer %grepfor error-buffer $cbufname ~endm bind-key execute-macro-14 ^A-g Поль­зо­ва­тель­ские про­це­дур­ ы мо­гут иметь па­ра­мет­ры, поч­ти ана­ло­гич­ ные обо­лочк­ е Bourne, но пар­ а­метр­ ы мог­ ут быть ог­ра­ни­че­ны конк­ рет­ны­ ми тип­ ам­ и дан­ных. Это по­зво­ля­ет проц­ ед­ ур­ ам раб­ от­ ать так, как ожид­ а­ ет­ся в  мо­дел­ и ре­дак­тир­ ов­ а­ния vile (и  в  мех­ а­низ­ме ист­ ор­ ии ком­ анд). Проц­ е­дур­ ы не явл­ я­ютс­ я пол­нос­ тью взаим­ о­за­мен­ яем­ ы­ми со встро­енн­ ы­ ми ко­манд­ ам­ и, так как пок­ а нет мех­ ан­ из­ма, кот­ ор­ ый по­зво­лял бы ко­ манд­ е отм­ е­ны расс­ матр­ ив­ ать весь макр­ ос как един­ ую опе­рац­ ию. Нак­ он­ ец, пе­ре­мен­ным read-hook и  write-hook можн­ о прис­ во­ить имен­ а проц­ ед­ ур, кот­ о­рые буд­ ут вып­ ол­нять­ся по­сле чтен­ ия файл­ а и пе­ред его зап­ и­сью соо­ тв­ ет­ст­вен­но. Это по­зво­ля­ет про­де­лы­вать при­мер­но то же, что де­лаю­ т пред- и постобр­ аб­ отк­ а фай­лов в elvis и авт­ о­ко­ман­ды в Vim. Этот язык до­воль­но мощ­ный. В  не­го вклю­чен­ ы опе­ра­ции срав­нен­ ия и кон­трол­ я за вып­ олн­ ен­ и­ем, а такж­ е пе­рем­ ен­ные, даю­щие дос­туп к зна­ чит­ ель­ной час­ти внут­ренн­ е­го со­стоя­ния vile. Файл macros.doc в  до­ку­ мен­тац­ ии ре­дак­тор­ а при­вод­ ит дет­ альн­ ое опи­сан­ ие язы­ка.Разнообразные небольшие функции Не­сколь­ко дру­гих не­больш­ их функ­ций, о кот­ о­рых сто­ит упо­мян­ уть: Пе­рен­ ап­ рав­лен­ ие в vile Ес­ли вы по­став­ ит­ е vile по­следн­ ей ком­ ан­дой в це­пи ка­нал­ ов, он соз­ даст буф­ ер с име­нем [Standard Input], что по­зво­лит его от­ре­дакт­ ир­ о­ вать. Возм­ ожн­ о, это «иде­альн­ ый вар­ и­ант прог­ рамм­ ы про­смотр­ а». Ре­дак­ти­ро­ва­ние фай­лов Windows Опц­ ия dos, бу­дуч­ и уст­ ан­ ов­лен­ной в  true, при­ве­дет к  том­ у, что vile буд­ ет уби­рать возв­ рат кар­ етк­ и из конц­ а стро­ки при чте­нии кажд­ о­го фай­ла, а при за­пи­си по­ста­вит его снов­ а. Это поз­ во­лит об­лег­чить ре­ дак­тир­ о­ва­ние фай­лов Windows в сист­ ем­ ах UNIX или GNU/Linux. Пер­ е­форм­ а­тир­ о­ван­ ие текс­ та Ко­ман­да ^A f пер­ е­форм­ ат­ и­руе­ т текст, прои­ з­во­дя в выд­ е­лен­ном фраг­ мент­ е пе­рен­ о­сы слов с одн­ ой строк­ и на дру­гую. Она пон­ им­ ае­ т ком­

Исходный код и поддерживаемые операционные системы 417 мент­ а­рии C и обо­лочк­ и (стро­ки, на­чин­ аю­щие­ся на * или #) и ци­та­ты в элект­ ронн­ ой почт­ е (на­чин­ а­ют­ся с >). Пох­ о­жа на ко­ман­ду UNIX fmt, но ра­бот­ ае­ т бы­ст­рее. Фор­мат­ и­ров­ ан­ ие инф­ орм­ а­ци­онн­ ой стро­ки Пе­рем­ енн­ ая modeline-format – это стро­ка, управл­ яющ­ ая тем, как vile фор­мат­ ир­ у­ет стро­ку сос­ тоян­ ия. Эта стро­ка на­хо­дит­ся вниз­ у кажд­ о­ го окн­ а и опис­ ы­ва­ет со­стоян­ ие бу­фер­ а, на­при­мер его имя, тек­ ущ­ ий осн­ овн­ ой ре­жим, изм­ ен­ ен ли бу­фер, яв­ляе­ тс­ я ли тек­ у­щим ком­ анд­ ный ре­жи­м или реж­ им вставк­ и и проч­ ее.1 Стро­ка со­стои­ т из пос­ ле­до­ва­тель­но­стей, ис­польз­ ую­щих проц­ ент­ ы в сти­ле printf(3). Нап­ рим­ ер, %b обо­зна­чае­ т имя бу­фер­ а, %m – ос­нов­ной реж­ им, а %l – ном­ ер строк­ и, есл­ и был­ а уст­ а­нов­лен­ а оп­ция ruler. Сим­ во­лы в строк­ е, не яв­ляющ­ иес­ я час­ тью форм­ ат­ и­ро­ва­ния, пон­ им­ аю­ т­ ся бу­к­вальн­ о. В vile есть мног­ о дру­гих воз­можн­ ос­ тей. Сов­пад­ е­ние «ощущ­ е­ний паль­ цев» с  vi по­звол­ я­ет лег­ко пер­ ей­ти на vile из друг­ ог­ о ре­дакт­ ор­ а. Про­ грамм­ и­руем­ ость да­ет больш­ ую гибк­ ость, а  ин­тер­ акт­ ив­ная прир­ о­да и ра­зумн­ ые уст­ а­нов­ки по умол­ча­нию де­ла­ют его бол­ ее друж­ е­ств­ ен­ным для но­вичк­ ов, чем обычн­ ый vi.Исходный код и поддерживаемыеоперационные системы Офиц­ и­альн­ ый веб-сайт vile – http://invisible-island.net/vile/vile.html. По ftp прог­ рам­му можн­ о най­ти на ftp://invisible-island.net/vile/vile.tar.gz. Файл vile.tar.gz все­гда явл­ я­етс­ я симв­ о­лич­ е­ской ссыл­кой на тек­ у­щую вер­сию. Ред­ акт­ ор нап­ и­сан на ANSI C. Его мож­но соб­ рать и за­пуст­ ить под UNIX, OpenVMS, MS-DOS, конс­ ольн­ ой и  GUI-вер­сиям­ и Win32, BeOS, QNX и OS/2. Комп­ и­ляц­ ия vile идет обыч­ным об­ра­зом. Заг­ руз­ и­те ди­ст­риб­ ут­ ив по ftp или с  веб-стра­ниц­ ы, рас­пак­ уйт­ е его, зап­ ус­тит­ е про­грам­му configure и вы­зо­ви­те make: $ gzip -d < vile.tar.gz | tar -xvpf - ... $ cd vile-*; ./configure ... $ make ...1 Док­ ум­ ен­та­ция vile ссыл­ а­ет­ся на это как на modeline. Одн­ а­ко, пос­ кольк­ у в vile такж­ е реа­лиз­ ов­ ан­ а функц­ ия modeline из vi, мы на­зы­вае­ м ее строк­ ой сос­ тоян­ ия, что­бы из­беж­ ать пу­тан­ и­цы.































































Редакторы vi, ex и Vim 449Пример :0r $HOME/data Счит­ ать файл в нач­ ал­ о тек­ у­ще­го файл­ аread[address] r !commandСчит­ ыв­ ае­ т вы­вод ко­ман­ды обол­ оч­ки command в текст пос­ ле стро­ки, оп­ред­ ел­ ен­ной в address.Пример По­мест­ ить в кон­ ец фай­ла рез­ уль­тат пров­ ерк­ и ор­фо­граф­ ии :$r !spell %recoverrec [file]Вос­стан­ ав­лив­ ае­ т файл file из обл­ аст­ и сис­тем­ног­ о сох­ ран­ ен­ ия.redoredВос­ста­нав­ли­ва­ет пос­ ледн­ ее от­мен­ ен­ное изм­ ен­ ен­ ие. Ком­ ан­да ана­лог­ ич­на CTRL-R. {Vim}resizeres [[±]num]Мен­ яе­ т выс­ о­ту те­кущ­ ег­ о ок­на, ус­тан­ авл­ ив­ ая ее равн­ ой num строк. Ес­ли ука­зан­ ы + или -, вы­сот­ а уве­ли­чи­вае­ т­ся или уменьш­ а­етс­ я на numстрок. {Vim}rewindrew[!]Возв­ ращ­ а­етс­ я к пер­вом­ у фай­лу из спи­ска арг­ у­мент­ ов и на­чи­нае­ т его ре­дак­тир­ о­ван­ ие. Есл­ и те­кущ­ ий файл не сох­ ра­нялс­ я с мом­ ент­ а по­следн­ ег­ оиз­ме­нен­ ия, то для воз­врат­ а к перв­ ом­ у фай­лу нужн­ о исп­ ольз­ ов­ ать !.right[address] ri [width]Стро­ки, оп­ред­ е­лен­ные в address (или тек­ ущ­ ая строк­ а, есл­ и address неза­дан), выр­ авн­ ив­ а­ютс­ я по прав­ ом­ у краю шир­ ин­ ы width. Ес­ли width неза­дан­ а, ис­поль­зу­етс­ я опц­ ия textwidth. {Vim}

450 Приложение A sbnext [count] sbn [count] Разд­ ел­ я­ет тек­ ущ­ ее окн­ о и нач­ ин­ ае­ т ре­дакт­ и­ро­вать буф­ ер под номером count в спи­ске буф­ ер­ ов. Ес­ли count не ука­зан, ред­ акт­ ир­ уе­ т­ся сле­дую­ щий буф­ ер из спис­ ка. {Vim} sbuffer [num] sb [num] Разд­ е­ляе­ т тек­ у­щее ок­но и в нов­ ом окне нач­ ин­ а­ет ре­дакт­ ир­ ов­ ать буф­ ер под но­мер­ ом num в спис­ ке буф­ ер­ ов. Ред­ ак­тир­ уем­ ый буф­ ер мож­но опр­ е­ де­лить так­же по име­ни фай­ла. Есл­ и буф­ ер не указ­ ан, в но­вом ок­не от­ крыв­ ае­ т­ся тек­ ущ­ ий буф­ ер. {Vim} set se parameter1 parameter2 . . . Ус­та­навл­ и­вае­ т зна­чен­ ие опц­ ии для каж­дог­ о parameter или, ес­ли ни один parameter не указ­ ан, вы­во­дит все опц­ ии, знач­ ен­ ия ко­то­рых был­ и изм­ е­не­ны. Для бу­лев­ских оп­ций кажд­ ый parameter мож­но тракт­ ов­ ать как option или nooption. Опц­ ия­ м друг­ их ти­пов мож­но зад­ ать зна­чен­ ия син­так­си­сом option=value. Что­бы вы­вес­ти те­ку­щие ус­тан­ ов­ки, нео­ бх­ о­ дим­ о ука­зать all. Фор­ма ви­да set option? ото­браж­ а­ет знач­ ен­ ие опц­ ии. Таб­лиц­ ы, где пе­ре­чис­ле­ны спи­ски оп­ций, можн­ о най­ти в при­ло­же­нии B. Примеры :set nows wm=10 :set all shell sh Созд­ ае­ т но­вую обол­ очк­ у. Пос­ ле вых­ о­да из нее ред­ ак­ти­ро­ва­ние во­зоб­ нов­ля­етс­ я. snext [count] sn [[+num] filelist] Раз­дел­ яе­ т те­кущ­ ее ок­но и нач­ ин­ ае­ т ре­дак­ти­ров­ а­ние файл­ а, след­ ующ­ е­ го в спис­ ке ар­гу­мен­тов ком­ андн­ ой стро­ки. Есл­ и указ­ ан count, ре­дак­ти­ руе­ т­ся count-й след­ ующ­ ий файл в спи­ске. Ес­ли зад­ ан filelist, то те­ку­ щий спис­ ок арг­ ум­ ен­тов за­ме­ня­етс­ я на filelist, по­сле чег­ о на­чи­нае­ тс­ я ре­дакт­ и­ро­ва­ние пер­вог­ о фай­ла отт­ у­да. При нал­ ич­ ии ар­гу­мент­ а +num раб­ от­ а нач­ ин­ ае­ тс­ я со строк­ и num. Кром­ е тог­ о, num мо­жет быть шабл­ о­ ном ви­да /pattern. {Vim}


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook