Сборка исполняемого файла под конкретные задачи 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] Помимо созд ан ия нов ог о окн а будут выполн ены авток оманд ы WinLeave, 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 не даст никакого эффект а. Однак о при нажат ии второй клав иш и (без Control) проп исные и строчн ые бук вы уже будут разл ичаться.Перемещение окон В 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 и windwidth, о кот орых расс каз ан о в следующ ем разд ел е). Если текущ ее состояние окон на экр ан е не поз вол яе т выр овнять их размер, 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 не экв ив ал ентн ы: + автоматически помещ ает курс ор на перв ый печатн ый символ в след ующей строке. Аналогами + служат Enter и ^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 на MyPoorlyCapi talizedClass. Такую операц ию можн о прод елать при помощи :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. Есл и уст ан овл ен а опция hidden и тек ущ ее окно явл яется последним из окон на экр ане, ссыл ающ имс я на данный файл, то окн о закрывае тс я, одн ак о буфер этого файл а сох ра няетс я (к нему можн о обр атитьс я) и скрыв ае тся. Друг им и слов ами, 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
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 1 - 50
- 51 - 100
- 101 - 150
- 151 - 200
- 201 - 250
- 251 - 300
- 301 - 350
- 351 - 400
- 401 - 450
- 451 - 500
- 501 - 512
Pages: