Улучшенные возможности редактирования 401(сюда отн ос ятся такие симв ол ы, как забой, ост анов и прочие, опр ед еляем ые настройк ам и stty).Зам етим, что это приводит к инт ересном у явл ен ию. В ред акт орах типаvi ком анды мог ут иметь очень длинн ые имена, обычно с уник альн ыминескольким и первыми симв ол ам и, поэ тому прин им аю тс я абб ревиат уры команд. В редакт ор ах типа Emacs имен а ком анд зач аст ую не уникальны в перв ых симв ол ах, но подд ержка заверш ен ия ком анд позвол яет уменьш ить объе м ввод а.Стеки тегов Стек и тег ов были описан ы ран ее в раздел е «Стек и тег ов» на стр. 157. В vile они доступны и раб от аю т неп осредс тв енным обр азом. Здесь они нем ног о отличаю тс я от ост альных мод ифик аций vi. Осн овн ые отличия – в ком андах режима vi, исп ользуемых для поиска по тегам и их извлече ния из стек а. В табл. 18.3 показ аны команд ы раб оты с тегами в vile. Таблиц а 18.3. Команд ы раб от ы с тегами в vileКом анда Функцияnext-tag Продолжае т поиск других соо тветс тв ий в файле tags.pop[!] Изв лекает пол ож ение курс ора из стек а, восс тан авливая курсор в прежн ей поз иции.show-tagstack Созд ает нов ое окн о, в кот ором показан стек тегов. Содер жим ое окна мен яе тс я по мере помещ ения тег ов в стек и их извлеч ения из него.ta[g][!] [tagstring] Редакт ирует файл, сод ержащий tagstring, как опр ед ел е но в файле tags. Воск лицат ельный знак ! вынуж д ае т vile пер еключ итьс я в новый файл, даже есл и тек ущ ий буфер изменен и не сох ранен.Ком анды для реж им а vi опис ан ы в табл. 18.4.Таблиц а 18.4. Ком анды работ ы с тег ами в ком андн ом режим е vileКом анд а Функция^] Ищет в файл е tags местополож ен ие идентификат ора, на^T, ^X ^] котором стоит курсор, и перех од ит на это место. Текущая^A ^] позиция занос итс я в стек тегов. Восстан авлив ае т пред ыд ущ ее пол ожение из стека тегов, то есть изв лекае т из него один элем ент. То же, что команд а :next-tag.Как и в друг их ред акт орах, способ обр ащен ия vile с командами для тегов управл яе тс я опциям и, как пок азано в табл. 18.5.
402 Глава 18. vile: vi Like Emacs (vi как Emacs) Таблиц а 18.5. Опц ии vile для управления тегам и Опц ия Функц ия pin-tagstack Пои ск по тегам и извлеч ен ие из стек а не мен яют тек ущ ег о окн а, то есть оно «зак реп лено» (pin). По умолчан ию эта опция имеет знач ен ие false. tagignorecase Поиск по тегам игнорир ует регистр. По умолч ан ию устан овл е но знач ен ие false. taglength Опр едел яет кол ич еств о знач им ых симв олов в теге, который ищетс я. Знач ен ие по умолч анию, равн ое нул ю, указыв ает, что знач им ы все симв олы. tagrelative При использ ован ии файл а tags из другог о каталог а имена фай лов из этого файла tags рассматрив аютс я относительно тог о ка тал ога, где расп ол ож ен файл tags. tags Этой опц ии можно прис воить список файлов tags, разд ел енн ых проб ел ами, в кот ор ых нужно искать тег и. vile заг руж ае т все файл ы tags в спец иальн ые буф еры, кот орые по умолчан ию скры ты, но при жел ан ии их можн о отредактир ов ать. В tags можн о пом ещ ать перем енные окр ужен ия и маски оболочк и. tagword Эта опция говорит, что для поиск а тега нужн о брать все слов о, на котором стоит курсор, а не ту его часть, котор ая нач ин ае тся с поз иции курсора. По умолчан ию эта опция выключен а, что делает vile совместим ым с vi.Бесконечная отмена В принц ипе здесь vile похож на другие редакт оры, но отличае тся от них в практ ик е примен ения. Как в elvis и Vim, в нем можно устан овить предел для отмен, но, как в nvi, ком анда . прои звед ет следующ ую отме ну или повтор ен ие в зависим ос ти от ситуац ии. В реж им е vi пос ледов а тельные отмены и возвраты реализ ованы разн ыми ком анд ам и. Для управл ения кол ич ес тв ом запом ин аем ых изм енен ий vile исп ользу ет опц ию undolimit. По умолчанию она равн а 10, то есть вы может е отм е нить 10 пос ледн их изм ен ен ий. Есл и уст анов ить ее равной нулю, то бу дет осуществ лен а поист ин е «бесконечная отм ена», но это мож ет пот ре бовать больших объе мов памяти. Чтобы начать отмену, наб ер ит е сначал а команды u или ^X u. После этог о каждый последующий ввод симв ола . приведет к новой отмене. Как и в vi, две команды u просто перек люч ают сос тоян ие изменения1, одн а ко ^X u дейс твительно сдел ает нов ую отм ен у. Команд а ^X r выполн яет возврат. Если ввести . после ^X r, то он пов то ритс я. К ком анд ам ^X u и ^X r можно доб ав ить число, пос ле чего vile про изведет нужн ое кол ич ес тв о отмен или возв ратов. 1 Отм ен ен о или не отмен ен о. – Прим. науч. ред.
Улучшенные возможности редактирования 403Строки произвольной длины и двоичные данные vile мож ет ред акт ир овать файл ы со строк ам и прои зв ольн ой длины и с произв ольн ым числ ом строк. Прог рамм а авт оматичес ки поддержив ае т двоичн ые данн ые. Для этог о не треб уетс я никак их спец иальн ых ком анд или опц ий. Для ввод а 8-раз рядн ого символ а нажмит е ^V, а зат ем x и две шестнад цатер ичн ые циф ры, либ о 0 и три восьмеричн ые цифры, либо три десят ичные цифр ы. Также можн о ввес ти 16-разрядные данн ые Unicode, есл и нажать ^V, за тем u, пос ле чего ввес ти до четыр ех шес тн ад цатер ичн ых цифр. Есл и знач ение опц ии file-encoding для текущег о буфера – одн о из юникодов ских (utf-8, utf-16 или utf-32), vile сох ран яе т его нап рямую как UTF-8, отоб ражая его сог ласн о возм ожнос тям терм ин ал а или дисп лея. Таким образом, мы приш ли к теме лок ал из ации. Поддержка локализации На протяжении мног их лет vile имел лишь зачаточную подд ержку ло калей. Частичн о это объя сн ялось тем, что на различных платф ормах (за иск люч ен ие м фирм енных систем UNIX) эта подд ержка была руд имен тарной. В vile прис утс тв ов али собс тв енные табл иц ы тип ов символов (то есть управляющие, числов ые, печатаемые, знаки преп ин ан ия, а также исп ользуем ые в именах файлов, масках символов и оболочке), что по звол яло указать, как ие из не-ASCII симв олов являю тся печ ат аем ыми. Врем ен а менял ись, и vile менялс я соответств енно потребн остям поль зоват ел ей. Приведем краткий перечень изм ен ен ий, упоряд оченных ло гич ески, а не по хронолог ии разр аботк и: • Теп ерь vile имп орт ир уе т симв ольные табл иц ы с хост а и пред ост ав ляе т команды для их изм енения через скрипты, а не сод ержит фик сир ов анн ые табл иц ы симв ол ов.1 • Рег улярные выраж ен ия vile подд ержив ают классы симв олов POSIX, а также класс ы, соотв етс твующие собств енн ым типам симв ол ов про граммы. • Ред акт ор поддерж ивает изв лечен ие лексичес ких единиц (ток енов, to kens) с экр ан а, нап ример для tags, скриптов и проч его. Раньш е это свойство подраз умевало смесь проверок на тип символа со специаль ным синтакс ичес ким анализат ор ом. Сейчас это тольк о рег улярн ые выр аж ения без необходимости в доп олн ит ельн ой лог ик е анализатора. • Ред акт ир ов ан ие файла, содержащ его 8-разрядные данн ые. Нап ри мер, представл ен ие данн ых в код ировк е ISO-8859-7 (Греч ес кая), ко гда локаль хоста исп ользуе т UTF-8, может оказ атьс я неп рос тым де лом. При старт е vile прог рамм а провер яет, зак анч ив ае тс я ли локаль1 Эта функция полезн а даж е на фирменн ых систем ах UNIX, где не всег да имеютс я правильн ые таблицы.
404 Глава 18. vile: vi Like Emacs (vi как Emacs) на UTF-8 (или на схож ие симв ол ы), нап ример el_GR.UTF-8. Если да, то ред актор подд ерживае т редакт ир ов ан ие в соответствующ ей 8-раз рядной лок ал и, нап рим ер el_GR. • Анал огичн о при редактирован ии файл ов в сред е хост а, поддержи вающей UTF-8, буд ут встречатьс я файлы в код ировке UTF-8. В бол ее нов ой версии можн о прик аз ать vile сох ран ять файлы в различных код ир овк ах Unicode и считывать те же код ировки. Подд ерживаетс я 8-разр ядн ая мод ель редакт иров ан ия, в которой буфер ы, отмеч енн ые как 8-разрядн ые, прео бр аз уются в 8-разрядн ую код ировку, а буф е ры в Unicode редактирую тс я неп осредс твенн о (то есть без прео браз о ван ия). Все это – расш ирения. На кажд ом этап е все еще ост аются стар ые функ ции. Есть и другие асп ект ы локализации, такие как формат сообщ ений и по ряд ок сравнения текста, но vile их не расс матр ивае т. Форматы файлов Ког да vile счит ывает файл, он дел ае т нескольк о предп оложен ий о его сод ерж имом, чтоб ы представить пользов ат елю понятные данн ые: • Провод итс я пров ерк а на наличие у польз оват еля прав на зап ись файл а. • Провер яетс я тип конц а строк и (CR, LF или CR/LF). • Делае тс я проверк а отмет ок порядка следов ания байт ов для Unicode. • Пров еряе тс я, использ уется ли мног об айтов ая кодир овка Unicode. На основе этих пров ер ок программ а устан авл ив ае т свойс тв а (они наз ы ваются «реж имами») для только что счит анн ог о буфер а, которые при меняю тся к этом у буф ер у. Кроме того, vile мож ет преобраз ов ыв ать дан ные при чтен ии следующ им образ ом: • Удал ять симв ол конца строк и из каждой строк и, запом ин ая соо тв ет ств ующий реж им recordseparator. • Если у файл а нет зав ершающ его пер ен ос а строк и, программ а уста навливае т опц ию nonewline. • Перевод ить данн ые UTF-16 и UTF-32 в UTF-8, запомин ая соо тветст вующую опц ию file-encoding. Когда vile пол учае т команду сохранить буфер в файл, он исп ольз уе т эти лок альные опц ии для восс тан овлен ия файла.Инкрементный поиск Как упом ин алось ранее в разд еле «Инкрементный пои ск» на стр. 162, в vile инк рементный поиск осущ ес твл яе тс я ком анд ам и ^X S и ^X R. Что бы его акт ив иров ать, не нужн о уст анавлив ать как ую-либо опц ию.
Улучшенные возможности редактирования 405 При вводе курсор перемещае тс я по файл у, всегда поп ад ая на перв ый симв ол текс та, где обнаруж ен о соо тветствие. ^X S производит инк ре ментн ый поиск вперед по файл у, а ^X R – в обратном направлен ии. Возможно, вы захотите доб авить в файл .vilerc следующие ком анд ы (про них буд ет расс казан о позж е в разд еле «Модель редакт иров ан ия vile» на стр. 411), чтоб ы инкрем ентн ый поиск произв одилс я бол ее знаком ым и команд ами поиск а / и ?: bind-key incremental-search / bind-key reverse-incremental-search ? Также представл яе т интер ес возможность «visual match» (визуал из а ции совпад ен ий), когда подсвечив аются все вхождения искомого выра жен ия. Следующая строк а в файл е .vilerc: set visual-matches reverse предп ис ывает vile исп ольз ов ать для виз уал изации совпаден ий инв ер сию цвета. Поскольк у иногда подсветк а может усл ожнять прос мотр, ком анд а = вык люч ае т любую текущ ую подс ветку, пока вы не введет е новый шаблон пои ска.Прокрутка влево-вправо Как упом ин алось ранее в раздел е «Прок рутк а влево-вправ о» на стр. 163, так ая прокрутка в vile включае тся опц ие й :set nolinewrap. В отличие от друг их редакт оров, здесь она уст ан овл ен а по умолч анию. Длинн ые строки отмеч аю тс я слева и справа значками < и >. Значение sideways оп ределяе т колич ес тво симв ол ов, на кот орые vile смещае т экран при про крутк е влев о или вправо. Если sideways уст анов ить равн ым нулю, каж дая прокрутк а перем естит экр ан на одн у треть. Иначе экр ан будет сме щаться на заданн ое количество симв ол ов.Визуальный режим vile отл ич ае тся от elvis и Vim в том, как он подсвеч ивает текст, ожи дающий обраб отку. Редакт ор исп ольз ует ком анду «выделенног о пер е мещ ения» (quoted motion) – q. В нач але области вы ввод ит е q, затем люб ые ком анды перемещения vi, чтоб ы добр аться до конца области, и снова наж имаете q, чтобы закон чить выделенное пер ем ещение. vile подс ветит выд ел енный текст. Арг ум ент ы команд ы q зад аю т тип подсветк и. 1q (то же, что и q) выпол няет точную подсветк у, 2q подсвечив ае т только строк и, а 3q выполн яет прям оугольн ое выдел ен ие. Как прав ил о, выд еленное перем ещен ие исп ольз уе тс я в сочетан ии с опе ратор ом, так им как d или y. Так им обр азом, d3qjjwq удалит прямоуголь ник, заданн ый перем ещ ен ие м. Есл и использовать выделение без опера тора, область ост ае тся подсвеч енной, и к ней можно обрат итьс я наж а тие м ^S. Таким обр аз ом, d ^S удалит подсвеч енную область.
406 Глава 18. vile: vi Like Emacs (vi как Emacs) Кроме того, прям оу гольн ые обл аст и мог ут зад ав аться метк ам и1. Как известн о, метка мож ет использ оваться для отсылк и либо к опред елен ном у симв ол у (когда к ней обр ащ аютс я по `), либо к опред ел енной стро ке (когда к ней обр ащ аю тс я по '). Кром е тог о, ссылка на метк у (скажем, метку, зад анн ую ком анд ой mb) с пом ощью `b вместо 'b меняет тип произ вод имой операции – d'b удал ит набор строк, а d`b – част и двух строк и строк и межд у ним и. Исп ользов ан ие ссылки на метку в вид е ` даст бо лее «точн ую» обл асть, чем ссылка на метку вид а '. В vile есть ссылк а на метк у третье й разнов идн ости. Ком анда \ мож ет исп ользоватьс я как нов ый спос об ссылк и на метк у. Сам а по себе она ве дет себя как ` и перем ещ ает курс ор на тот симв ол, где была установл ен а метка. Если же ее сочетать с опер атор ом, то ее повед ение меняе тся. Ссылк а на метку стан овитс я «прямоу гольн ик ом», так что действ ие d\b удал ит этот прям оу гольн ик из симв ол ов, угл ы котор ого опр едел яютс я положением курс ор а и симв олом, на котором стои т метка b. Клав иш и Результат ma The 6th edition of <citetitle>Learning the vi Editor</citetitle> brings the book into the late 1990’s. In particular, besides the “original” version of <command>vi</command> that comes as a standard part of every Unix system, there are now a number of freely available “clones” or work-alike editors. Уст ан ов ить на b в book метку a. 3jfr The 6th edition of <citetitle>Learning the vi Editor</citetitle> brings the book into the late 1990’s. In particular, besides the “original” version of <command >vi</command> that comes as a standard part of every Unix system, there are now a number of freely available “clones” or work-alike editors. ^A ~\a Переместить курс ор на r в number, чтоб ы отметить противополож ный угол. The 6th edition of <citetitle>Learning the vi Editor</citetitle> brings the BOOK INTO The late 1990’s. In particulAR, BESIDES the “original” version of <command>vi</COMMAND> that comes as a standard part of every Unix system, there are nOW A NUMBER of freely available “clones” or work-alike editors. Помен ять регистр прямоугольник а, ограниченног о метк ой a. 1 Спасиб о Полу Фокс у (Paul Fox) за это объя снен ие.
Помощь программисту 407Ком анды, зад ающие произв ольные обл асти и производящие над ним иоперации, обобщен ы в табл. 18.6.Табл иц а 18.6. Ком анд ы vile для блочног о режим аКом анд а Операцияq^A r Нач ало и конец выд еленн ог о перемещ ен ия.> Отк рыв ает прямоу гольник.< Смещ ение текста вправ о. Тоже, что и ^A r, когда обл асть являе тy ся прям оу гольником.c Смещ ен ие текс та влев о. Тоже, что и d, ког да область являе тс я прям оугольник ом.^A u^A l Копир ов ание всей обл асти. vile зап ом инае т, что она был а прям о^A ~ угольной.^A SPACEp, P Изм енен ие обл аст и. Для неп рямоугольн ой обл аст и удаляе т весь текст между конечн ыми точк ами и пер ех од ит в реж им вставки.^A p, ^A P Есл и обл асть прямоугольная, зап рашив ае т ввод текс та, котор ый будет заполн ять строки. Меняе т рег истр всех букв обл асти на проп исной. Мен яе т рег истр всех букв области на строчн ый. Переключает рег истр всех букв обл асти. Зап олн яет обл асть проб елам и. Вставляет текст обр атн о. vile вып олн яе т прям оу гольную встав ку, если исходн ый текст был прям оугольным. Зас тавл яет ранее скоп иров анный текст вставитьс я обр атно, как есл и бы он был прям оугольн ым. В качес тве ширины прям оу голь ник а бер етс я длин а самой длинной скопир ованной строки.Помощь программисту В этом разд еле рассматр ив аются возможн ос ти обл егч ить раб от у про граммиста в vile.Ускорение цикла редактирование-компиляция Для управл ения разраб отк ой прог раммы vile исп ользует две ком анды реж има vi, котор ые приведены в табл. 18.7. Программа поним ае т соо бщен ия Entering directory XXX и Leaving direc tory XXX, генерирующие GNU make, что позвол яе т ей отыскать нужн ый файл, даже если он наход итс я в другом кат алоге. Анал из соо бщ ений об ошибках осущ еств л яетс я с пом ощью рег улярных выр ажен ий, хран ящихс я в буфер е [Error Expressions]. vile созд ае т его авт омат ич ес ки, а зат ем исп ольз уе т при наж атии ^X ^X. При нео бход имо
408 Глава 18. vile: vi Like Emacs (vi как Emacs) сти туда можно добавлять выраж ен ия. Тогда прог рамм а исп ользует расш иренный синтаксис, поз воляющий указ ывать распол ожение имен файлов, ном ер ов строк, столбцов и проч ег о в соо бщениях об ошибках. В онлайн-справк е можно проч итать подр обн ости, хот я, возможно, вам не придется делать ник ак их измен ений, пос кольк у даже в изнач аль ном виде все раб от ает хорош о. Таблица 18.7. Команды vile для разр аботки программ в реж им е vi Ком анда Функция ^X !command ENTER Запускает ком анд у, а ее вывод сох раняе т в буф ер под ^X ^X именем [Output]. Нах одит следующ ую ошибку. vile дел ает синт акс иче ский анализ выв ода и перемещ ае т на позиц ию след ую щей ошибки. Пои ск ошиб ок в vile также отс леж ивает изм ен ен ия файла, учитывая вставки и удален ия при переходе от одн ой ошибк и к друг ой. Поиск ошиб ок прим еняется к самом у последнему буфер у, созд анн ом у путем чтен ия выв ода ком анд ы обол очки. Например, команд а ^X!command сгенер ирует буф ер с именем [Output], а команда :e !command – с имен ем [!command]. Пои ск ошибок подстроитс я соо тветс тв ующим обр аз ом. Исп ольз уя ком анд у :error-buffer, можн о выполнить пои ск ошиб ок в лю бом прои зв ольном буф ере (а не тольк о в том, который явл яе тс я выводом команд обол очки). Это позволит использ ов ать поиск ошиб ок для пре дыд ущ его выв од а комп илятор а или команды egrep.Подсветка синтаксиса vile подд ерж ивае т подс ветк у синт аксиса во всех свои х конфигур ация х. Для расцветки синтаксиса использ ую тс я специальные программы – фильтр ы синтакс ис а. Они мог ут быть встроенным и в vile или запус каться как внешние. Ред актор пос ылае т содерж им ое раскрашив аемого буфер а в фильтр синтакс ис а, считывае т версию с разметк ой и примен я ет эту разметк у для раскраск и буф ер а. Встроенные фильтры раб от аю т быс трее внешн их прог рамм, и обо лочка не оказывае т влияния на их отоб раж ен ие в термин але. На не котор ых платформ ах мож ет осущ ес твл яться дин амичес кая под грузк а фильтр ов синтакс иса. Это позвол яет уменьшить размер ис полн яем ого модуля прог раммы, хоть и не дае т такой же скор ос ти, как при встроенных фильтр ах. На нас тоящ ий мом ент сущес тв ует 71 прог рамм а, а также отд ельн ая прог рамм а для man-страниц UNIX. Нек от орые программ ы использ у ютс я для файл ов нес кольких тип ов. Наприм ер, C, C++ и Java имеют сходный синт аксис, но разн ые ключевые слов а.
Помощь программисту 409в vile есть макр ос ы, зап уск ающие фильтр ы синтаксиса либ о автоматически при изменении буфер а, либо по зап рос у. Они привед ен ы в табл. 18.8.Табл ица 18.8. Ком анды подсветк и синтакс иса в vileКом анд а Прив язк а Функция клавиш:HighlightFilter Выз ывае т подсветку синт акс иса для данного буфер а. vile выб ир ае т фильтр, осн овыв аясь на расширенном свойс тв е буф ера, наз ыв ае мом осн овным режимом (о нем будет расска зан о позже в раздел е «Осн овн ые реж им ы» на стр. 412). Есл и фильтры встрое нные, иниц иал из ация vile уст анавливает режим autocolor, чтобы выз вать этот макрос через пять секунд пос ле оконч ания изменения буфер а польз ов ателем.:HighlightFilterMsg ^X-q Прик реп ляет подсветку к тек ущему буфер у с помощью HighlightFilter. После заверш ен ия выводит соо бщениеa.:HighlightClear ^X-Q Очищае т все подс ветки для тек ущ ег о буф ер а. Не влияе т на основной реж им буфер а.:set-highlighting Мен яе т основной реж им буфера на majormodemajormode и зап ускает подс ветку синт акс ис а.:show-filtermsgs Показ ывает ошибки фильтра синт акс иса для тек ущего буф ера. Есл и фильтр синтакс ис а обнаруж ивае т ошибки, он соо бщае т о них, и vile отображ ае т их в буфере [Filter Messa ges], позвол яя перем ещ аться по позиция м, где были обнаружен ы ошибк и.a Ког да в серед ин е 1990-х подсветка синтаксис а была впервые реализов ан а в vile, было важно пок азать, что она заверш илась. Времен а изм ен ил ись – маш ин ы стал и быстр ее.При кажд ом свое м запуск е фильтр синт аксис а счит ывает один или более внешних файлов, содержащих ключевые слова, кот ор ые нужно выдел ять цветом, а такж е соотв етс тв ующ ие цвет а и атриб ут ы для них(жирн ый, подчеркнут ый, курс ивн ый и проч ие). Он ищет эти файл ы(с расш ир ение м .keywords), использ уя имя реж им а majormode буфера.В онлайн-справк е прив еден ы правила для этог о пои ск а. Можно исп ользовать макрос :which-keywords, чтобы увидеть, где vile ищет эти файлы,а такж е где именн о он их нашел. См. пример 18.1.Пример 18.1. Примерн ый выв од «:which-keywords cmode»Show which keyword-files are tested for: cmode
410 Глава 18. vile: vi Like Emacs (vi как Emacs) (* marks found-files) $cwd ./.c.keywords $HOME ~/.c.keywords ~/.vile/c.keywords $startup-path * /usr/local/share/vile/c.keywords major mode, который всег да заканч ив ае тс я на «mode» Ваш текущ ий рабочий кат алог Путь поиска скриптов vile Фильтры синтакс иса vile исп ольз ую т общ ий набор цветов, определ ен ный как классы: Action, Comment, Error, Ident, Ident2, Keyword, Keyword2, Literal, Number, Preproc и Type, независ им о от тог о, сконф иг урир ов ан ли vile для X11, термин ала (termcap, terminfo, curses) или Windows. Боль шая часть определ ен ий ключ ев ых слов отсылает к класс у. Это поз воляе т мен ять все цвет а, отред актиров ав лишь один файл, обычно – $HOME/.vi le.keywords. Онл айн-справк а дае т подр обн ости настройки цветов син таксис а. С одн ой стороны, по прич ин е осущ ес твлен ия подсветки синтаксис а внешней прог рамм ой можно нап ис ать сколько угодн о подсветок для разных язык ов. С другой, из-за тог о что эти функции работ аю т на низ ком уровн е, выполн ение под обной задач и непрограмм ис там и зат рудни тельн о. Онлайн-справка описыв ае т, как работают фильтр ы подс ветк и. Катал ог ftp://invisible-island.net/vile/utilities сод ержит фильтры для рас краски файлов make, input, perl, HTML и troff, созд анные и присланные пользов ат елям и. Там же есть макросы, кот ор ые раск рашив аю т строк и файлов RCS по их возрасту!Интересные особенности vile содержит ряд инт ер есных особ еннос тей по теме этого разд ел а: Мод ель редакт ир ов ан ия vile Мод ель ред акт ирования vile сильно отличае тся от модел и vi. Взяв за основ у конц епции Emacs, она обеспечивает изм ен ен ие прив язок кла виш и бол ее дин амичную командн ую строк у. Основн ые режим ы vile поддержив ае т «режимы» ред актирования. Это групп ы уст анов ок опц ий, обл егчающ ие ред актиров ан ие файл ов определенног о тип а. Проц едурный язык Процед урный язык ред актор а позвол яе т определ ять функц ии и мак рос ы, делающ ие прог рамму более гибкой и прог рамм ируемой.
Интересные особенности 411 Разн ообр азные неб ольшие функции Нес кольк о небольш их функций для обл егчения пов сед невного ре дактирования.Модель редактирования vile В vi и его модификациях функц ии редакт ир ован ия «зашит ы» в про грамм у, а асс оц иации между символам и ком анд и их действ иями за фиксиров аны в коде. Нап ример, клавиш а x удал яет символ ы, а клав и ша i зап ускает реж им вставки. Не обр ащ ая сь к гол ов окруж ительн ым фок усам, вы не сможете пом ен ять функц иональность этих двух кла виш (если воо бщ е сможет е). Мод ель ред актиров ания vile, получ енная из Emacs чер ез MicroEMACS, совсем другая. В ред акт оре есть опр еделенные имен ов анн ые функции, каждая из кот ор ых вып олн яе т отд ельную зад ачу ред акт ирования, на прим ер delete-next-character или delete-previous-character. Многие из этих функций прив язан ы к соч етания м клавиш, нап рим ер delete-next- character прив яз ан а к клавиш е x.1 vile имеет различные разнов идн ос ти прив яз ок клав иш для ком андн ог о реж има, режима вставки и реж им а выделения. Здесь мы описыв ае м прив язки для нормального реж им а ред актир ован ия. Сменить прив яз ку очень прос то: нужн о выз вать ком анд у :bind-key, а в качес тве арг у мент ов задать ей имя функции и соч етан ие клавиш, к котор ому она бу дет привязана. Как уже упомин алось ран ее, в файл .vilerc можно по местить след ующ ие команд ы: bind-key incremental-search / bind-key reverse-incremental-search ? Они мен яют ком анды пои ска / и ? так, чтобы те прои зв од или инк ре ментный пои ск. Помимо пред оп ред еленных функций vile содержит прос той язык про граммир ов ан ия, позволяющ ий писать процедур ы. Учит ывая это, вы смож ете прив язать команд у, выз ывающую процед уру, к опред еленно му сочет анию клавиш. В качеств е свое го языка GNU Emacs исп ользуе т чрезвычайн о мощн ый вар иант Lisp. В vile есть бол ее прос той язык с меньшим охватом. Как и в Emacs, командн ая строка vi имее т большие интеракт ивные воз можн ос ти. Мног ие ком анды в кач ес тв е арг ум ента отображаю т значе ние по умолчан ию. Вы мож ете либ о отредактир ов ать его подходящ им обр аз ом, либо принять, нажав на ENTER. При вводе команд ред акт иро вания в реж им е vi, так их как команд ы измен ен ия или удаления симв о лов, вы увидит е отклик от этой опер ац ии в строке состоян ия.1 В vile 9.6 имее тс я 421 функц ия (включ ая доступн ые только для конф игу раций X11 или Win32), а предопредел енн ых привязок клав иш – окол о 260.
412 Глава 18. vile: vi Like Emacs (vi как Emacs) «Люб опытн ый» реж им ex, о котор ом Пол (Paul) говор ил раньш е, лучше всег о отражен в дейс твии ком анд ы :s (substitute). Она выд ает нов ое приг лаш ение в трех случая х: для ввода шаблон а пои ска и текста зам е ны, а также во флагах команд ы. В качестве примера предп ол ожим, что вам захот ел ось помен ять в фай ле все вхожд ения perl на awk. В других ред акторах вы бы нап исал и про сто :1,$s/perl/awk/gENTER и именно это увидели бы в командн ой строк е. След ующ ие пример ы показыв ают сод ержим ое командной строк и с двое точие м vile по мере ввода вышеу каз анн ой команды: Клавиш и Рез ультат :1,$s Первая часть команд ы зам ен ы. / substitute pattern: vile запраш ив ает шабл он для пои ска. Сюд а подставл яетс я люб ой ран ее ввод ивш ийс я шаблон для пов торного использования. perl/ replacement string: На следующем разделит еле / прог рамм а попрос ит ввести текст за мены. Буд ет предлагаться любой ран ее использов авшийся текст. awk/ (g)lobally, ([1-9])th occurrence on line, (c)onfirm, and/or (p)rint result: У пос леднег о разделит ел я ред акт ор подс казыв ае т необяз ат ельн ые флаг и. Введ ит е любой нужн ый вам и нажмит е ENTER. vile придерж ив ается этого стиля во всех подходящ их команд ах ex. На пример, команд а чтен ия (:r) предлаг ает имя последн ег о счит анн ог о файла. Чтоб ы считать его снов а, нажмит е ENTER. Нак он ец, анализ ат ор ком анд ex в vile слабее, чем в других ред актор ах. Например, вы не смож ете использ овать шаблоны поиск а для задания диап азона строк (:/now/,/forever/s/perl/awk/g), а команда перемещения (m) не реал из ована. Тем не менее на практик е отс утствие этих функц ий не явл яе тс я прег радой.Основные режимы Основн ой реж им (major mode)1 – это сов ок упн ость установ ок опций, ко тор ые прим ен яю тся при ред акт ир овании файлов опр еделенн ого типа. Эти опции, нап ример ширин а табуляции, прим ен яю тс я отдельно к каж дому буфер у. vile предоставл яе т опции трех тип ов: • Универсальн ые (Universal), действ уют во всей программ е. • Буф ерн ые (Buffer), прим еняю тся к содерж им ому буфер а памяти. 1 В док умент ации vile это слов о пиш ется слитн о.
Интересные особенности 413• Оконн ые (Window), прим ен яю тс я к окн ам (в нашей термин ол огии это пан ел и).Уст ан овк и опций для буфера (buffer) и для окна (window) могут быть локальным и и глобальн ым и. Люб ой буф ер (или окно, в зав ис имости от опции) мож ет иметь собс твенн ое прив атн ое (лок альное) знач ение опции.Если таков ог о нет, исп ольз уе тся глоб альное. Осн овные реж им ы ввод ятновый уровень межд у лок альным и и глобальным и пер ем енным и буфера, пред оставл яя значен ия опц ий, кот ор ые исп ольз уютс я буф ер ом приотс утс твии у нег о их прив атных значен ий.vile имее т два встрое нн ых основн ых реж им а: cmode для правки программ на C и C++ и реж им vile mode для скриптов редактора, которыезагруж ен ы в буф ер ы пам ят и. В реж им е cmode можно исп ользов ать % длясоотв етс тв ия ком анд ам предпроцесс ора C (#if, #else и #endif). Прог рамма выполн ит авт ом атическую расстан овк у отс тупов при вводе фиг урных скобок ({ и }) и осмысленное форматиров ан ие комм ент ариев C. Значен ия опц ий tabstop и shiftwidth такж е устанавл ив аю тся для каждог оосновн ог о режим а в отд ельнос ти.С пом ощью осн овн ых реж имов можно исп ольз овать эти функции в программах, нап ис анн ых на друг их языках. Следующ ий пример, любезнопредоставл енный Том асом Дик и (Thomas Dickey), опр ед еляе т новый основн ой реж им shmode для редактиров ания скриптов обол очк и Bourne.(Для друг их оболоч ек стил я Bourne, так их как ksh, bash или zsh, он тоже подх од ит.)define-mode shset shsuf \"\.sh$\"set shpre \"^#!\\s*\/.*sh\\>$\"define-submode sh comment-prefix \"^\\s*/[:#]\"define-submode sh comments \"^\\s*/\\?[:#]\\s+/\\?\\s*$\"define-submode sh fence-if \"^\\s*\\<if\\>\"define-submode sh fence-elif \"^\\s*\\<elif\\>\"define-submode sh fence-else \"^\\s*\\<else\\>\"define-submode sh fence-fi \"^\\s*\\<fi\\>\"Перем енная shsuf (от shell suffix) опис ывае т приставку к имени файл а,указ ыв ающ ую, что файл явл яе тся скрипт ом оболочки. Перем енн ая shpre(от shell preamble) описыв ает перв ую строк у файла, указ ывающ ую, чтов файл е содерж ится скрипт оболочки. Затем ком анда define-submode добавл яе т опц ии, прим ен яем ые тольк о к тем буф ер ам, в кот орых былуст ан овл ен соо тветс твующий осн овной режим. В этом примере устанавливается интеллект уальн ое форматир ов ан ие комм ент ар ие в и интелл ект уа льн ое пов едение команды % для скриптов оболочки.Вышеп ривед енный прим ер подр обн ее, чем нужно. При использ ован ии~with язык скрипт ов vile распознае т бол ее сокращенную запись:define-mode sh~with define-submode sh suf \"\.sh$\"
414 Глава 18. vile: vi Like Emacs (vi как Emacs) pre \"^#!\\s*\/.*sh\\>$\" comment-prefix \"^\\s*/[:#]\" comments \"^\\s*/\\?[:#]\\s+/\\?\\s*$\" fence-if \"^\\s*\\<if\\>\" fence-elif \"^\\s*\\<elif\\>\" fence-else \"^\\s*\\<else\\>\" fence-fi \"^\\s*\\<fi\\>\" ~endwith В скриптах иниц иал изации vile сод ерж атся бол ее 90 пред опред елен ных осн овн ых реж имов. Чтоб ы увид еть опр ед ел ен ия дост упных основ- ных режимов, воспольз уйтесь ком анд ой :showmajormodes. Критер ии suffix и prefix использую тс я vile для задания осн овн ого ре жим а, кот орый нужно применить при счит ыван ии файла в буф ер.1 В табл. 18.9 перечисл ены все эти критер ии. Таблица 18.9. Критерии для осн овн ых реж им ов Критерий Описание after Зас тавл яе т вып олнять проверку опред еленн ого основн ого режим а после данн ог о. Как прав ил о, осн овные реж им ы провер яю тся в том порядк е, в каком они опр ед ел ены. before Зас тавл яе т выполн ять пров ерку опр ед ел енног о основн ого реж им а перед данным. Как правил о, основн ые режим ы провер яются в том пор ядке, в каком они опр ед ел ен ы. mode-filename (mf) Рег ул ярное выраж ен ие, опр едел яющее имена файл ов, для кот ор ых будет уст ановл ен соо тв етс твующий осн овной ре жим. Это выражение прим еняе тс я тольк о к той части пол ног о имени файла, из кот орой удалено имя катал ога. mode-pathname (mp) Рег ул ярное выр аж ен ие, опр ед ел яющ ее пути файл ов, для ко тор ых будет установлен соответств ующий осн овной режим. preamble (pre) Регул ярное выраж ен ие, определяющ ее первую строку фай лов, для кот ор ых буд ет уст ановл ен соо тв етс твующ ий основ ной режим. qualifiers Указ ыв ает, как соч ет ать крит ер ии preamble и suffixes. Ис пользуйте аll, чтобы исп ользов ать оба, и any, чтоб ы вос польз оваться люб ым из них. suffixes (suf) Рег улярн ое выражен ие, определяющее расшир ения в име нах файл ов, для кот ор ых будет установлен соо тв етствую щий основной реж им. Это выраж ен ие прим еняе тс я тольк о к той част и имени файл а, котор ая идет пос ле первой точк и. Опред еленный основной реж им можно всег да зад ать сам ому, наприм ер: :setl cmode 1 Эти крит ерии являютс я опциям и четвертой кат ег ории, считая унив ерсаль ные, буф ерные и оконные. Они не перечислен ы с друг им и в табл. B.5, по скольк у зад аются совершенн о друг им пут ем.
Интересные особенности 415 укажет программе установ ить «c» mode1, но это дейс тв ие не обн ов ит под светк у синт аксис а. Чтобы сдел ать и то, и другое, исп ользуйт е макр ос: :set-h cmode (set-highlighting; см. табл. 18.8).Процедурный язык Проц едурный язык vile практич ес ки не отлич ается от того, кот орый был в MicroEMACS. Комм ентарии начин аются в точки с запятой или двойной кавычк и, имен а пер еменн ых окр уж ен ия (опции редактора) – с $, а польз овательс кие переменные – с %. Для проверк и усл овий суще ствует несколько встрое нн ых функций, имена кот орых начинаются с &. Ком анд ы управл ения выполн ением и нек отор ые друг ие начинаю тс я с ~. Знак @, использованный вмес те со строк ой, запраш ив ае т польз ователь ский ввод и возвращ ае т набранное. Мы взял и из файла macros.doc сле дующ ий довольн о странн ый пример, чтобы вы почувств ов ал и «вкус» этог о языка: ~if &sequal %curplace \"timespace vortex\" insert-string \"First, rematerialize\n\" ~endif ~if &sequal %planet \"earth\" ;If we have landed on earth... ~if &sequal %time \"late 20th century\" ;and we are then write-message \"Contact U.N.I.T.\" ~else insert-string \"Investigate the situation....\n\" insert-string \"(SAY 'stay here Sara')\n\" ~endif ~elseif &sequal %planet \"luna\" ;If we have landed on our neighbor... write-message \"Keep the door closed\" ~else setv %conditions @\"Atmosphere conditions outside? \" ~if &sequal %conditions \"safe\" insert-string &cat \"Go outside......\" \"\n\" insert-string \"lock the door\n\" ~else insert-string \"Dematerialize..try somewhen else\" newline ~endif ~endif Подобные проц ед уры можно хран ить в нумер ов анн ых макр ос ах либо прис ваивать им имен а, чтоб ы к ним можн о был о прив язать клав иш и. Показ анный прим ер особ енн о полезен при использов ан ии порта vile на Tardis. ☺1 Команд а setl устан авливает лок альн ые свойства буф ер а, а команда :set cmode – осн овн ой реж им по умолч ан ию, если vile не смог распоз нать файл.
416 Глава 18. vile: vi Like Emacs (vi как Emacs) Более реалистичн ый прим ер от Пола Фокс а (Paul Fox) зап уск ае т grep, ищущий слов о под курсором во всех файлах C. Зат ем он помещает ре зультат ы пои ска в буф ер, наз ванн ый по данн ому слову, и выполняе т та кие устан овки, чтобы встроенн ый поиск ошиб ок (^X ^X) исп ольз овал этот вывод в качеств е списка строк, на кот орые нужно пер ейт и. В конц е этот макрос прив язываетс я к ^A g. Команд а ~force разрешае т авар ийн ое зав ершен ие команды без выв од а сообщ ен ия об ошибке: 14 store-macro set-variable %grepfor $identifier edit-file &cat \"!egrep -n \" &cat %grepfor \" *.[ch]\" ~force rename-buffer %grepfor error-buffer $cbufname ~endm bind-key execute-macro-14 ^A-g Пользовательские процедур ы могут иметь параметры, почти аналогич ные оболочк е Bourne, но пар аметр ы мог ут быть ограничены конк ретны ми тип ам и данных. Это позволяет проц ед ур ам раб от ать так, как ожид а ется в модел и редактир ов ания vile (и в мех анизме ист ор ии ком анд). Проц едур ы не явл яютс я полнос тью взаим озамен яем ыми со встроенн ы ми команд ам и, так как пок а нет мех ан изма, кот ор ый позволял бы ко манд е отм ены расс матр ив ать весь макр ос как един ую операц ию. Нак он ец, переменным read-hook и write-hook можн о прис воить имен а проц ед ур, кот орые буд ут вып олняться после чтен ия файл а и перед его зап исью соо тв етственно. Это позволяет проделывать примерно то же, что делаю т пред- и постобр аб отк а файлов в elvis и авт окоманды в Vim. Этот язык довольно мощный. В него включен ы операции сравнен ия и контрол я за вып олн ен ием, а такж е перем енные, дающие доступ к зна чит ельной части внутренн его состояния vile. Файл macros.doc в доку ментац ии редактор а привод ит дет альн ое описан ие языка.Разнообразные небольшие функции Несколько других небольш их функций, о кот орых стоит упомян уть: Перен ап равлен ие в vile Если вы постав ит е vile последн ей ком андой в цепи канал ов, он соз даст буф ер с именем [Standard Input], что позволит его отредакт ир о вать. Возм ожн о, это «идеальн ый вар иант прог рамм ы просмотр а». Редактирование файлов Windows Опц ия dos, будуч и уст ан овленной в true, приведет к том у, что vile буд ет убирать возв рат кар етк и из конц а строки при чтении кажд ого файла, а при записи поставит его снов а. Это поз волит облегчить ре дактир ование файлов Windows в сист ем ах UNIX или GNU/Linux. Пер еформ атир ован ие текс та Команда ^A f пер еформ ат ируе т текст, прои зводя в выд еленном фраг мент е перен осы слов с одн ой строк и на другую. Она пон им ае т ком
Исходный код и поддерживаемые операционные системы 417 мент арии C и оболочк и (строки, начин ающиеся на * или #) и цитаты в элект ронн ой почт е (начин аются с >). Пох ожа на команду UNIX fmt, но работ ае т быстрее. Формат иров ан ие инф орм ационн ой строки Перем енн ая modeline-format – это строка, управл яющ ая тем, как vile формат ир ует строку сос тоян ия. Эта строка находится вниз у кажд о го окн а и опис ывает состоян ие буфер а, например его имя, тек ущ ий осн овн ой режим, изм ен ен ли буфер, являе тс я ли тек ущим ком анд ный режим или реж им вставк и и проч ее.1 Строка состои т из пос ледовательностей, использ ующих проц ент ы в стиле printf(3). Нап рим ер, %b обозначае т имя буфер а, %m – основной реж им, а %l – ном ер строк и, есл и был а уст ановлен а опция ruler. Сим волы в строк е, не являющ иес я час тью форм ат ирования, пон им аю т ся буквальн о. В vile есть мног о других возможн ос тей. Совпад ение «ощущ ений паль цев» с vi позвол яет легко пер ейти на vile из друг ог о редакт ор а. Про грамм ируем ость дает больш ую гибк ость, а интер акт ивная прир ода и разумн ые уст ановки по умолчанию делают его бол ее друж еств енным для новичк ов, чем обычн ый vi.Исходный код и поддерживаемыеоперационные системы Офиц иальн ый веб-сайт vile – http://invisible-island.net/vile/vile.html. По ftp прог рамму можн о найти на ftp://invisible-island.net/vile/vile.tar.gz. Файл vile.tar.gz всегда явл яетс я симв олич еской ссылкой на тек ущую версию. Ред акт ор нап исан на ANSI C. Его можно соб рать и запуст ить под UNIX, OpenVMS, MS-DOS, конс ольн ой и GUI-версиям и Win32, BeOS, QNX и OS/2. Комп иляц ия vile идет обычным образом. Заг руз ите дистриб ут ив по ftp или с веб-страниц ы, распак уйт е его, зап устит е программу configure и вызовите make: $ gzip -d < vile.tar.gz | tar -xvpf - ... $ cd vile-*; ./configure ... $ make ...1 Док ум ентация vile ссыл ается на это как на modeline. Одн ако, пос кольк у в vile такж е реализ ов ан а функц ия modeline из vi, мы называе м ее строк ой сос тоян ия, чтобы избеж ать путан ицы.
Редакторы vi, ex и Vim 449Пример :0r $HOME/data Счит ать файл в нач ал о тек ущего файл аread[address] r !commandСчит ыв ае т вывод команды обол очки command в текст пос ле строки, опред ел енной в address.Пример Помест ить в кон ец файла рез ультат пров ерк и орфограф ии :$r !spell %recoverrec [file]Восстан авлив ае т файл file из обл аст и системног о сох ран ен ия.redoredВосстанавливает пос ледн ее отмен енное изм ен ен ие. Ком анда аналог ична CTRL-R. {Vim}resizeres [[±]num]Мен яе т выс оту текущ ег о окна, устан авл ив ая ее равн ой num строк. Если указан ы + или -, высот а увеличивае тся или уменьш аетс я на numстрок. {Vim}rewindrew[!]Возв ращ аетс я к первом у файлу из списка арг умент ов и начинае т его редактир ован ие. Есл и текущ ий файл не сох ранялс я с мом ент а последн ег оизменен ия, то для возврат а к перв ом у файлу нужн о исп ольз ов ать !.right[address] ri [width]Строки, опред еленные в address (или тек ущ ая строк а, есл и address незадан), выр авн ив аютс я по прав ом у краю шир ин ы width. Если width незадан а, используетс я опц ия textwidth. {Vim}
450 Приложение A sbnext [count] sbn [count] Разд ел яет тек ущ ее окн о и нач ин ае т редакт ировать буф ер под номером count в списке буф ер ов. Если count не указан, ред акт ир уе тся следую щий буф ер из спис ка. {Vim} sbuffer [num] sb [num] Разд еляе т тек ущее окно и в нов ом окне нач ин ает редакт ир ов ать буф ер под номер ом num в спис ке буф ер ов. Ред актир уем ый буф ер можно опр е делить также по имени файла. Есл и буф ер не указ ан, в новом окне от крыв ае тся тек ущ ий буф ер. {Vim} set se parameter1 parameter2 . . . Устанавл ивае т значен ие опц ии для каждог о parameter или, если ни один parameter не указ ан, выводит все опц ии, знач ен ия которых был и изм енены. Для булевских опций кажд ый parameter можно тракт ов ать как option или nooption. Опц ия м друг их типов можно зад ать значен ия синтаксисом option=value. Чтобы вывести текущие устан овки, нео бх о дим о указать all. Форма вида set option? отображ ает знач ен ие опц ии. Таблиц ы, где перечислены списки опций, можн о найти в приложении B. Примеры :set nows wm=10 :set all shell sh Созд ае т новую обол очк у. Пос ле вых ода из нее ред актирование возоб новляетс я. snext [count] sn [[+num] filelist] Раздел яе т текущ ее окно и нач ин ае т редактиров ание файл а, след ующ е го в спис ке аргументов ком андн ой строки. Есл и указ ан count, редакти руе тся count-й след ующ ий файл в списке. Если зад ан filelist, то теку щий спис ок арг ум ентов заменяетс я на filelist, после чег о начинае тс я редакт ирование первог о файла отт уда. При нал ич ии аргумент а +num раб от а нач ин ае тс я со строк и num. Кром е тог о, num может быть шабл о ном вида /pattern. {Vim}
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: