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

Сборка исполняемого файла под конкретные задачи 201Сборка исполняемого файлапод конкретные задачи Уст­ а­новл­ ен­ный по умол­чан­ ию Vim удовл­ ет­ вор­ я­ет по­треб­нос­ тям боль­ шин­ст­ва поль­зов­ а­тел­ ей. Со­вре­менн­ ые ком­пью­ ­тер­ ы вви­ду вы­сок­ ой про­ изв­ од­ и­тель­но­сти вы­пол­ня­ют все расш­ и­рен­ные функ­ции ре­дак­то­ра. Од­ нак­ о в нек­ от­ о­рых случ­ а­ях ок­руж­ ен­ ие или обс­ тоя­тельс­ тв­ а вын­ уж­ ­да­ют исп­ ольз­ ов­ ать его об­легч­ ен­ную вер­сию. Поль­зо­ва­те­лям мож­ ет пон­ ад­ об­ итьс­ я Vim с  ог­ран­ и­че­ниям­ и, на­прим­ ер для на­ла­дон­ных устр­ ойств под управл­ е­ни­ем Linux, у  кот­ ор­ ых не так мног­ о пам­ ят­ и. Разл­ ичн­ ым поль­зов­ ат­ е­лям мо­гут оказ­ атьс­ я не­нуж­ным­ и так­ ие предк­ омп­ и­ли­ров­ ан­ные функ­ции, как про­вер­ка ор­фог­ ра­фии (на­ прим­ ер, прог­ рамм­ ис­ там, ко­тор­ ым не важ­ны функц­ ии, при­шедш­ ие из тек­сто­вых про­цес­сор­ ов) или подд­ ерж­ка perl (из-за то­го, что на их маш­ и­ нах perl не уст­ а­новл­ ен). Гор­ аз­до прощ­ е жить с дост­ уп­ным­ и функ­ция­ми, чем пер­ е­нас­ траив­ ать, пе­ре­комп­ ил­ и­ро­вать и  за­но­во ус­та­навл­ ив­ ать Vim с  нов­ ы­ми опц­ ия­ми, тольк­ о что­бы доб­ ав­ ить но­вые возм­ ож­но­сти.

11Многооконность в VimГлава 11.По умолч­ ан­ ию Vim отк­ рыв­ а­ет все фай­лы в од­ном окн­ е, ото­бра­жая толь­ко один буф­ ер при пе­рем­ е­щен­ ии межд­ у нес­ кольк­ им­ и файл­ а­ми или час­тя­ми од­но­го файл­ а. Одн­ ак­ о Vim мож­ ет предл­ ож­ ить и мног­ оо­ конн­ ое ре­дакт­ и­ро­ван­ ие, уп­рощ­ ающ­ ее сложн­ ые зад­ ач­ и. Это не то же сам­ ое, чтозап­ уск разл­ ич­ных экз­ емп­ л­ я­ров Vim в гра­фич­ е­ском терм­ ин­ ал­ е. В дан­ной глав­ е рас­ска­зы­ва­етс­ я об ис­польз­ ов­ ан­ ии не­скольк­ их окон при за­пус­ке толь­ко од­но­го про­цес­са Vim (на­зов­ ем это сеа­ н­сом).Не­сколь­ко окон мож­но созд­ ать как при иниц­ иал­ из­ а­ции се­анс­ а, таки  пос­ ле его на­чал­ а. Кол­ и­че­ст­во окон, ис­поль­зуем­ ых в  сеа­ н­се ра­бот­ ы,огра­нич­ и­вае­ т­ся толь­ко ваш­ им здра­вым смысл­ ом. Их мож­но удал­ ять,ос­тав­ ив толь­ко од­но ок­но ре­дак­ти­ро­ва­ния.Ниж­ е при­вед­ ен­ ы нек­ от­ ор­ ые при­мер­ ы, ког­ да не­скольк­ о окон мог­ ут об­легч­ ить ваш­ у жизнь:• Ре­дак­ти­ро­ван­ ие не­скольк­ их фай­лов, ко­тор­ ые нуж­но от­форм­ а­ти­ро­ вать оди­на­ков­ ым обр­ аз­ ом. Вы смож­ е­те зрит­ ельн­ о сравн­ ив­ ать их при вып­ олн­ ен­ ии раб­ от­ ы.• Мног­ о­крат­ное и  бы­строе вып­ олн­ е­ние дей­ств­ ий тип­ а «выр­ ез­ ать» и  «встав­ ить» меж­ду не­сколь­ким­ и файл­ а­ми или разн­ ы­ми част­ ям­ и од­ног­ о фай­ла.• Отоб­ раж­ ен­ ие час­ти одн­ ог­ о файл­ а в  кач­ е­ст­ве обр­ азц­ а, чтоб­ ы об­лег­ чить ра­бо­ту в друг­ их мест­ ах фай­ла.• Срав­не­ние двух вер­сий фай­ла.Vim пред­лаг­ а­ет множ­ е­ств­ о функц­ ий, обл­ егч­ ающ­ их управ­ле­ние окн­ а­ми, вклю­чая:• Разд­ ел­ е­ние ок­на по го­риз­ онт­ ал­ и или по вер­тик­ ал­ и.• Быс­ т­рый пер­ е­ход от одн­ о­го ок­на к друг­ ом­ у и обр­ атн­ о.

Инициализация многооконного сеанса 203 • Коп­ и­ро­ван­ ие и пе­ре­мещ­ ен­ ие текс­ та в нес­ кольк­ о окон и из не­сколь­ ких окон. • Изм­ ен­ ен­ ие расп­ о­лож­ е­ния и раз­ме­ров окон. • Ра­бот­ а с бу­фер­ ам­ и, вклю­чая скры­тые (о них мы расс­ каж­ ем ниж­ е). • Исп­ оль­зов­ ан­ ие внешн­ их ути­лит, нап­ ри­мер ко­ман­ды diff, с нес­ коль­ ким­ и ок­нам­ и. В этой гла­ве мы поз­ нак­ ом­ им вас с раб­ о­той в не­сколь­ких ок­нах, рас­ска­ жем, как зап­ ус­тить мно­гоо­ кон­ный се­анс, об­су­дим имею­щие­ся воз­мож­ но­сти и дад­ им подс­ каз­ки по се­анс­ у ред­ ак­ти­ро­ван­ ия, а такж­ е по­каж­ ем, как зак­ он­чить раб­ от­ у, га­рант­ ир­ ов­ анн­ о сох­ ран­ ив все из­ме­не­ния (или от­ ка­завш­ ись от них, есл­ и хот­ и­те!). След­ ующ­ ие те­мы охв­ а­ты­ва­ют: • Иниц­ иа­ли­зац­ ия или зап­ уск се­ан­са мног­ о­оконн­ о­го ре­дак­тир­ о­ван­ ия. • Ком­ анд­ ы :ex для нес­ кольк­ их окон. • Пер­ е­ме­ще­ние кур­со­ра от одн­ ог­ о ок­на к друг­ о­му. • Пе­рем­ е­ще­ние окон по экр­ ан­ у. • Изм­ ен­ ен­ ие разм­ ер­ а окон. • Бу­фе­ры и их взаим­ о­дейс­ тв­ ие с окн­ ам­ и. • Раб­ от­ а с вкладк­ ам­ и (по­добн­ о вклад­кам в сов­ ре­менн­ ых веб-брау­зе­рах и диа­ло­го­вых ок­нах). • За­кры­тие окон и вых­ од из них.Инициализация многооконного сеанса Мно­гоо­ кон­ный се­анс мож­но ини­циа­лиз­ ир­ ов­ ать при зап­ уск­ е Vim, а мож­ но разд­ е­лить сущ­ е­ств­ ующ­ ие окн­ а в  проц­ есс­ е ред­ ак­тир­ ов­ а­ния. В  Vim мно­го­окон­ность ди­нам­ ич­на, что поз­ во­ляе­ т от­крыв­ ать, зак­ рыв­ ать ок­на и пер­ е­ме­щатьс­ я межд­ у ни­ми в люб­ ое вре­мя и почт­ и при люб­ ых об­стоя­ тельс­ тв­ ах.Инициализация многооконностииз командной строки (оболочки) По умол­чан­ ию Vim от­крыв­ а­ет тольк­ о од­но окн­ о для сеа­ н­са, даж­ е ес­ли вы зап­ ус­кае­те его с нес­ кольк­ им­ и файл­ ам­ и. Нель­зя с уве­ренн­ о­стью ска­ зать, по­че­му Vim не хоч­ ет от­кры­вать раз­ные окна для раз­лич­ных фай­ лов, но, воз­мож­но, при­чи­на в том, что исп­ оль­зов­ а­ние одн­ ог­ о ок­на со­от­ вет­ст­вуе­ т по­ве­ден­ ию vi. От­дельн­ ые фай­лы зан­ им­ аю­ т от­дель­ные буф­ е­ ры, по одн­ о­му буф­ ер­ у на файл (про буф­ е­ры мы расс­ каж­ ем чуть ниж­ е). Что­бы отк­ рыть нес­ кольк­ о окон из ком­ анд­ной стро­ки, вос­польз­ уй­тесь опц­ и­ей Vim -o. Нап­ рим­ ер: $ vim -o file1 file2

204 Глава 11. Многооконность в Vim Рис. 11.1. Рез­ уль­тат вып­ олн­ е­ния «vim -o file1 file2» При этом бу­дет отк­ рыт се­анс ред­ ак­тир­ ов­ ан­ ия с эк­ра­ном, под­ ел­ ен­ным го­ риз­ он­тальн­ о на два один­ а­ко­вых окн­ а для кажд­ о­го фай­ла (рис. 11.1). Для кажд­ ог­ о файл­ а, указ­ анн­ ог­ о в  ко­манд­ной стро­ке, Vim по­пыт­ ае­ тс­ я от­ крыть свое ок­но. Есл­ и он не смож­ ет раз­бить эк­ран на тре­буе­мое чис­ло окон, то ок­на дос­тан­ утс­ я пер­вым файл­ ам, пер­ еч­ исл­ ен­ным в ком­ анд­ной стро­ке, а ост­ альн­ ые буд­ ут за­груж­ ен­ ы в бу­фер­ ы, скрыт­ ые от польз­ ов­ а­те­ ля (но тем не мен­ ее дос­туп­ные). Есл­ и по­сле оп­ции -o по­став­ ить чис­ло n, то ко­ман­да зар­ ез­ ер­вир­ уе­ т нуж­ ное кол­ ич­ ес­ т­во окон: $ vim -o5 file1 file2 Бу­дет отк­ рыт се­анс с  экр­ а­ном, разд­ ел­ ен­ным по го­ри­зонт­ ал­ и на пять окон один­ ак­ ов­ ог­ о разм­ ер­ а, в  са­мом верх­нем из ко­тор­ ых раз­мест­ ит­ся file1, в следующем – file2 (рис. 11.2). Ко­гда Vim созд­ а­ет не­скольк­ о окон, по умолч­ ан­ ию он до­бавл­ яе­ т к каж­дом­ у из них строк­ у сос­ тоя­ния (то­гда как в од­ноо­ кон­ном се­ан­ се по умолч­ а­нию она не отоб­ ра­жа­етс­ я). Пов­ е­де­ни­ем ред­ ак­тор­ а мож­ но управл­ ять с по­мо­щью оп­ции Vim laststatus, на­при­мер: :set laststatus=1 За­дай­те laststatus рав­ным 2, чтоб­ ы вид­ еть стро­ку сос­ тоя­ния все­гда, даж­ е в одн­ оо­ конн­ ом реж­ им­ е (лучш­ е всег­ о сде­лать это в фай­ле .vimrc).

Инициализация многооконного сеанса 205 Рис. 11.2. Ре­зульт­ ат вы­пол­нен­ ия «vim -o5 file1 file2» Пос­ кольк­ у раз­мер ок­на влияе­ т на чит­ ае­мость и удоб­ств­ о раб­ о­ты, вам, воз­можн­ о, зах­ о­четс­ я конт­ рол­ ир­ ов­ ать огр­ ан­ ич­ е­ния, нал­ а­гае­мые Vim на разм­ е­ры окон. Исп­ ольз­ уй­те опц­ ии Vim winheight и winwidth для зад­ ан­ ия раз­ умн­ ых огр­ а­нич­ е­ний для тек­ ущ­ е­го окн­ а (разм­ ер­ ы ос­тальн­ ых окон так­же можн­ о из­мен­ ить, чтоб­ ы по­догн­ ать их под те­кущ­ ее ок­но).Многооконное редактирование в Vim Мож­но иниц­ иал­ из­ ир­ о­вать и  мен­ ять кон­фиг­ ур­ а­цию окон не­пос­ редс­ т­ вен­но из Vim. Соз­дай­те нов­ ое окн­ о ко­манд­ ой :split. Она разд­ ел­ ит по­по­ лам те­кущ­ ее окн­ о и по­ка­жет один и тот же бу­фер в обеи­ х пол­ ов­ ин­ ах. По­сле этог­ о вы смож­ е­те бы­стр­ о пе­рем­ ещ­ атьс­ я по од­но­му и том­ у же фай­ лу в каж­дом из этих окон. В этой глав­ е предс­ тавл­ ен­ ы «гор­ я­чие» со­че­та­ния кла­виш для мно­гих ко­манд. Так, в дан­ном слу­чае ^Ws так­же при­ве­дет к раз­дел­ ен­ ию ок­ на (все ком­ ан­ды Vim, связ­ ан­ные с окн­ ам­ и, на­чин­ а­ют­ся на ^W, где «W» – со­кра­щен­ ие от «window»). В це­лях это­го по­вес­ т­во­ван­ ия мы буд­ ем прив­ о­дить тольк­ о ме­то­ды с ком­ андн­ ой строк­ ой, пос­ коль­ку в этом случ­ ае можн­ о изм­ ен­ ить по­ве­де­ние ко­манд­ ы по умол­чан­ ию, доб­ ав­ляя доп­ ол­ни­тельн­ ые оп­ции. Есл­ и вы зам­ ет­ ит­ е, что пос­ то­ян­но исп­ ольз­ ует­ е од­ни и те же ко­ман­ды, то смо­же­те легк­ о оты­скать соо­ т­ вет­ст­вую­щие им соч­ е­та­ния кла­виш в док­ у­мен­та­ции Vim, как опи­ сан­ о в разд­ е­ле «Встрое­ н­ная справ­ка» на стр. 187.

206 Глава 11. Многооконность в Vim Рис. 11.3. Верт­ и­каль­но разд­ е­ленн­ ое ок­но Анал­ ог­ ичн­ о окно, разд­ ел­ ен­ное по верт­ ик­ ал­ и, мож­но созд­ ать ко­манд­ ой :vsplit (рис. 11.3). В кажд­ ом из этих спос­ об­ ов Vim раз­де­ля­ет окн­ о (вер­ти­кальн­ о или гор­ и­ зон­тальн­ о), а пос­ кольк­ у в ком­ ан­де :split не бы­ло ука­за­но ник­ ак­ ог­ о фай­ ла, вы увид­ ит­ е две коп­ ии од­но­го фай­ла в двух окн­ ах. Не вер­ и­те, что мож­но ре­дакт­ и­ров­ ать один и тот же файл одн­ о­вре­мен­ но в двух ок­нах? Разд­ е­ли­те ок­но ре­дакт­ и­ро­ва­ния и при пом­ о­щи про­ крутк­ и сдел­ айт­ е так, чтоб­ ы в обои­ х окн­ ах ви­деть одн­ у и ту же часть фай­ла. Вы­пол­ни­те из­мен­ е­ния. Пос­ мотр­ ит­ е на дру­гое окн­ о. Чу­де­са. Как и за­чем это исп­ оль­зов­ ать? Один из авт­ о­ров пос­ то­ян­но поль­зу­етс­ я след­ ующ­ им прие­мом: при нап­ ис­ ан­ ии скрип­тов обо­лочк­ и или прог­ рамм на C он созд­ ае­ т блок текс­ та, опис­ ыв­ аю­щий ис­поль­зо­ва­ние прог­ рамм­ ы (как пра­ви­ло, про­грамм­ а отоб­ ра­жае­ т этот текст, ес­ли ее выз­ вать оп­ци­ей --help). Эк­ран раз­де­ля­етс­ я так, что­бы в  одн­ ом окн­ е был­ а справк­ а по прим­ е­не­нию про­грамм­ ы, пос­ ле че­го она исп­ оль­зуе­ т­ся как обр­ аз­ ец при ре­дакт­ и­ров­ ан­ ии код­ а в друг­ ом окн­ е, где обр­ аб­ ат­ ыв­ а­ютс­ я все опц­ ии и ар­ гум­ ент­ ы ко­манд­ной строк­ и, опис­ ан­ные в текс­ те справ­ки. Част­ о (поч­ти всег­ да) этот код слож­ный и зак­ ан­чив­ а­ет­ся до­воль­но да­лек­ о от справк­ и по прим­ ен­ е­нию, то есть в од­ном ок­не код и текст отоб­ раз­ ить не пол­ уч­ и­ лось бы. Ес­ли по­тре­буе­ тс­ я ред­ ак­ти­ро­вать или про­смотр­ еть дру­гой файл, не ме­ няя сво­ей по­зиц­ ии в тек­ у­щем, за­дай­те имя это­го фай­ла в кач­ ес­ тв­ е арг­ у­ мент­ а ко­манд­ ы :split. Нап­ рим­ ер: :split otherfile След­ ую­щий раз­дел де­таль­но опи­сыв­ ае­ т раз­де­лен­ ие и слия­ние окон.Открытие окон В этом разд­ ел­ е мы уг­луб­лен­но изу­чим, как доб­ итьс­ я нужн­ о­го по­ве­де­ ния при раз­де­ле­нии окн­ а.

Открытие окон 207Новые окна Как расс­ ка­зыв­ ал­ ось выш­ е, сам­ ый прос­ той спо­соб от­крыть но­вое окно – вып­ ол­нить ком­ ан­ду :split (для го­ри­зон­таль­ног­ о раз­дел­ е­ния) или :vsplit (для верт­ и­кальн­ о­го). Ни­же прив­ од­ итс­ я подр­ об­ное опис­ ан­ ие ком­ анд и их ва­риа­ций. Так­же пред­ста­влена кратк­ ая анн­ о­та­ция ко­манд для бы­стр­ ой справк­ и.Опции при разделении Полн­ ая ко­манд­ а :split, от­крыв­ аю­щая нов­ ое гор­ из­ онт­ аль­ное окн­ о, име­ ет вид: :[n]split [++opt] [+cmd] [file] где n Ука­зы­вае­ т Vim, сколь­ко строк нужн­ о отоб­ ра­жать в нов­ ом окн­ е, ко­ то­рое буд­ ет рас­пол­ а­гать­ся над всем­ и ост­ аль­ным­ и. opt Пер­ е­дае­ т инф­ орм­ а­цию об оп­ци­ях Vim в се­анс ра­бо­ты с но­вым окн­ ом (обр­ ат­ и­те вним­ а­ние, что opt дол­жен пред­вар­ ять­ся дву­мя плюс­ а­ми). cmd Пер­ е­да­ет ко­ман­ду, ко­тор­ ую нужн­ о вып­ олн­ ить в но­вом окн­ е (обр­ а­ти­ те вним­ а­ние, что пер­ ед cmd на­до по­став­ ить один плюс). file Указ­ ы­ва­ет файл, кот­ ор­ ый след­ уе­ т от­крыть в но­вом ок­не. Пред­пол­ ож­ им, при работе с файлом вы хо­тит­ е разд­ е­лить ок­но, что­бы от­ред­ акт­ ир­ о­вать друг­ ой файл с имен­ ем otherfile. При этом не­об­хо­ди­мо, что­бы в  но­вом сеа­ н­се ис­поль­зо­вал­ ось знач­ е­ние fileformat, равн­ ое unix (фор­мат текс­ то­вых файл­ ов UNIX, где конец строк­ и обо­зна­ча­етс­ я симв­ о­ лом но­вой стро­ки, а не комб­ и­нац­ и­ей из сим­вол­ а возв­ рат­ а ка­рет­ки и но­ вой строк­ и). Выс­ о­та ок­на долж­на быть рав­на 15 строк­ ам. Вве­дит­ е: :15split ++fileformat=unix otherfile Чтоб­ ы про­сто раз­де­лить экр­ ан, имея в обои­ х окн­ ах один и тот же файл и исп­ оль­зуя все нас­ тройк­ и по умол­чан­ ию, можн­ о прим­ е­нять соч­ е­та­ния клав­ иш ^Ws, ^WS или ^W^S. Для раз­дел­ ен­ ия эк­ран­ а на рав­ные час­ти ис­поль­зуйт­ е оп­цию equal­ always. Ее пред­поч­тит­ ельн­ о про­пис­ ать в фай­ле .vimrc, чтоб­ ы она ста­ ла пос­ то­ян­ной для всех се­анс­ ов раб­ от­ ы. По умолч­ а­нию при ис­поль­ зов­ ан­ ии equalalways экр­ ан раз­дел­ итс­ я на равн­ ые час­ти по го­риз­ он­та­ ли и верт­ ик­ а­ли. Для управ­ле­ния тем, ка­кое именн­ о на­прав­ле­ние раз­де­ле­ния сдел­ ать один­ ак­ о­вым, восп­ ольз­ уйт­ есь опц­ ие­ й eadirection (ее значения – hor, ver и both для оди­нак­ ов­ ог­ о разд­ ел­ е­ния по гор­ из­ он­ тал­ и, верт­ ик­ ал­ и, а так­же то­го и дру­гог­ о соо­ т­вет­ст­вен­но).

208 Глава 11. Многооконность в Vim След­ ующ­ ая форм­ а ком­ анд­ ы :split так­же от­кро­ет нов­ ое гор­ и­зонт­ аль­ное ок­но, но с не­боль­шим­ и нюа­ н­са­ми: :[n]new [++opt] [+cmd] [file] Помимо созд­ ан­ ия нов­ ог­ о окн­ а бу­дут вы­полн­ е­ны ав­ток­ о­манд­ ы Win­Leav­e, WinEnter, BufLeave и  BufEnter (под­робн­ ее об ав­ток­ о­ман­дах мож­но уз­нать в разд­ е­ле «Авт­ ок­ ом­ анд­ ы» на стр. 237). На­ряд­ у с  ко­манд­ ой гор­ из­ он­тальн­ ог­ о разд­ е­ле­ния Vim пред­ ос­тавл­ яе­ т анал­ о­гич­ную ком­ анд­ у для разд­ ел­ ен­ ия по вер­ти­ка­ли. Так, для созд­ а­ния вер­тик­ альн­ о разд­ е­ленн­ о­го ок­на вмес­ то :split или :new след­ у­ет ис­поль­зо­ вать :vsplit и :vnew со­от­ветс­ т­венн­ о. В ко­манд­ ах разд­ ел­ ен­ ия по вер­ти­ка­ ли ис­поль­зу­ютс­ я та­кие же нео­ бяз­ ат­ ель­ные па­рам­ ет­ры, как и в ко­ман­ дах го­ри­зонт­ альн­ ог­ о разд­ е­ле­ния. Су­ще­ств­ ую­ т две ко­манд­ ы раз­дел­ е­ния по го­риз­ он­та­ли, у  кот­ ор­ ых нет верт­ ик­ альн­ ых «со­братье­ в»: :sview filename Раз­дел­ яе­ т экр­ ан гор­ из­ онт­ альн­ о, чтоб­ ы созд­ ать нов­ ое окн­ о, ус­та­нав­ лив­ ая для этог­ о бу­фер­ а ре­жим «толь­ко для чтен­ ия». Ко­ман­да :sview тре­буе­ т нал­ ич­ ия аргумента – имен­ и файл­ а. :sfind [++opt] [+cmd] filename Раб­ от­ а­ет анал­ о­гичн­ о :split, но ищет filename в path. Есл­ и Vim не об­ на­руж­ ив­ а­ет фай­ла, то разд­ е­лен­ ия окн­ а не про­исх­ од­ ит.Команды условного разделения Vim поз­ во­ляе­ т оп­ред­ ел­ ять ко­ман­ду, ко­тор­ ая созд­ а­ет но­вое ок­но, толь­ко есл­ и найд­ ен но­вый файл. :topleft cmd предписывает ре­дак­тор­ у вы­пол­ нить ком­ анд­ у cmd и отоб­ раз­ ить но­вое ок­но с кур­со­ром сле­ва вверх­ у, ес­ ли cmd от­крое­ т но­вый файл. Ком­ ан­да мо­жет при­вес­ти к трем разл­ ич­ ным рез­ ульт­ а­там: • cmd разд­ ел­ я­ет ок­но гор­ из­ онт­ альн­ о, по­сле че­го нов­ ое ок­но за­ним­ ае­ т верхн­ юю часть ок­на Vim. • cmd разд­ е­ляе­ т окн­ о вер­тик­ альн­ о, и нов­ ое ок­но зан­ им­ ае­ т ле­вую сто­ рон­ у ок­на Vim. • cmd не прив­ о­дит к разд­ ел­ ен­ ию ок­на, но вме­сто это­го по­ме­щае­ т кур­ сор в ле­вый верхн­ ий угол те­кущ­ е­го окн­ а. В до­полн­ ен­ ие к ко­ман­де усл­ ов­но­го разд­ ел­ е­ния :topleft Vim пред­ла­га­ет ряд друг­ их анал­ о­гичн­ ых ко­манд: :leftabove, :rightbelow, :botright и :ver­ tical. Подр­ об­ную инф­ ор­ма­цию о них вы найд­ е­те во встро­ен­ной справк­ е Vim, дост­ упн­ ой по ко­манд­ е :help.Сводка команд работы с окнами Таблица 11.1 ре­зю­ми­руе­ т ком­ ан­ды для раз­де­ле­ния окон.

Перемещение по окнам (движение курсора между окнами) 209Таб­ли­ца 11.1. Свод­ка ком­ анд ра­бот­ ы с ок­на­миКо­манд­ а ex Ком­ ан­да vi Опис­ а­ние:[n]split [++opt] [+cmd] [file] ^Ws Разд­ е­ля­ет тек­ ущ­ ее ок­но на две час­:[n]new [++opt] [+cmd] ^WS ти слев­ а на­пра­во (по гор­ из­ онт­ ал­ и),:[n]sview [++opt] [+cmd] [file] курс­ ор по­ме­ща­ет­ся в  нов­ ое окн­ о.:[n]sfind [++opt] [+cmd] [file] W^S Нео­ бяз­ а­тельн­ ый ар­гум­ ент file от­:[n]vsplit [++opt] [+cmd] [file]:[n]vnew [++opt] [+cmd] крыв­ а­ет указ­ ан­ный файл в но­вом окн­ е. Соз­дав­ аем­ ые окн­ а по воз­мож­ но­сти име­ют один­ ак­ ов­ ый раз­мер, что опр­ е­дел­ яе­ т­ся сво­бод­ным мес­ ­ том на эк­ран­ е. ^Wn То же, что :split, но в но­вом ок­не ^W^N по­явл­ я­етс­ я пуст­ ой файл. Об­ра­тит­ е вним­ ан­ ие, что бу­фер ос­тан­ етс­ я бе­ зым­ янн­ ым, пок­ а ему не буд­ ет при­ своен­ о имя. Вер­сия :split «толь­ко-для-чте­ния». Раз­де­ляе­ т ок­но и  от­крыв­ а­ет file (ес­ли так­ о­вой ука­зан) в нов­ ом ок­ не. Ищет file в path. ^Wv Разд­ е­ляе­ т тек­ у­щее ок­но на два ^W^V свер­ху вниз (по верт­ и­кал­ и) и  от­ кры­ва­ет file (ес­ли та­ко­вой указ­ ан) в нов­ ом ок­не. «Вер­ти­каль­ная» вер­сия :new.Перемещение по окнам(движение курсора между окнами) С  пом­ ощ­ ью мы­ши нес­ лож­но пе­ре­ход­ ить из од­но­го ок­на в  дру­гое как в gvim, так и в Vim. gvim подд­ ерж­ и­ва­ет щел­чок мы­шью по умолч­ ан­ ию, тог­ да как в Vim так­ ое пов­ ед­ е­ние нуж­но на­стро­ить оп­цие­ й mouse. Хо­ро­ шим прим­ ер­ ом нас­ тройк­ и по умол­чан­ ию явл­ я­етс­ я :set mouse=a, при этом мышь бу­дет ис­польз­ о­ватьс­ я вез­де: и  в  ко­манд­ной стро­ке, и  для ввод­ а, и для пер­ ем­ ещ­ е­ния. Есл­ и у вас нет мыш­ и либ­ о вы предп­ оч­ и­тае­те управл­ ять се­ан­сом с кла­ виа­ту­ры, Vim пре­дост­ ав­ля­ет полн­ ый на­бор ко­манд для быс­ тр­ ог­ о и точн­ о­ го пе­рех­ о­да меж­ду окн­ ам­ и. К счас­ тью, для этог­ о он исп­ оль­зуе­ т все то же со­чет­ ан­ ие клав­ иш ^W. Сле­дую­щая пос­ ле это­го пос­ лед­ ов­ а­тельн­ ость кно­ пок указ­ ы­ва­ет на пер­ ем­ ещ­ е­ние или на дру­гое дейс­ тв­ ие. Это долж­но быть знак­ о­мо опытн­ ым польз­ о­ва­те­лям vi и Vim, по­скольк­ у дан­ные ко­манд­ ы прак­тич­ ес­ ки пов­ тор­ яю­ т ком­ анд­ ы пе­рем­ е­ще­ния при ре­дакт­ ир­ ов­ ан­ ии. Мы не буд­ ем опи­сыв­ ать каж­дую ко­ман­ду и ее раб­ о­ту, а лучш­ е расс­ мот­ рим при­мер, пос­ ле кот­ о­ро­го таб­лиц­ а об­зо­ра ко­манд стан­ ет очев­ ид­ной.

210 Глава 11. Многооконность в Vim Что­бы пе­рей­ти из тек­ ущ­ ег­ о ок­на Vim в сле­дую­щее, введ­ и­те CTRL-W j (или CTRL-W <стрелк­ а вниз>, или CTRL-W CTRL-J). CTRL-W яв­ля­ет­ ся сок­ ра­ще­ни­ем ко­манд­ ы «window», а j ана­ло­гич­ ен ко­ман­де Vim j, пе­ рем­ ещ­ аю­щей курс­ ор на сле­дующ­ ую стро­ку. В табл. 11.2 прив­ е­ден об­зор ком­ анд пе­ре­ход­ а межд­ у ок­на­ми. Как и в слу­чае мног­ их друг­ их ко­манд Vim и vi, их мож­но вып­ ол­ нить мно­гок­ рат­но, ес­ли прип­ и­сать внач­ ал­ е чис­ ло­вой инд­ екс. На­ прим­ ер, 3^Wj ука­жет Vim пе­рей­ти на третье окн­ о ни­же тек­ у­ще­го. Таб­ли­ца 11.2. Ко­манд­ ы пе­рех­ о­да меж­ду ок­нам­ и Ко­манд­ а Опи­са­ние CTRL-W <стрелк­ а вниз> Пе­рех­ од на окн­ о ниж­ е. CTRL-W CTRL-J Обр­ ат­ ит­ е вни­ман­ ие, что эта ко­ман­да не дел­ а­ет CTRL-W j цикл­ ич­ е­ско­го пер­ ех­ о­да межд­ у ок­нам­ и. Она про­сто вы­пол­няе­ т пер­ е­ход в ок­но ниж­ е тек­ у­ще­ CTRL-W <стрел­ка вверх> го. Есл­ и курс­ ор на­хо­дит­ся в са­мом нижн­ ем ок­ CTRL-W CTRL-K не эк­ра­на, то ком­ ан­да ни­че­го не дел­ ае­ т. Кроме CTRL-W k тог­ о, на свое­ м «пу­ти на­зад» она не переходит CTRL-W <стрелк­ а влев­ о> в смежн­ ые окн­ а: нап­ ри­мер, есл­ и спра­ва от те­ CTRL-W CTRL-H ку­щег­ о ок­на расп­ о­ло­же­но друг­ ое, то ком­ анд­ а CTRL-W h не вып­ олн­ ит пер­ е­ход на нег­ о (для цикл­ и­че­ско­ CTRL-W <BS> го пер­ е­хо­да вос­поль­зуй­тесь CTRL-W CTRL-W). CTRL-W <стрелк­ а впра­во> Пер­ ех­ од на окн­ о вы­ше. Дейс­ т­вие ком­ анд­ ы про­ CTRL-W CTRL-L тив­ о­по­ложн­ о CTRL-W j. CTRL-W l CTRL-W w Пе­рех­ од на ок­но, расп­ о­ло­женн­ ое слев­ а от тек­ у­ CTRL-W CTRL-W щег­ о. CTRL-W W Пер­ е­ход на ок­но спра­ва от те­кущ­ е­го. Пе­рех­ од на след­ ую­щее окн­ о сниз­ у или спра­ва. Обр­ а­тит­ е вни­ман­ ие, что эта ком­ анд­ а, в от­ли­чие от CTRL-W j, прои­ зв­ од­ ит цикл­ ич­ е­ский пер­ е­ход чер­ ез все окн­ а в Vim. При дос­тиж­ е­нии сам­ о­го нижн­ ег­ о окн­ а Vim зап­ уст­ ит цикл за­нов­ о и пе­ ре­ве­дет польз­ ов­ а­тел­ я в ок­но, за­ним­ аю­щее са­ мое верх­нее ле­вое по­лож­ ен­ ие. Пе­рех­ од на сле­дую­щее ок­но, расп­ ол­ о­жен­ное сверх­ у или слев­ а. Дейс­ тв­ ие ко­ман­ды об­ратн­ о CTRL-W w.

Перемещение окон 211 Ком­ анд­ а Опис­ а­ние CTRL-W t Пер­ ех­ од в верхн­ ее лев­ ое ок­но. CTRL-W CTRL-T CTRL-W b Пе­ре­ход на окн­ о, зан­ им­ аю­щее сам­ ое ниж­нее CTRL-W CTRL-B пра­вое по­ло­же­ние. CTRL-W p Пе­ре­ход на пред­ ыд­ у­щее окн­ о (в ко­то­ром вы на­ CTRL-W CTRL-P хо­дил­ ись до пос­ лед­не­го пер­ е­ход­ а). Мнемонические подсказкиt и b – со­кращ­ е­ния для верхн­ ег­ о (top) и ниж­не­го (bottom) окон.Опир­ а­ясь на со­глаш­ ен­ ие о том, что проп­ ис­ные и строч­ные бу­кв­ ыреа­лиз­ у­ют прот­ ив­ о­по­лож­ное дей­ст­вие, пе­ре­ме­ще­ние по окн­ ам,выз­ ы­ваем­ ое ком­ ан­дой CTRL-W w, бу­дет про­тив­ оп­ ол­ ожн­ о дей­ст­вию CTRL-W W.Кла­виш­ а Control не разл­ и­ча­ет про­пис­ные и  строч­ные бук­ ­вы.Друг­ им­ и сло­вам­ и, наж­ ат­ ие Shift при наж­ ат­ ом CTRL не даст ни­ка­ко­го эф­фект­ а. Од­нак­ о при на­жат­ ии вто­рой клав­ иш­ и (без Cont­rol) проп­ ис­ные и строчн­ ые бук­ ­вы уже бу­дут разл­ и­чать­ся.Перемещение окон В Vim пер­ е­ме­щать ок­на мож­но дву­мя спо­соб­ а­ми. Перв­ ый про­сто ме­ня­ ет мест­ а­ми два ок­на на эк­ран­ е, втор­ ой мен­ я­ет раск­ лад­ку окон. В перв­ ом случ­ ае разм­ ер­ ы окон ост­ аю­ тс­ я пос­ тоя­ нн­ ым­ и, а са­ми они лишь мен­ яю­ т свои поз­ иц­ ии на эк­ра­не. Во втором – ок­на не тольк­ о пе­ре­мещ­ аю­ т­ся, но и ме­няю­ т раз­мер, что­бы за­пол­нить то мес­ то, ку­да их пер­ ед­ ви­ну­ли.Перемещение окон (ротация или обмен) Три ко­ман­ды пер­ е­ме­ща­ют окн­ а, не мен­ яя их раск­ лад­ки. Две из них по­ зиц­ и­онн­ о сдвиг­ аю­ т ок­на: первая – на­пра­во или вниз, вторая – в проти- воположном направлении (на­лев­ о или вверх), а третья об­ме­нив­ а­ет по­ зиц­ ии двух, возм­ ож­но, нес­ межн­ ых окон. Эти ком­ ан­ды дейс­ т­ву­ют толь­ ко в том столб­це или ря­ду, в ко­то­ром нах­ од­ итс­ я те­кущ­ ее окн­ о. Ком­ ан­да CTRL-W r цикл­ и­чес­ ки сдвиг­ ае­ т окн­ а впра­во или вниз. До­пол­ нен­ и­ем к ней слу­жит ком­ ан­да CTRL-W R, сдвиг­ аю­щая окн­ а в про­тив­ о­ пол­ ожн­ ом на­прав­лен­ ии. Сам­ ый прос­ той спо­соб по­нять раб­ от­ у этих команд – предс­ та­вить, что ряд или стол­бец окон Vim – это од­ном­ ер­ный мас­сив. CTRL-W r сдвиг­ а­ет

212 Глава 11. Многооконность в Vim каж­дый элем­ ент этог­ о масс­ ив­ а на одн­ у по­зи­цию впра­во, а  на пер­вое освоб­ од­ ивш­ ее­ся мес­ то по­мещ­ ае­ т окн­ о, стоя­ вш­ ее по­след­ним. CTRL-W R прос­ то сме­щае­ т все в об­ратн­ ом на­прав­лен­ ии. Есл­ и в столб­це или строк­ е нет окон, вы­ров­нен­ных с тек­ ущ­ им, то эта ко­ манд­ а нич­ е­го не дел­ ае­ т. Пос­ ле тог­ о как Vim пе­рем­ ес­тит ок­на, курс­ ор ост­ а­нетс­ я в том ок­не, из кот­ о­ро­го бы­ла вы­зван­ а ко­ман­да перемещения, то есть пе­ре­мест­ итс­ я вмес­ те с окн­ ом. Ко­ман­ды CTRL-W x и CTRL-W CTRL-X по­зво­ля­ют ме­нять мест­ а­ми два ок­на в  ряд­ у или столбц­ е. По умолч­ а­нию Vim мен­ яе­ т те­ку­щее окн­ о со сле­дую­щим, а есл­ и сле­дую­ще­го нет, то с пред­ ыд­ ущ­ им. Мож­но ме­нять­ся с n-м ок­ном, зад­ ав чис­ ло­вой пар­ ам­ етр пер­ ед ко­ман­дой. Нап­ рим­ ер, что­ бы пом­ е­нять тек­ ущ­ ее окн­ о с идущ­ им третьи­ м по­сле нег­ о, вве­ди­те 3^Wx. Как и в двух пре­дыд­ у­щих ком­ анд­ ах, кур­сор ос­та­етс­ я в том ок­не, отк­ у­ да выз­ ы­ва­лась ко­манд­ а об­мен­ а.Перемещение окон и изменение их раскладки Пять ко­манд пе­ре­ме­щаю­ т и мен­ яю­ т рас­клад­ку окон: две пер­ е­ме­ща­ют тек­ у­щее окн­ о на са­мую верх­нюю (или нижн­ юю) поз­ иц­ ию и раст­ яг­ и­ва­ ют его до мак­сим­ аль­ной ши­рин­ ы, две дру­гие пер­ е­ме­ща­ют те­кущ­ ее ок­ но в крайн­ ее пра­вое или ле­вое по­ло­же­ние, рас­пах­ ив­ ая его по вер­тик­ а­ ли, а  по­след­няя ком­ анд­ а пе­ре­мещ­ ае­ т тек­ у­щее ок­но в  нов­ ую вклад­ку (см. раз­дел «Ред­ акт­ и­ров­ ан­ ие со вклад­кам­ и» на стр. 222). Перв­ ые че­ты­ ре  ко­ман­ды име­ют мне­мо­нич­ ес­ кие свя­зи с  дру­гим­ и ком­ ан­дам­ и Vim: нап­ ри­мер CTRL-W K опи­ра­ет­ся на трад­ иц­ и­онн­ ую функ­цию k – «вверх». Эти соч­ е­та­ния обоб­щен­ ы в табл. 11.3. Табл­ и­ца 11.3. Ко­ман­ды для пер­ е­ме­ще­ния и пер­ еф­ орм­ ат­ ир­ о­ва­ния окон Ко­ман­да Опис­ а­ние ^WK ^WJ По­мещ­ ае­ т те­ку­щее окн­ о на са­мый верх экр­ ан­ а, расп­ ах­ и­вая его во ^WH всю ши­ри­ну. ^WL ^WT По­мещ­ ае­ т те­ку­щее ок­но в сам­ ый низ эк­ра­на, рас­пах­ ив­ ая его во всю шир­ и­ну. По­ме­щае­ т тек­ у­щее окн­ о в са­мое лев­ ое пол­ ож­ е­ние эк­ра­на, рас­па­хи­ вая его во всю выс­ от­ у. По­ме­щае­ т тек­ у­щее ок­но в сам­ ое прав­ ое пол­ о­жен­ ие экр­ а­на, расп­ а­ хив­ ая его во всю вы­сот­ у. Пе­рем­ е­щае­ т тек­ ущ­ ее ок­но в но­вую сущ­ ес­ т­вую­щую вкладк­ у. В точн­ ос­ ти опис­ ать дей­ств­ ие этих ком­ анд сложн­ о. По­сле пер­ ем­ ещ­ е­ния окн­ а и  изм­ ен­ ен­ ия его раз­мер­ а Vim пе­ре­расп­ ред­ е­ля­ет ос­таль­ные окн­ а прие­ м­ле­мым спо­со­бом, что­бы ши­рин­ а или выс­ от­ а пе­рем­ е­щенн­ ог­ о окн­ а сов­па­дал­ и с шир­ и­ной или вы­сот­ ой эк­ра­на. На это дейс­ тв­ ие мо­гут вли­ ять не­ко­то­рые оп­ции окон.

Изменение размера окна 213Команды перемещения окон: обзор Табл­ иц­ ы 11.4 и 11.5 обоб­щаю­ т ко­ман­ды, изуч­ ен­ные в этом раз­де­ле. Таб­лиц­ а 11.4. Ко­манд­ ы цик­ли­чес­ ко­го сдви­га по­ло­жен­ ий окон Ко­ман­да Опи­са­ние ^Wr Сдвиг­ ае­ т ок­на вниз или вправ­ о. ^W^R ^WR Сдви­га­ет окн­ а вверх или влев­ о. ^Wx Об­мен поз­ иц­ иям­ и со след­ ую­щим окн­ ом или, при указ­ ан­ ии числ­ а n, ^W^X с n-м ок­ном.Таб­лиц­ а 11.5. Ко­ман­ды сме­ны разм­ е­ра и форм­ ат­ а оконКом­ анд­ а Опис­ а­ние^WK^WJ По­ме­ща­ет те­ку­щее окн­ о на са­мый верх экр­ а­на и ис­польз­ уе­ т пол­^WH ную шир­ и­ну эк­ра­на. Кур­сор ост­ ае­ тс­ я в пе­рем­ е­щенн­ ом ок­не.^WL Пом­ е­щае­ т те­кущ­ ее ок­но в са­мый низ эк­ра­на и ис­польз­ у­ет всю ши­^WT рин­ у экр­ ан­ а. Кур­сор ос­та­етс­ я в пе­рем­ ещ­ енн­ ом окн­ е. Пом­ ещ­ а­ет те­ку­щее ок­но в край­нее лев­ ое по­лож­ е­ние экр­ а­на и ис­ польз­ у­ет всю выс­ о­ту эк­ра­на. Курс­ ор ос­та­етс­ я в пе­рем­ ещ­ енн­ ом окн­ е. По­ме­ща­ет тек­ ущ­ ее окн­ о в край­нее пра­вое пол­ о­жен­ ие экр­ ан­ а и ис­ польз­ у­ет полн­ ую вы­со­ту эк­ран­ а. Кур­сор ос­та­ет­ся в пер­ ем­ е­щен­ном окн­ е. Пер­ е­ме­ща­ет те­ку­щее ок­но в нов­ ую вклад­ку. Курс­ ор ос­тае­ тс­ я в пе­ ре­мещ­ енн­ ом ок­не. Ес­ли тек­ ущ­ ее окно – единс­ тв­ ен­ное в тек­ ущ­ ей вкладк­ е, ник­ ак­ их дей­ст­вий не прои­ з­во­дитс­ я.Изменение размера окна Те­перь, ко­гда вы луч­ше зна­ко­мы с функ­ция­ми раб­ о­ты с нес­ коль­ким­ и окн­ ам­ и в Vim, пор­ а по­знак­ ом­ ить­ся с управ­лен­ и­ем ими. В этом раз­дел­ е вы уз­нае­те, как мен­ ять раз­мер тек­ у­щег­ о ок­на, что, ко­неч­но, ока­жет влия­ние и на друг­ ие окн­ а на экр­ ан­ е. Чтоб­ ы управл­ ять разм­ е­рам­ и окон и их по­вед­ ен­ и­ем при по­яв­ле­нии нов­ ых окон, Vim пре­дос­тав­ля­ет спе­ци­ альн­ ые опц­ ии. Ес­ли вы пред­поч­ и­тает­ е кон­трол­ и­ро­вать разм­ ер­ ы окн­ а, не при­бе­гая к ко­ ман­дам, исп­ оль­зуйт­ е gvim, и пусть всю ра­бо­ту за вас вы­пол­нит мышь. Про­сто пе­рет­ аск­ ив­ ай­те гра­ниц­ ы окон с ее по­мощ­ ью, и раз­ме­ры ок­на бу­ дут мен­ ятьс­ я авт­ о­мат­ и­че­ски. Для окон, разд­ ел­ ен­ных по верт­ ик­ ал­ и, щелк­ ай­те мыш­ ью над верт­ ик­ аль­ны­ми разделителями – сим­во­лам­ и |. Го­ри­зонт­ аль­ные окн­ а разд­ ел­ яю­ т­ся своим­ и стро­ка­ми сос­ тоян­ ия.

214 Глава 11. Многооконность в VimКоманды изменения размера окна Как и  след­ о­ва­ло ожид­ ать, в  Vim есть ком­ ан­ды для изм­ ен­ е­ния верт­ и­ кальн­ ог­ о и го­риз­ он­тальн­ о­го разм­ ер­ ов окон. Как и все дру­гие ко­ман­ды для раб­ от­ ы с ок­нам­ и, они на­чин­ аю­ т­ся с CTRL-W и след­ у­ют при­вычн­ ым мне­мон­ и­чес­ ким пра­ви­лам, что дел­ а­ет их прос­ тым­ и в  за­пом­ ин­ а­нии и ис­польз­ о­ва­нии. Ком­ ан­да CTRL-W = пы­та­ет­ся сдел­ ать разм­ ер всех окон один­ а­ков­ ым (на это так­же влияю­ т тек­ у­щие знач­ ен­ ия пар­ а­метр­ ов winheight и windw­idth, о кот­ о­рых расс­ каз­ ан­ о в сле­дующ­ ем разд­ ел­ е). Ес­ли те­кущ­ ее со­стоя­ние окон на экр­ ан­ е не поз­ вол­ яе­ т выр­ ов­нять их раз­мер, Vim уст­ а­навл­ и­вае­ т его как мож­но ближ­ е к нужн­ ом­ у. CTRL-W – умень­ша­ет выс­ о­ту те­кущ­ ег­ о ок­на на одн­ у стро­ку. Такж­ е в Vim есть ком­ анд­ а ex, по­звол­ яю­щая явн­ о уменьш­ ить разм­ ер окн­ а. На­при­мер, ком­ анд­ а resize -4 умень­шит выс­ о­ту тек­ ущ­ е­го окн­ а на че­ты­ре стро­ки, при этом раз­мер стоя­ще­го ни­же ок­на со­отв­ ет­ст­венн­ о увел­ и­читс­ я. Ин­тер­ есн­ о, что Vim по­кор­но умень­шит разм­ ер ок­на, да­же есл­ и вы не нах­ о­ди­тесь в мно­гоо­ кон­ном реж­ и­ме. Хо­тя на перв­ ый взгляд это мо­ жет по­ка­затьс­ я нел­ о­гич­ным, но по­боч­ный эф­фект уменьш­ е­ния ок­на по треб­ о­ван­ ию сос­ тои­ т в том, что ос­во­бод­ ивш­ ая­ся обл­ асть доб­ авл­ яе­ т­ ся к ок­ну ко­манд­ной стро­ки. Как прав­ ил­ о, ок­но ко­мандн­ ой строк­ и за­ ни­ма­ет одн­ у стро­ку, но есть си­туац­ ии, ког­ да нуж­но его уве­ли­чить (са­ мая расп­ рос­ тран­ ен­ная причина – дать Vim дос­та­точ­но мес­та для ото­ бра­жен­ ия полн­ ог­ о сос­ тоян­ ия и от­кли­ка ко­манд­ной строк­ и без про­ меж­ ут­ оч­ных при­гла­ше­ний1). Тем не ме­нее ком­ анд­ у :resize лучш­ е применять для сме­ны раз­мер­ а те­ку­ще­го окн­ а, а для ус­та­новк­ и раз­ мер­ а ок­на ко­мандн­ ой стро­ки луч­ше польз­ о­вать­ся опц­ ие­ й cmdheight. CTRL-W + уве­лич­ ив­ ае­ т выс­ о­ту те­ку­ще­го ок­на на одн­ у строк­ у, а ком­ ан­ да :resize +n увел­ и­чив­ ае­ т вы­сот­ у на n строк. Есл­ и дос­тиг­нут мак­сим­ ум выс­ от­ ы окн­ а, то даль­нейш­ ий выз­ ов ко­манд­ ы ни­че­го не мен­ я­ет. Один из авторов предпочитает отобразить ком­ анды CTRL-W + и CTRL-W – на две смеж­ные кла­ви­ши. Удобн­ о взять для это­го кноп­ ку +. Хо­тя она уже исп­ оль­зу­етс­ я в Vim как ком­ анд­ а «вниз», это яв­ ляе­ т­ся изб­ ыт­ очн­ ым2 и не исп­ оль­зуе­ тс­ я ве­тер­ а­на­ми Vim (они для это­ го при­ме­ня­ют ко­ман­ду j). Сле­до­ва­тель­но, эта клавиша – хор­ ош­ ий кан­дид­ ат для отоб­ раж­ е­ния чег­ о-ни­будь дру­го­го, в наш­ ем случае – 1 Есл­ и ре­зульт­ ат вы­полн­ е­ния ка­кой-ли­бо ко­ман­ды (нап­ рим­ ер, упом­ я­нут­ ой ни­же :buffers) не по­ме­щае­ тс­ я в ок­не ком­ андн­ ой строк­ и, Vim выв­ од­ ит при­ гла­шен­ ие «Press ENTER or type command to continue» (на­жмит­ е ENTER или вве­дит­ е ком­ ан­ду для прод­ ол­же­ния). По на­жа­тию ре­зульт­ ат­ ы исч­ ез­ а­ ют. – Прим. нау­ ч. ред. 2 Стро­го гов­ ор­ я, + и j не экв­ ив­ ал­ ентн­ ы: + ав­то­ма­ти­че­ски по­мещ­ а­ет курс­ ор на перв­ ый пе­чатн­ ый сим­вол в след­ ую­щей стро­ке. Ана­ло­га­ми + слу­жат En­ter и ^M. – Прим. на­уч. ред.

Изменение размера окна 215 CTRL-W +. Сле­ва от + (на больш­ ей част­ и кла­виа­тур) расп­ о­ла­гае­ тс­ я клав­ иш­ а –. Од­на­ко – (минус) вво­дит­ся без Shift, а + – с Shift, знач­ ит, отоб­ раз­ ить нужн­ о на кла­ви­шу с Shift, то есть _. Теп­ ерь у вас есть две удоб­ные, расп­ ол­ о­женн­ ые ряд­ ом кноп­ки, кот­ о­рые быс­ т­ро и лег­ко расш­ ир­ яю­ т и со­кращ­ аю­ т те­кущ­ ее ок­но по гор­ и­зон­тал­ и. :resize n уст­ ан­ авл­ ив­ а­ет гор­ и­зон­таль­ный раз­мер тек­ у­щег­ о окн­ а рав­ным n стро­кам. В отл­ ич­ ие от ран­ ее рас­смот­ренн­ ых ко­манд, кот­ о­рые за­дав­ а­ ли от­но­сит­ ель­ное из­мен­ е­ние, эта ус­тан­ авл­ ив­ а­ет аб­со­лют­ное зна­че­ние. zn ус­та­навл­ ив­ ае­ т выс­ о­ту тек­ ущ­ ег­ о ок­на рав­ной n. Обр­ а­тит­ е вним­ а­ние, что ар­гум­ ент n обя­за­те­лен! Ес­ли про нег­ о за­быть, это при­ве­дет к  вы­ полн­ ен­ ию ком­ анд­ ы vi/Vim z, пер­ ем­ ещ­ аю­щей курс­ ор на­верх эк­ран­ а. CTRL-W < и CTRL-W > уменьш­ а­ют и уве­лич­ ив­ а­ют шир­ ин­ у ок­на со­от­ вет­ств­ ен­но. Вспомн­ ит­ е мне­мон­ ич­ е­ское прав­ ил­ о «сдвиг­ а влев­ о» (<<) и «сдвиг­ а впра­во» (>>), чтоб­ ы за­помн­ ить дейс­ тв­ ие этих ко­манд. Нак­ он­ ец, ко­манд­ а CTRL-W | из­мен­ я­ет разм­ ер окн­ а так, что­бы оно при­ обр­ е­ло мак­сим­ альн­ о воз­мож­ную ши­ри­ну (знач­ е­ние по умол­чан­ ию1). Вел­ ич­ и­ну изм­ ен­ ен­ ия ши­рин­ ы окн­ а мож­но указ­ ать с пом­ о­щью vertical resize n, где n за­дае­ т но­вую ши­ри­ну окн­ а.Опции при изменении размеров окон Нес­ кольк­ о опц­ ий Vim влия­ют на ре­зуль­тат ком­ анд из­мен­ ен­ ия раз­ме­ра ок­на, опис­ анн­ ых в пред­ ы­дущ­ ем раз­дел­ е. Ко­гда окн­ о ста­но­витс­ я акт­ ив­ным, winheight и  winwidth опр­ ед­ ел­ я­ют его ми­ни­мальн­ ую выс­ о­ту и шир­ ин­ у соо­ тв­ ет­ст­вен­но. Нап­ рим­ ер, ес­ли экр­ ан вме­ща­ет два один­ ак­ о­вых окн­ а из 45 строк, то по умол­ча­нию Vim поп­ ыт­ а­ етс­ я раз­дел­ ить экр­ ан по­ровн­ у. Есл­ и уст­ ан­ ов­ ить winheight больш­ им, чем 45, например 60, то вся­кий раз при пер­ е­ход­ е в но­вое окн­ о ре­дакт­ ор бу­дет уст­ а­навл­ и­вать вы­сот­ у это­го ок­на равн­ ой 60 стро­кам, а вы­сот­ у друг­ о­го  – 30. Это удоб­но при одн­ ов­ ре­мен­ном ред­ ак­тир­ о­ва­нии двух файл­ ов, так как по­зво­ляе­ т авт­ ом­ а­тич­ е­ски уве­ли­чив­ ать раз­мер выд­ е­ленн­ ог­ о ок­на до мак­ си­маль­но­го при пер­ ем­ ещ­ е­нии от ок­на к ок­ну и из од­но­го файл­ а в друг­ ой. equalalways го­вор­ ит Vim все­гда дел­ ать раз­мер­ ы окон один­ ак­ о­вы­ми пос­ ле раз­де­лен­ ия или за­крыт­ ия ок­на. Это хо­рош­ ий ва­ри­ант, ког­ да нужн­ о по­ лу­чить ра­зумн­ ую раск­ лад­ку окон по мер­ е их до­бав­ле­ния и удал­ ен­ ия. eadirection оп­ре­де­ляе­ т на­правл­ ен­ ия, в кот­ о­рых дейс­ т­ву­ет опц­ ия equal­ always. Возм­ ож­ные значения: hor, ver и both. Они прик­ а­зы­ва­ют Vim де­ лать ок­на од­но­го раз­мер­ а по гор­ и­зонт­ ал­ и, вер­тик­ а­ли и в обо­их на­прав­ ле­ния­ х со­от­ветс­ тв­ ен­но. Изм­ ен­ ен­ ие раз­ме­ра про­ис­ход­ ит всяк­ ий раз при раз­де­ле­нии и уда­ле­нии ок­на.1 Не­обяз­ а­тель­ный чис­ лов­ ой пар­ ам­ етр, пред­ше­ств­ ующ­ ий ком­ ан­де, ус­та­нав­ли­ ва­ет ши­рин­ у ок­на равн­ ой это­му конк­ ретн­ ом­ у знач­ е­нию. Для за­да­ния выс­ о­ ты окн­ а исп­ оль­зу­етс­ я ком­ анд­ а ^W_; прин­цип дейс­ т­вия ана­ло­ги­чен. – Прим. нау­ ч. ред.

216 Глава 11. Многооконность в Vim cmdheight ус­тан­ ав­лив­ ае­ т вы­со­ту ко­манд­ной строк­ и. Как уже опи­сыв­ а­ лось выш­ е, умень­шен­ ие вы­со­ты окн­ а, ког­ да оно яв­ляе­ т­ся единс­ тв­ ен­ ным, увел­ ич­ ив­ ае­ т выс­ о­ту ко­манд­ной строк­ и. С по­мо­щью этой оп­ции ее раз­мер мож­но заф­ ик­си­ро­вать. Нак­ он­ ец, winminwidth и winminheight оп­ре­дел­ яю­ т мин­ и­маль­ную шир­ и­ну и выс­ о­ту окон в Vim. Он расс­ матр­ и­вае­ т их как же­ст­кие усл­ о­вия, т. е. ок­ нам ник­ ог­ да не буд­ ет по­зво­ле­но иметь раз­мер меньш­ е, чем эти знач­ ения.Обзор команд изменения размера В  табл.  11.6 обобщ­ ен­ ы спо­соб­ ы из­мен­ е­ния разм­ ер­ ов окон. Эти оп­ции уста­нав­ли­ва­ютс­ я с пом­ о­щью ко­манд­ ы :set. Таб­ли­ца 11.6. Ко­манд­ ы изм­ ен­ е­ния раз­мер­ а окн­ а Ком­ анд­ а ­ Опис­ ан­ ие или опц­ ия ^W= Дел­ ае­ т разм­ ер­ ы всех окон один­ ак­ ов­ ым­ и. Тек­ ущ­ ее ок­но со­ блюд­ ае­ т ус­тан­ ов­ки winheight и winwidth. :resize -n Уменьш­ ае­ т раз­мер ок­на. Изм­ ен­ ен­ ие по умолч­ ан­ ию равн­ о ^W- од­ной строк­ е. :resize +n Увел­ ич­ и­вае­ т раз­мер ок­на. Из­мен­ е­ние по умол­ча­нию рав­ ^W+ но одн­ ой стро­ке. :resize n Уст­ ан­ авл­ и­ва­ет выс­ от­ у тек­ у­щег­ о окн­ а. По умол­ча­нию раз­ ^W^_ ^W_ мер де­ла­етс­ я мак­си­мальн­ о больш­ им (ес­ли не указ­ ан n). zn <ENTER> Уст­ ан­ авл­ ив­ ае­ т вы­сот­ у те­ку­щег­ о ок­на равн­ ой n. ^W< Уменьш­ ае­ т шир­ и­ну те­кущ­ ег­ о окн­ а. Из­мен­ ен­ ие по умолча- нию – один столб­ ец. ^W> Уве­лич­ ив­ а­ет ши­рин­ у те­кущ­ е­го окн­ а. Из­мен­ е­ние по умол- чанию – один столб­ ец. :vertical resize n Ус­та­нав­ли­ва­ет шир­ и­ну тек­ ущ­ ег­ о ок­на рав­ной n. По умол­ ^W| ча­нию окн­ о стан­ о­витс­ я макс­ и­мальн­ о ши­рок­ им. winheight, оп­ция При пе­рех­ од­ е в окн­ о или при его соз­да­нии ус­та­навл­ ив­ а­ет его высоту по мень­шей мер­ е рав­ной за­дан­но­му знач­ е­нию. winwidth, оп­ция При пе­ре­хо­де в окн­ о или при его созд­ ан­ ии ус­тан­ ав­ли­вае­ т его ши­ри­ну по мень­шей ме­ре равн­ ой за­дан­ном­ у знач­ ен­ ию. equalalways, оп­ция Ес­ли из­ме­ня­етс­ я ко­лич­ е­ств­ о окон из-за раз­де­лен­ ия или за­ крыт­ ия ок­на, ста­рае­ тс­ я сдел­ ать их разм­ ер оди­нак­ ов­ ым. eadirection, оп­ция Опр­ е­де­ляе­ т спо­соб вы­рав­нив­ а­ния раз­мер­ ов окон в Vim: по го­ри­зонт­ а­ли, по верт­ ик­ а­ли или по обо­им пар­ ам­ ет­рам. cmdheight, оп­ция Ус­тан­ авл­ и­вае­ т выс­ от­ у ком­ анд­ной строк­ и. winminheight, Оп­ред­ ел­ я­ет ми­ним­ аль­ную выс­ о­ту окн­ а, кот­ о­рая зат­ ем опц­ ия при­ме­ня­ет­ся ко всем созд­ ав­ аем­ ым ок­нам. winminwidth, опц­ ия Оп­ре­де­ля­ет ми­ни­мальн­ ую шир­ и­ну ок­на, ко­тор­ ая зат­ ем прим­ ен­ я­етс­ я ко всем соз­да­вае­мым ок­нам.

Буферы и их взаимодействие с окнами 217Буферы и их взаимодействие с окнамиVim исп­ ольз­ у­ет буф­ ер­ ы как кон­тейн­ ер­ ы во вре­мя раб­ от­ ы. Для пол­но­гопо­ним­ ан­ ия их сущности нео­ б­ход­ и­ма боль­шая практ­ ик­ а. Для управл­ е­ния буф­ ер­ а­ми и пер­ е­мещ­ е­ния межд­ у ни­ми сущ­ е­ств­ уе­ т мно­же­ст­во ко­манд, од­на­ко стои­ т поз­ на­ком­ ить­ся с не­кот­ ор­ ы­ми ос­новн­ ы­ми пон­ я­тия­ми, ка­сающ­ им­ ис­ я буф­ е­ров, и  пон­ ять, зач­ ем и  как они при­сутс­ тв­ ую­ тв сеа­ н­се ра­бо­ты Vim.Начн­ ем с  от­крыт­ ия не­сколь­ких окон с  разн­ ым­ и фай­ла­ми. На­прим­ ер,зап­ ус­тит­ е Vim, отк­ рыв file1, за­тем внут­ри это­го сеа­ нс­ а введ­ ит­ е :splitfile2, а пот­ ом :split file3. По­явят­ся три фай­ла, от­кры­тые в трех раз­ных ок­нах Vim.Теп­ ерь вве­ди­те ко­ман­ды :ls, :files или :buffers, чтоб­ ы увид­ еть спис­ окбуф­ ер­ ов. Ре­дакт­ ор выд­ аст три про­нум­ е­ров­ ан­ных строк­ и, со­держ­ а­щихимя файл­ а и доп­ олн­ и­тельн­ ую инф­ ор­мац­ ию. Это бу­фе­ры Vim для те­ку­щег­ о се­анс­ а. Кажд­ ом­ у фай­лу соо­ т­вет­ств­ уе­ т свой бу­фер, каж­дый буф­ ериме­ет уник­ альн­ ый, не­из­ме­няе­мый, свя­занн­ ый с  ним ном­ ер. В  на­шемпри­ме­ре file1 нах­ о­дит­ся в бу­фер­ е 1, file2 – в буф­ ер­ е 2 и т. д.Ес­ли по­сле люб­ ой из трех пе­ре­числ­ ен­ных вы­ше ком­ анд по­ста­вить вос­кли­ца­тель­ный знак (!), то бу­дет выв­ е­де­на доп­ ол­ни­тельн­ ая инф­ ор­мац­ ияпо всем буф­ е­рам.Справ­ а от но­ме­ра кажд­ о­го буф­ ер­ а сто­ит флаг со­стоян­ ия. Эти флаг­ иопис­ ы­ва­ют буф­ ер, как по­ка­за­но в табл. 11.7.Таб­лиц­ а 11.7. Флаг­ и со­стоян­ ия, опис­ ы­вающ­ ие бу­фе­рыКод Опи­сан­ иеu Нео­ тоб­ ра­жаем­ ый бу­фер. Та­кой буф­ ер не поя­ вит­ся в спи­% или (взаи­мои­ с­ ске, ес­ли тольк­ о вы не ис­польз­ ует­ е пар­ ам­ етр !. Чтоб­ ы уви­ключ­ аю­щее) # деть при­мер не­ото­бра­жаем­ ог­ о буф­ ер­ а, введ­ ит­ е :help. Vima или (взаим­ о­ис­ раз­дел­ ит тек­ ущ­ ее ок­но, по­сле чег­ о в но­вом окн­ е по­явитс­ яклю­чаю­щее) h встрое­ нн­ ая справк­ а. Прос­ той ввод ко­ман­ды :ls не по­каж­ ет- или (взаим­ ои­ с­ бу­фер справк­ и, но :ls! его вы­ве­дет.клю­чаю­щее) = % – это бу­фер тек­ у­ще­го ок­на, а # ука­зы­вае­ т буф­ ер, в кот­ о­+ или (взаим­ ои­ с­ рый можн­ о пе­рек­ лю­читьс­ я с по­мо­щью ком­ ан­ды :edit #.клю­чаю­щее) x a ука­зы­вае­ т на ак­тивн­ ый буф­ ер. Это зна­чит, что бу­фер за­ гру­жен и ви­дим. h указ­ ы­вае­ т на скрыт­ ый буф­ ер. Скрыт­ ые бу­фе­ры су­щес­ тв­ ую­ т, но не видн­ ы ни в од­ном окн­ е. Симв­ ол - оз­на­чае­ т, что для дан­но­го буф­ е­ра вы­клю­че­на оп­ ция ре­дак­тир­ о­ван­ ия modifiable. Файл отк­ рыт толь­ко для чтен­ ия. Сим­вол = оз­на­ча­ет, что бу­фер нель­зя сдел­ ать ре­ дакт­ и­руе­мым (на­прим­ ер, из-за отс­ утс­ т­вия у поль­зов­ ат­ е­ля прав на за­пись это­го файл­ а). + ука­зы­вае­ т, что буф­ ер изм­ е­нен, x – бу­фер сод­ ерж­ ит ошиб­ ки чтен­ ия.

218 Глава 11. Многооконность в Vim Флаг u пред­ ос­тавл­ яе­ т инт­ е­ресн­ ый спо­соб уз­нать, ка­кой файл справ­ ки вы чи­тает­ е в  Vim в  дан­ный мом­ ент. На­при­мер, ес­ли выз­ вать :help, а зат­ ем :ls!, то ста­нет видн­ о, что нео­ то­бра­жае­мый бу­фер ссы­ лае­ тс­ я на windows.txt – встрое­ нн­ ый файл справк­ и Vim. Те­перь, ко­гда вы умее­те выв­ од­ ить спис­ ок буф­ е­ров Vim, мож­но по­гов­ о­ рить о разл­ ич­ных спо­соб­ ах ис­польз­ ов­ а­ния этих бу­фе­ров.Специальные буферы Vim Vim при­мен­ я­ет не­кот­ о­рые буф­ е­ры для свои­ х соб­ств­ ен­ных це­лей. Эти бу­фер­ ы на­зы­ва­ют­ся спец­ и­альн­ ы­ми. На­прим­ ер, бу­фер­ ы справк­ и, опи­ санн­ ые в пред­ ы­дущ­ ем разд­ е­ле, яв­ля­ютс­ я спе­циа­ льн­ ым­ и. Как прав­ и­ло, под­ обн­ ые бу­фер­ ы нельз­ я мен­ ять и ре­дак­тир­ о­вать. Вот при­ме­ры че­тыр­ ех спец­ иа­ льн­ ых буф­ ер­ ов Vim: quickfix Со­держ­ ит спи­сок оши­бок, созд­ анн­ ый ва­шим­ и ко­ман­да­ми1 (их мож­ но уви­деть ком­ анд­ ой :cwindow), или спис­ ок пол­ ож­ е­ний (его мож­но уви­деть ком­ ан­дой :lwindow). Не ре­дак­тир­ уй­те сод­ ерж­ им­ ое это­го бу­ фе­ра! Он пом­ ог­ ае­ т про­грамм­ и­стам за­нов­ о прох­ о­дить по цик­лу «ре­ дакт­ и­ров­ а­ние-ком­пи­ляц­ ия-отл­ адк­ а». Бо­лее подр­ об­но об этом на­пи­ са­но в глав­ е 14. help Со­держ­ ит файл­ ы справ­ки Vim, про ко­тор­ ые расс­ каз­ ы­ва­лось в раз­де­ ле «Встро­енн­ ая справк­ а» на стр. 187. :help за­груж­ а­ет их в спец­ и­аль­ ные бу­фе­ры. directory Пред­став­ля­ет со­бой со­дер­жим­ ое ка­та­ло­га, то есть спи­сок фай­лов в ка­тал­ ог­ е (и не­мног­ о до­пол­ни­тельн­ ых подс­ каз­ ок по ко­манд­ ам). Vim поз­ вол­ я­ет пер­ ем­ е­щать­ся по это­му бу­фе­ру как по обыч­но­му текс­ тов­ о­ му фай­лу и вы­би­рать файл­ ы под курс­ ор­ ом для ре­дак­ти­ров­ а­ния на­ жа­тие­ м ENTER, что очень удобн­ о. scratch Эти бу­фе­ры сод­ ерж­ ат текст для об­щих це­лей. Этот текст не сох­ ра­ня­ етс­ я, и его мож­но уда­лить в лю­бой мом­ ент.Скрытые буферы Скры­тые буферы – это та­кие бу­фер­ ы Vim, ко­тор­ ые в данн­ ый мом­ ент не отоб­ ра­жен­ ы ни в одн­ ом ок­не. Это по­зво­ляе­ т ред­ ак­тир­ ов­ ать не­скольк­ о фай­лов, прин­ им­ ая в учет ог­ра­ни­чен­ность реа­ ль­но­го эк­ра­на, без по­сто­ янн­ ог­ о пер­ е­за­пи­сыв­ ан­ ия и счи­ты­ван­ ия фай­лов. Нап­ ри­мер, пред­ставь­ 1 На­при­мер, :make, упо­мя­нут­ ая в глав­ е 8. – Прим. на­уч. ред.

Буферы и их взаимодействие с окнами 219 те, что вы ред­ акт­ ир­ уе­те файл myfile, но вско­ре ре­шает­ е пор­ аб­ о­тать над дру­гим файлом – myOtherfile. Есл­ и уст­ ан­ овл­ ен­ а опц­ ия hidden, то мож­но нач­ ать ре­дак­ти­ров­ ан­ ие myOtherfile, вы­звав :edit myOtherfile. Эта ко­ман­ да зас­ тав­ ит Vim скрыть бу­фер myfile и пок­ аз­ ать на его мест­ е myOtherfile. Это мож­но пров­ е­рить, вы­полн­ ив :ls и уви­дев оба буф­ е­ра в спи­ске, при­ чем myfile буд­ ет пом­ еч­ ен как скры­тый.Команды работы с буферами Су­щес­ т­ву­ет поч­ти 50 ком­ анд, на­це­ленн­ ых иск­ люч­ и­тель­но на буф­ ер­ ы. Мно­гие из них по­лез­ны, но боль­шая их часть вых­ о­дит за рам­ки на­ше­ го обс­ у­жд­ ен­ ия. Ко­гда вы отк­ рыв­ ае­те и  зак­ рыв­ ае­те не­скольк­ о фай­лов и окон, Vim управл­ яе­ т буф­ е­рам­ и авт­ о­ма­тич­ ес­ ки. Ком­плект ко­манд ра­ бот­ ы с буф­ ер­ ам­ и поз­ во­ля­ет дел­ ать с ним­ и все, что угодн­ о. Час­то их ис­ польз­ у­ют в скрип­тах при вы­пол­не­нии та­ких за­дач, как вы­груз­ка, уда­ ле­ние и из­ме­не­ние бу­фер­ а. Две ко­ман­ды ра­бот­ ы с буф­ ер­ а­ми по­лез­но знать для об­щих це­лей из-за их спос­ обн­ ос­ ти вып­ ол­нять мног­ о ра­бо­ты над мног­ и­ми файл­ ам­ и: windo cmd Сок­ ра­щен­ ие от «window do» (мы, по край­ней ме­ре, счи­та­ем это не­ пло­хой мнем­ о­ник­ ой). Эта «псевд­ о­бу­ферн­ ая» ком­ анд­ а (на са­мом дел­ е она от­нос­ ит­ся к ком­ анд­ ам раб­ о­ты с окн­ а­ми) вып­ ол­няе­ т ко­ман­ду cmd в  каж­дом окн­ е. Она ра­бот­ а­ет анал­ о­гич­но пе­рех­ од­ у нав­ ерх экр­ ан­ а (^Wt) и про­ход­ ит че­рез все окн­ а, вып­ ол­няя в каж­дом указ­ ан­ную ко­ ман­ду в фор­мат­ е :cmd. Ко­ман­да раб­ о­тае­ т тольк­ о в тек­ у­щей вкладк­ е и пре­кра­щае­ т свое вы­полн­ е­ние, как тольк­ о :cmd при­во­дит к ошибк­ е. Ок­но, где прои­ зошл­ а эта ошиб­ка, ста­нов­ итс­ я тек­ у­щим. Ко­манд­ е cmd не разр­ еш­ а­етс­ я ме­нять со­стоян­ ие окон, то есть она не мож­ ет уда­лять, соз­да­вать и ме­нять их по­ряд­ ок. cmd мо­жет быть сос­ тав­ле­на из нес­ кольк­ их ко­манд, разд­ ел­ ен­ных вер­ тик­ альн­ ой чер­той (|). Не пу­тай­те это обоз­ нач­ е­ние с со­глаш­ ен­ ие­ м, при­нят­ ым в UNIX о кон­вейе­ р­ных ко­манд­ ах! Здесь ком­ ан­ды вы­пол­ няю­ т­ся по­сле­до­ва­тельн­ о, прич­ ем снач­ а­ла во всех окн­ ах вып­ ол­няе­ т­ ся перв­ ая ком­ ан­да, затем – втор­ ая и т. д. В кач­ ес­ т­ве при­мер­ а раб­ от­ ы :windo предп­ ол­ ож­ им, что вы ред­ акт­ и­руе­ те па­кет фай­лов Java, и по ка­кой-то прич­ и­не у вас прои­ зош­ла не­пра­ вильн­ ая ка­пи­та­ли­зац­ ия име­ни класс­ а. Это нео­ бх­ од­ им­ о исп­ рав­ ить, пом­ е­няв каж­дое вхож­ д­ ен­ ие myPoorlyCapitalizedClass на MyPoorlyCa­pi­ ta­lizedClass. Та­кую опе­рац­ ию можн­ о прод­ е­лать при по­мо­щи :windo: :windo %s/myPoorlyCapitalizedClass/MyPoorlyCapitalizedClass/g Пре­красн­ о!

220 Глава 11. Многооконность в Vim bufdo [!] cmd Ком­ анд­ а ана­ло­гичн­ а windo, но ра­бот­ ае­ т во всех буф­ ер­ ах сеа­ н­са ре­ дак­тир­ о­ва­ния, а  не тольк­ о в  вид­ им­ ых буф­ ер­ ах тек­ у­щей вкладк­ и. Как и  windo, ко­манд­ а bufdo пре­кращ­ а­ет ра­бо­ту на перв­ ой ошиб­ке и ост­ ав­ляе­ т кур­сор в том буф­ е­ре, где прои­ зош­ла эта ошибк­ а. В след­ ую­щем при­мер­ е все буф­ ер­ ы пре­обр­ аз­ у­ют­ся в файл­ о­вый фор­ мат UNIX: :bufdo set fileformat=unixОбзор команд работы с буферами Мы не став­ ил­ и цел­ ью опи­сать в табл. 11.8 все ко­ман­ды, связ­ ан­ные с бу­ фе­ра­ми. В ней прив­ ед­ е­ны ко­ман­ды, о кот­ о­рых рас­сказ­ а­но в этом раз­де­ ле, а такж­ е нек­ о­то­рые дру­гие из по­пул­ ярн­ ых. Таб­лиц­ а 11.8. Об­зор ко­манд раб­ о­ты с бу­фер­ ом Ком­ анд­ а Опис­ а­ние :ls[!] Выв­ од­ ит спис­ ок всех бу­фер­ ов и имен фай­лов. Не­отоб­ раж­ ае­ :files[!] мые бу­фер­ ы выв­ о­дят­ся, ес­ли стои­ т мо­диф­ ик­ а­тор !. :buffers[!] :ball Ред­ ак­тир­ о­вать все файл­ ы в спи­ске ар­гум­ ент­ ов Vim (args) или :sball буф­ е­ры (sball от­кро­ет их в нов­ ых ок­нах). :unhide Ред­ акт­ ир­ ов­ ать все заг­ руж­ енн­ ые буф­ е­ры (sunhide от­крое­ т их :sunhide в нов­ ых ок­нах). :badd file До­бавл­ яе­ т file в спи­сок бу­фер­ ов. :bunload[!] Выг­ руж­ ае­ т буф­ ер из пам­ ят­ и. Мод­ иф­ ик­ а­тор ! зас­ тавл­ я­ет вы­ груз­ ить даж­ е из­ме­ненн­ ый буф­ ер без сох­ ран­ ен­ ия. :bdelete[!] Выг­ ру­жа­ет бу­фер и удал­ я­ет его из спис­ ка буф­ ер­ ов. Мо­ди­фи­ кат­ ор ! вы­груж­ а­ет изм­ е­нен­ный буф­ ер без сох­ ран­ е­ния. :buffer [n] Пер­ е­ход в бу­фер n (sbuffer отк­ ро­ет нов­ ое ок­но). :sbuffer [n] :bnext [n] Пер­ е­ход в след­ ую­щий по пор­ ядк­ у n-й бу­фер (sbnext отк­ ро­ет :sbnext [n] нов­ ое ок­но). :bNext [n] Переход в n-й предыдущий буфер. (sbNext и sbprevious откро- :sbNext [n] ют новое окно.) :bprevious [n] :sbprevious [n] Пер­ ех­ од к перв­ о­му буф­ е­ру (sbfirst от­кро­ет но­вое окн­ о). :bfirst :sbfirst Пе­ре­ход к пос­ лед­не­му буф­ е­ру (sblast от­крое­ т нов­ ое окн­ о). :blast :sblast Пер­ е­ход к n-му из­ме­нен­ном­ у буф­ е­ру (sbmod от­кро­ет нов­ ое ок­ :bmod [n] но). :sbmod [n]

Теги и окна 221Теги и окна Vim рас­шир­ я­ет функ­цио­наль­ность те­гов vi на окн­ а, пред­ ост­ ав­ляя тот же ме­хан­ изм пе­рех­ од­ а по те­гам, но уже для не­сколь­ких окон. Пе­ре­ход по те­гу от­кро­ет файл в нов­ ом окн­ е в со­отв­ ет­ств­ ующ­ ем мес­те. Оконн­ ые ком­ ан­ды для ра­бот­ ы с те­гам­ и раз­де­ляю­ т те­кущ­ ее окн­ о и пе­ре­ ход­ ят либ­ о на файл, соо­ тв­ ет­ст­вующ­ ий тег­ у, ли­бо на файл, соо­ т­ветс­ т­ вующ­ ий имен­ и фай­ла под кур­со­ром. :stag[!] tag разд­ ел­ я­ет ок­но, чтоб­ ы ото­бра­зить ме­стоп­ ол­ ож­ ен­ ие найд­ ен­ но­го те­га. Окн­ о с  но­вым файл­ ом, сод­ ер­жа­щим со­отв­ ет­ст­вующ­ ий тег, ста­нов­ ит­ся те­ку­щим, а  кур­сор по­ме­ща­етс­ я на со­отв­ ет­ст­вующ­ ий тег. Есл­ и тег не найд­ ен, ко­манд­ а зав­ ер­ша­ет­ся, и но­вое окн­ о не соз­дае­ тс­ я. Ког­ да вы осв­ ои­тесь со спра­вочн­ ой сист­ ем­ ой Vim, то смо­жет­ е исп­ оль­ зов­ ать ко­манд­ у :stag, что­бы от­кры­вать каж­дый но­вый тер­мин справк­ и в от­дельн­ ом ок­не вме­сто пер­ е­ход­ а от одн­ ог­ о фай­ла к дру­го­ му в од­ном и том же ок­не.^W] или ^W^] разд­ ел­ я­ет ок­но и от­крыв­ ае­ т нов­ ое ок­но над те­кущ­ им. Приэтом нов­ ое окн­ о ста­но­витс­ я тек­ у­щим, а кур­сор по­ме­щае­ т­ся на со­от­вет­ств­ ую­щий тег. Есл­ и соо­ тв­ ет­ств­ ие те­гу не найд­ е­но, ком­ анд­ а зав­ ерш­ а­етра­бо­ту.^Wg] раз­де­ляе­ т окн­ о и  созд­ а­ет нов­ ое ок­но над тек­ у­щим. В  нов­ ом ок­неVim вы­полн­ я­ет ко­ман­ду :tselect tag, где tag – это идент­ иф­ и­кат­ ор те­гапод кур­сор­ ом. Ес­ли со­от­вет­ств­ ующ­ ег­ о тег­ а не об­на­руж­ ен­ о, ко­ман­дапре­кращ­ ае­ т раб­ о­ту. Курс­ ор пом­ ещ­ а­етс­ я в но­вое ок­но, ко­то­рое ста­нов­ ит­ся те­ку­щим.^Wg^] ра­бо­та­ет анал­ о­гичн­ о ^Wg], но вып­ олн­ я­ет :tselect вмес­ то tjump.^Wf (или ^W^F) раз­дел­ я­ет ок­но и ред­ ак­ти­руе­ т имя файл­ а под кур­со­ром.Vim пос­ ле­дов­ ат­ ель­но про­смот­рит файл­ ы, про­пи­сан­ные в  опц­ ии pathпри по­иск­ е этог­ о фай­ла. Ес­ли файл не су­ще­ств­ уе­ т ни в од­ном из ка­та­ло­гов path, ком­ анд­ а пре­кращ­ ае­ т раб­ о­ту, не соз­дав­ ая нов­ ог­ о ок­на.^WF разд­ ел­ яе­ т окн­ о и ре­дакт­ и­ру­ет имя файл­ а под кур­сор­ ом. Он пом­ ещ­ а­ет­ся в нов­ ое ок­но с этим фай­лом на ту стро­ку, кот­ о­рая со­отв­ етс­ т­ву­ет но­ме­ру, стоящ­ ем­ у по­сле име­ни фай­ла в пер­вом окн­ е.^Wgf отк­ рыв­ ае­ т файл под курс­ ор­ ом в но­вой вкладк­ е. Ес­ли файл не су­ще­ств­ у­ет, вкладк­ а не соз­да­ет­ся.^WgF от­крыв­ ае­ т файл под кур­со­ром в но­вой вкладк­ е и пом­ ещ­ а­ет курс­ орв стро­ке, ном­ ер ко­то­рой стоя­ л по­сле имен­ и файл­ а в перв­ ом ок­не. Приот­сут­ст­вии файл­ а вкладк­ а не созд­ а­ет­ся.

222 Глава 11. Многооконность в VimРедактирование с вкладками Вы зна­ли, что кром­ е ред­ ак­тир­ ов­ ан­ ия нес­ кольк­ их окон мож­но созд­ а­вать нес­ кольк­ о вклад­ ок? Vim по­звол­ я­ет созд­ ав­ ать нов­ ые вклад­ки, каж­дая из кот­ ор­ ых ве­дет себ­ я не­зав­ и­си­мо от друг­ их. В кажд­ ой вклад­ке мож­но раз­де­лять эк­ран, ре­дак­тир­ ов­ ать нес­ кольк­ о фай­лов, в общ­ ем, тео­ре­тич­ е­ ски дел­ ать все, что мож­но прод­ ел­ ыв­ ать в  одн­ ом ок­не, од­на­ко теп­ ерь управ­лять ра­бо­той еще про­ще, польз­ уя­ сь одн­ им окн­ ом с вклад­кам­ и. Мног­ ие поль­зо­ват­ ел­ и Firefox хо­ро­шо знак­ ом­ ы с  вкладк­ ам­ и1 и уже не пред­став­ля­ют себ­ е веб-серф­ инг­ а без них. По­этом­ у они со­глас­ ят­ся, что эта воз­можн­ ость до­ба­вит функц­ ион­ аль­нос­ ти ред­ акт­ ир­ ов­ а­нию. Тем, кто с этим не зна­ком, сто­ит по­про­бов­ ать. Вкладк­ и мож­но исп­ оль­зов­ ать как в обыч­ном Vim, так и в gvim, од­на­ко в gvim они выг­ ляд­ ят при­ят­нее и удоб­нее. Нек­ от­ о­рые из наиб­ о­лее важ­ ных спо­соб­ ов соз­дан­ ия и управл­ ен­ ия вкладк­ а­ми вклю­чаю­ т: :tabnew filename От­крыв­ ае­ т но­вую вкладк­ у и ре­дак­ти­руе­ т в ней файл (нео­ бя­за­тель­но). Есл­ и файл не ука­зан, Vim соз­даст но­вую вкладк­ у с пус­тым буф­ е­ром. :tabclose Зак­ ры­вае­ т те­ку­щую вкладк­ у. :tabonly Зак­ ры­ва­ет все ост­ аль­ные вклад­ки. Ес­ли в них нах­ о­дят­ся изм­ е­нен­ ные файл­ ы, они не бу­дут за­крыт­ ы, кро­ме слу­чая, ког­ да уст­ а­нов­лен­ а опц­ ия autowrite (тог­ да все из­ме­ненн­ ые фай­лы буд­ ут со­хран­ е­ны пе­ред зак­ ры­тие­ м вклад­ ок). В gvim вкладк­ у мож­но ак­тив­ и­ро­вать про­стым щелч­ком по «кор­ еш­ку» ввер­ху экр­ ан­ а. В симв­ оль­ных тер­мин­ ал­ ах вкладк­ и то­же мож­но акт­ и­ ви­ров­ ать с  пом­ о­щью мы­ши, ес­ли она нас­ троен­ а (об­ра­ти­тесь к  опц­ ии mouse). Такж­ е мож­но очень бы­стр­ о пе­рем­ ещ­ атьс­ я от од­ной вклад­ки к  дру­гой с  по­мощ­ ью CTRL PAGE DOWN (пер­ ех­ од на вкладк­ у спра­ва) и CTRL PAGE UP (пе­рех­ од на вклад­ку слев­ а). Есл­ и вы по­пал­ и на сам­ ую ле­вую или сам­ ую прав­ ую вклад­ки и пы­тае­тесь пер­ ем­ ест­ ить­ся даль­ше влев­ о или вправ­ о, то Vim пе­ре­мес­тит вас на сам­ ую прав­ ую или сам­ ую ле­вую вклад­ки со­отв­ ет­ст­вен­но. gvim пре­дос­тавл­ яе­ т всплы­ваю­щее по пра­вой кнопк­ е мыш­ и ме­ню, из ко­ то­рог­ о мож­но отк­ рыть но­вую вклад­ку (с но­вым файл­ ом или без так­ ов­ о­ го) и зак­ рыть вкладк­ у. На рис.  11.4 при­вед­ ен при­мер наб­ ор­ а вкла­док (обр­ а­ти­те вним­ ан­ ие на всплы­ваю­щее ме­ню вкладк­ и). 1 Впроч­ ем, сей­час эту функ­цию пред­ла­га­ют едв­ а ли не все брау­зе­ры. – Прим. на­уч. ред.

Закрытие и выход из окон 223 Рис. 11.4. При­мер вклад­ ок и ре­дакт­ и­ро­ва­ния с вкладк­ а­ми в gvimЗакрытие и выход из окон Су­ще­ств­ уе­ т чет­ ы­ре раз­личн­ ых спо­со­ба зак­ рыть окн­ о, спе­циф­ ич­ных для мног­ оо­ кон­но­го ре­дакт­ и­ров­ ан­ ия: вый­ти, за­крыть, скрыть и  за­ крыть ос­таль­ные. ^Wq (или ^W^Q, или :quit) – это окон­ная верс­ ия ком­ ан­ды :quit. В  са­мом про­стом случ­ ае (один сеа­ нс ре­дак­тир­ о­ван­ ия с един­ст­вен­ным ок­ном) она ве­дет се­бя так же, как и ком­ анд­ а vi :quit. Есл­ и уст­ ан­ овл­ ен­ а оп­ция hidd­en и тек­ ущ­ ее ок­но явл­ я­ет­ся по­след­ним из окон на экр­ а­не, ссыл­ ающ­ имс­ я на дан­ный файл, то окн­ о за­кры­вае­ тс­ я, одн­ ак­ о бу­фер это­го файл­ а сох­ ра­ ня­етс­ я (к не­му можн­ о обр­ а­титьс­ я) и скрыв­ ае­ т­ся. Друг­ им­ и слов­ а­ми, Vim все еще хран­ ит файл, по­этом­ у поз­же мож­но верн­ утьс­ я к ред­ ак­тир­ ов­ а­ нию. Есл­ и hidden не уст­ ан­ овл­ ен­ а, а окн­ о явл­ я­ет­ся по­след­ним, со­держ­ а­ щим этот файл, и в буф­ ер­ е те­кущ­ е­го окн­ а есть нес­ ох­ ран­ енн­ ые изм­ е­не­ ния, то ком­ анд­ а прек­ ращ­ а­ет ра­бо­ту, да­бы не пот­ е­рять изм­ ен­ е­ния. Одн­ а­ ко ес­ли файл ото­бра­жае­ т­ся в как­ ом-ниб­ удь дру­гом ок­не, те­кущ­ ее окно за­крыв­ а­етс­ я. ^Wc (или :close[!]) зак­ ры­вае­ т те­кущ­ ее ок­но. Ес­ли уст­ ан­ овл­ ен­ а опц­ ия hidden и это окно – пос­ ледн­ ее, ссы­лаю­щее­ся на дан­ный файл, то Vim за­ кры­вае­ т ок­но и  скры­ва­ет буф­ ер. Ес­ли окно расп­ ол­ ож­ ен­ о на стран­ иц­ е вклад­ки и явл­ яе­ тс­ я по­след­ним ок­ном на этой вкладк­ е, то зак­ рое­ т­ся как окн­ о, так и вклад­ка. Есл­ и вы не исп­ ольз­ ует­ е мо­диф­ и­кат­ ор !, то эта ко­ ман­да не ста­нет зак­ рыв­ ать ник­ а­кой файл с не­со­хран­ ен­ны­ми изм­ ен­ е­ния­ ми. Мо­диф­ и­кат­ ор ! го­вор­ ит Vim безо­ гов­ о­рочн­ о за­крыть те­ку­щее окн­ о. Обр­ а­тит­ е вним­ а­ние, что дан­ная ко­ман­да не имее­ т вар­ иа­ции ^W^C, так как Vim ис­польз­ у­ет ^C в кач­ ес­ т­ве отм­ ен­ ы ком­ анд­ ы. Сле­дов­ а­ тельн­ о, ес­ли вы по­проб­ ует­ е исп­ ольз­ ов­ ать ^W^C, то ^C поп­ рос­ ту от­ме­ нит ко­манд­ у. Анал­ ог­ ичн­ о при исп­ оль­зо­ва­нии ком­ анд­ ы ^W в со­чет­ ан­ ии с ^S и ^Q мож­но столкн­ утьс­ я с тем, что их терм­ ин­ ал­ ы за­мор­ оз­ ил­ ись, пос­ коль­ ку нек­ о­то­рые терм­ и­нал­ ы ин­терп­ рет­ ир­ у­ют ^S и ^Q как управл­ яющ­ ие сим­вол­ ы для ост­ а­новк­ и и во­зобн­ ов­ле­ния ото­браж­ ен­ ия инф­ орм­ а­ции на экр­ а­не. Ес­ли вы столк­нул­ ись с за­га­дочн­ ой зам­ ор­ оз­кой при ис­ польз­ ов­ ан­ ии этих ком­ анд, по­про­буйт­ е взять друг­ ие прив­ ед­ енн­ ые здесь комб­ и­на­ции.

224 Глава 11. Многооконность в Vim ^Wo, ^W^O и :only[!] за­крыв­ аю­ т все ок­на кро­ме тек­ ущ­ ег­ о. Есл­ и ус­тан­ ов­ле­ на оп­ция hidden, то все зак­ рыв­ аем­ ые ок­на скры­ва­ют свои буф­ ер­ ы. Ес­ли она не ус­та­новл­ е­на, то лю­бое ок­но, сод­ ер­жащ­ ее файл с нес­ о­хра­нен­ны­ ми изм­ е­нен­ иям­ и, ос­тае­ т­ся на эк­ран­ е, есл­ и тольк­ о не ис­польз­ уе­ тс­ я мо­ ди­фик­ ат­ ор !. То­гда все окн­ а за­крыв­ а­ютс­ я с от­ка­зом от изм­ е­нен­ ий фай­ лов. По­вед­ ен­ ие этой ко­манд­ ы такж­ е оп­ред­ ел­ яе­ т­ся опц­ ие­ й autowrite: ес­ ли она уст­ ан­ овл­ ен­ а, все ок­на зак­ рыв­ аю­ т­ся. При этом ок­на, сод­ ер­жа­щие нес­ ох­ ра­ненн­ ые из­ме­не­ния, пер­ ед зак­ рыт­ и­ем сох­ ра­няю­ т сод­ ер­жи­мое свои­ х фай­лов на диск. :hide [cmd] вы­хо­дит из те­кущ­ е­го окн­ а и скрыв­ а­ет буф­ ер, ес­ли толь­ко на нег­ о не ссыл­ а­ютс­ я дру­гие окн­ а. Ес­ли сто­ит не­обя­зат­ ельн­ ая ко­ман­да cmd, то бу­фер скрыв­ а­ет­ся и вып­ олн­ яе­ тс­ я эта ком­ ан­да. В табл. 11.9 дан обз­ ор этих ко­манд. Табл­ иц­ а 11.9. Ком­ ан­ды для за­кры­тия и вых­ од­ а из окон Ко­ман­да Опис­ ан­ ие Вых­ од из те­ку­ще­го ок­на. :quit[!] ^Wq За­крыт­ ие те­ку­щег­ о ок­на. ^W^Q Тек­ у­щее окн­ о стан­ о­витс­ я единс­ тв­ енн­ ым. :close[!] ^Wc :only[!] ^Wo ^W^OИтог Как вы теп­ ерь по­ним­ ае­те, с по­мощ­ ью мно­гоо­ конн­ ых функ­ций Vim до­ бав­ляе­ т себ­ е «ло­шад­ и­ных сил» по час­ти ред­ акт­ и­ров­ а­ния. Он по­зво­ляе­ т созд­ а­вать и уда­лять окн­ а бы­стр­ о, на лет­ у. Кроме того, у Vim есть в рук­ а­ ве ком­ анд­ ы для раб­ от­ ы на­прям­ ую с бу­фер­ ам­ и, ко­то­рые явл­ я­ют­ся глав- ным ме­хан­ изм­ ом управл­ е­ния файл­ ам­ и, с пом­ о­щью ко­тор­ ого Vim про­ изв­ од­ ит ре­дак­тир­ ов­ ан­ ие с нес­ коль­ким­ и ок­нам­ и. Это еще один при­мер то­го, как Vim пре­дос­тав­ляе­ т мно­гоо­ конн­ ое ре­дак­ти­ров­ ан­ ие но­вич­кам, од­но­врем­ ен­но пред­лаг­ ая опытн­ ым поль­зов­ ат­ е­лям ин­ст­ру­мен­ты, позво- ляющие под­стро­ить ра­бо­ту с окн­ а­ми под свои пот­ реб­нос­ ти.

12 Скрипты Vim Глава 12.Иног­ да для созд­ а­ния тре­буе­мо­го ок­ру­жен­ ия ред­ акт­ ор­ а не­дос­тат­ оч­но од­ной на­строй­ки. Vim поз­ во­ля­ет опр­ е­дел­ ить все ус­тан­ овк­ и в фай­ле .vimrc,но, воз­мож­но, вам зах­ о­четс­ я бо­лее дин­ а­мич­ной или «ак­туа­ ль­ной» на­стройк­ и. Скрипт­ ы Vim по­звол­ яю­ т это сде­лать.Они да­ют воз­мож­ность вып­ ол­нять сложн­ ые зад­ ач­ и и при­ним­ ать реш­ е­ния сог­ ласн­ о ваш­ им по­требн­ ос­ тям, от про­вер­ки со­дер­жим­ о­го бу­фе­ра дооб­ра­бот­ки не­пред­вид­ енн­ ых внеш­них факт­ о­ров.Ес­ли у вас есть кон­фи­гу­рац­ и­онн­ ый файл Vim (.vimrc, .gvimrc или оба),знач­ ит вы уже исп­ оль­зует­ е скрипт­ ы Vim, но про­сто этог­ о не знает­ е. Всеко­манд­ ы и опц­ ии Vim ра­бо­та­ют и в скрипт­ ах. Кром­ е тог­ о, как мож­нобы­ло предп­ о­ло­жить, Vim пре­дос­тав­ля­ет стан­дартн­ ое управ­лен­ ие вы­пол­нен­ и­ем про­грам­мы (if...then...else, while и т. д.), пе­ре­менн­ ые и функ­ции, тип­ ичн­ ые для дру­гих язы­ков.В  этой глав­ е мы расс­ мот­рим на при­ме­ре по­ша­го­вое созд­ ан­ ие скрип­таи прос­ тые кон­ст­рукц­ ии, восп­ оль­зуе­ мс­ я нек­ о­то­ры­ми встрое­ н­ны­ми в про­грам­му функц­ иям­ и и изуч­ им пра­вил­ а, ко­то­рых сле­ду­ет при­дер­жив­ ать­ся при на­пис­ ан­ ии пра­виль­ных и пред­ска­зуем­ ых скрип­тов Vim.Какой ваш любимый цвет?Начн­ ем с сам­ ых прос­ тых на­стро­ек и под­строи­ м ок­руж­ ен­ ие под свою лю­бим­ ую цве­тов­ ую схем­ у. Это про­сто, к том­ у же здесь ис­польз­ уе­ тс­ я толь­ко ба­зо­вый эле­мент скрипт­ а Vim, то есть прос­ то ком­ анд­ а ред­ ак­тор­ а.Vim пос­ тавл­ я­ет­ся с 17 на­страив­ аем­ ы­ми цвет­ о­вы­ми схе­мам­ и. Цвет­ о­вуюсхе­му мож­но выб­ и­рать и  акт­ ив­ ир­ ов­ ать, про­пис­ ав в  фай­ле .vimrc или.gvimrc ко­манд­ у colorscheme. Сам­ ой люб­ им­ ой «нед­ оо­ цен­ ен­ной» схе­мойодн­ ог­ о ав­тор­ а яв­ляе­ тс­ я «пус­тынн­ ая» (desert) схем­ а: colorscheme desert


















































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