Улучшения в редактировании 351 ка. Знач ение по умолчанию – \"tags /var/db/libc.tags /sys/kern/tags\", при котором в систем е 4.4 BSD сначал а идет пои ск в текущем катал оге, а за тем в файл ах библиот еки C и в исходн ом коде опер ацио нной сист ем ы. Опция taglength управл яет количеств ом символов, кот орое знач имо в строке тег а. Значен ие по умолчан ию, равн ое нулю, означ ает, что нуж но исп ользов ать все симв ол ы. nvi ведет себя примерн о как vi: исп ольз уе т «слово», на котор ом стои т курсор, нач ин ая с текущ ей поз иции курс ора. Если курс ор стои т на бук ве i в слове main, то nvi ищет идентиф ик ат ор in, а не main. nvi опирается на трад иц ионн ый форм ат файла tags. К сожал ен ию, этот форм ат сильно огр анич ен. В час тн ос ти, в нем нет концепц ии области видим ости языка прог рамм ир ов ания, позволяющей одном у иденти фикат ору исп ользов атьс я в разных конт екстах и зак репл ять за собой разные пон ят ия. Эта проб лема усуг убл яетс я в C++, кот ор ый доп уск ае т явн ую пер егрузку имени функц ии, то есть использов ание одного и тог о же имени для разн ых функций. nvi обход ит огр ан ичен ия, наклад ываемые файл ом tags, исп ользуя со верш енн о друг ой механ изм1 – прог рамм у cscope. Будучи когда-то про приет арн ой, сейчас cscope являетс я прог рамм ой с открытым кодом, дост упн ой в прое кт е Bell Labs World-Wide Exptools (зайд ит е на http:// www.bell-labs.com/project/wwexptools/). Она счит ыв ает исходн ые файлы C и создает базу данных, опис ыв ающую программ у. В nvi есть ком анды, осуществ л яющие зап росы и позволяющие обр абат ыв ать рез ульт ат ы. По скольку cscope дост упн а не везд е, мы не станем расс матрив ать ее здесь. Подр обн ос ти про ком анд ы nvi излож ены в его докум ентац ии. Форм ат файл а расшир енн ых тегов, кот орый генер ир уетс я прог рамм ой Exuberant ctags, не прив ел ни к каким ошибк ам в nvi 1.79; однако nvi ник ак не польз уется преимущ ес твам и этого форм ата.Бесконечная отмена Как правило, в vi команд а «точка» (.) раб от ает в кач еств е команд ы «по втор ить еще раз»: она пов торяе т последнее действ ие редакт иров ан ия, будь то удал ение, вставка или замен а. nvi возвод ит эту ком анд у в полн оц енн ую «redo», прим ен яя ее даж е в тех случаях, когда пос ледней команд ой была u (или отмен а). Так им образ ом, чтоб ы нач ать сер ию ком анд «отмен ы», прос то введит е u. Зат ем для кажд ой ввод имой точки nvi прод олжит отмен ять изм ен ения, постеп енно возв ращ ая файл к перв онач альному состоян ию. В конц е конц ов первон ачальн ое состоян ие файл а буд ет дост игн уто. По сле этого наж ат ие . прив едет к системн ом у сигналу (или миг анию экра1 Ради полноты картины замет им, что подд ержк а cscope есть и в Vim. – Прим. нау ч. ред.
352 Глава 16. nvi: новый vi на). Теп ерь можно ввод ить u, чтобы «отменить отм ен ы», а точк у исп оль зов ать для прим ен ен ия послед ующ их прав ок. Зам етим, nvi не позвол яет снабжать ком анды u и . числовыми аргумен там и.Строки произвольной длины и двоичные данные nvi мож ет ред акт иров ать файлы со строкам и прои звольной длины и с произвольн ым числ ом строк. Он автомат ич ески поддерживает двоичн ые данн ые. Для этог о не требу ется специа льных опц ий ком андн ой строк и или команды ex. Для ввода в файл любого 8-разр ядного симв ол а наберит е ^X, а зат ем одну или две шестн адцатер ичн ых цифр ы.Инкрементный поиск Инк рементн ый пои ск в nvi можно включ ить с пом ощ ью :set searchincr. При наб ор е курсор перем ещ аетс я по файл у и всег да поп ад ае т на перв ый симв ол текс та, соо тв етс тв ующ его вводу.Прокрутка влево-вправо В nvi прок рутк а влево-вправ о включае тс я чер ез :set leftright. Знач е ние sidescroll опр ед еляет кол ичество симв ол ов, на которое nvi смещае т экран при прокрутке влев о и вправо.Помощь программисту В nvi нет специа льн ых функций для помощи программ исту.Интересные функции Из всех клон ов nvi явл яе тся самым мин им ал истичн ым, так что огром ное колич ество доп олнит ельных функций не подд ерж ив ае тся. Однак о сущ еств ует нес кольк о важных особ еннос тей, про кот ор ые стоит упомя нуть: Поддержка интернац ион ал из ации Больш ую часть инф орм ационных сообщ ений и пред упреж д ен ий в nvi можн о заменить их пер ев одом на друг ие язык и, исп ольз уя функцию под названием «катал оги соо бщений» (message catalog). nvi реализ уе т эту функц ию собс тв енн ым и средствам и, исп ользуя мех ан изм, кот о рый опис ан в файл е catalog/README дистр ибут ива nvi. Каталог и соо б щений (message catalogs) поддержив аютс я для голландского, анг лийского, франц узс кого, немецк ог о, русс кого, испанс ког о и швед ского языков.
Онлайн-справка и другая документация 385В доп олн ен ие к файл у справк и vile сод ержит несколько встроенных команд, отображ ающ их информац ию о функция х и состоянии редактора. Прив едем самые полезные из них::show-commands Созд ает новое окн о, в кот ор ом пок азывае тс я полн ый список всех ко манд vile с кратким описан ием каждой из них. Инф ормац ия пом е щае тся в собс тв енный буф ер, кот ор ый можно расс матр ив ать как обычн ый буф ер. В частности, его можно запис ать в отд ельн ый файл, чтобы зат ем распечатать.:apropos Пок аз ывае т все ком анд ы, имен а кот орых содерж ат данн ую подстро ку. Это нам ного удобнее простог о пои ска информац ии по интер есую щей теме в файле справки.:describe-key Зап рашив ает у пользов ат ел я клав иш у или пос ледоват ельн ость кла виш, а зат ем показывает опис ание этой команды. Например, клав и ша x реализует функцию delete-next-character.:describe-function Запраш ив ае т у вас имя функц ии, а зат ем показ ывае т ее опис ан ие. Нап рим ер, функция delete-next-character удал яет заданн ое кол ич е ств о символ ов справа от позиции курсора.Ком анды :apropos, :describe-function и :describe-key обеспечив аю т описательн ую информацию, выдают син оним ы (для удобс тв а, т. к. функция может иметь более одн ого имен и), все ост альные клавиш и, к кот орым приписан а данн ая ком анда (многие сочет ан ия клавиш мог ут озн ачать одно и то же действие), и показ ывают, являетс я ли команда «перемещение м» или «опер атор ом». Ниж е прив еден подход ящ ий прим ервывода ком анды :describe-function next-line:\"next-line\" ^J ^N j #-Bor \"down-arrow\"or \"down-line\"or \"forward-line\"(motion: move down CNT lines )Ком анда выв ела все четыр е имен и функц ии и сочетания клав иш длянее. (Последов ат ельн ость #-B – это не зав ис ящ ее от терм ин ал а представлен ие vile для «стрелк и вверх». Их полный список можн о увидеть с помощ ью :show-key-names.)Пер еменной окр уж ения VILE_STARTUP_PATH можно прис воить пути пои ск афайла справк и, отделенные друг от друг а двоеточиями1. Пер ем енную1 Порт для Win32 в качестве разделит еля исп ольз уе т точку с зап ят ой, а порт для OpenVMS – зап ят ые.
386 Глава 18. vile: vi Like Emacs (vi как Emacs) окр уж ен ия VILE_HELP_FILE можно применять для пер ео пр ед еления име ни файла справк и (обычно это vile.hlp). Если в онл айн-справк е прим ен ить возможн ость поиска, встроенные ко манды, опис ания клавиш и авт озаверш ен ие ком анд, то польз оваться справк ой стан овится просто и удобн о.Инициализация xvile производит дополнит ельную иниц иал изац ию меню перед выпол нением ост альных этапов: 1. (Только в xvile). В качес тве имен и файла описания мен ю исп ользуе т ся знач ение переменн ой окр ужен ия XVILE_MENU, если таков ая уст а новлена. Инач е исп ольз ует .vilemenu. Этот файл зад ае т меню по умол чанию для интерфейса X111. После этог о разл ичн ые версии vile, xvile и winvile производ ят одну и ту же двухэтапную иниц иализ ацию. Первый этап исп ольз ует смесь пере менных окр уж ен ия и файлов: 2. Выполн яется файл, который был указан в ком андной строке опц ией @cmdfile, если так ов ая присутс твовала. Игн орир ую тс я остальные шаг и иниц иал из ац ии, кот ор ые прод ел ывались бы при отсутств ии этой опции. 3. Если существует пер еменн ая окруж ен ия VILEINIT, выполн яется ее знач ение. Инач е прои зв одитс я поиск файл а иниц иализац ии. 4. Есл и сущес твует пер ем енн ая окр уж ения VILE_STARTUP_FILE, она ис пользуется как имя стартового файл а. Если нет, UNIX исп ользует .vilerc, а другие системы – файл vile.rc. 5. Стартовый файл ищетс я в тек ущем кат алог е, а затем в домашнем ка талоге польз овател я. Исп ользуе тся первый найд енн ый. На втором этап е примен яю тс я след ующие команд ы иниц иализ ац ии: 6. Файл, указанн ый первым в ком андной строк е, заг руж ае тся в буфер памят и. 7. Выполн яютс я ком анд ы, которые был и зад аны в опц иях -c. По умол чанию они буд ут раб отать с первым файлом. Как и друг ие мод иф икац ии, vile поз вол яет помещ ать общ ие дейс твия по иниц иализ ац ии (то есть опц ии и команды для UNIX vi и/или друг их клонов) в ваш файл .exrc и выполн ять из .vilerc ком анд у :source .exrc до или после уст ановок, спец иф ичных для vile. 1 Меню для winvile не настраиваю тс я. Их функции можн о использ ов ать толь ко в Win32.
Многооконное редактирование 387Многооконное редактирование vile несколько отл ич ается от ост альн ых клон ов. Он нач ал свою жизнь как версия MicroEMACS и только потом превратился в редактор с «ощу щениями пальц ев» vi. Все верс ии Emacs хор ош о раб от ал и с нес кольк им и окн ам и и нес коль ким и файлам и, поэ том у vile стал перв ой программ ой типа vi, в кот о рой был о несколько окон и нес колько буф еров. Как и в программах elvis и Vim, ком анда :split1 создае т новое окно, а за тем поз воляет использовать команду ex :e filename, чтобы ред актир овать нов ый файл в новом окне. После этого нач инаются отл ичия. В час тн о сти, ком анд ы пер ем ещения межд у окн ам и для реж им а vi совсем другие. На рис. 18.1 показ ан разд ел енный экран, появляющийс я в результат е ввода ch12.xml2, а пот ом :split и :e !zcat chapter.xml.gz в vile.Рис. 18.1. Редактирован ие этой глав ы в vileКак в Vim, все окн а имеют общую нижн юю строку для выполн ения команд ex. Каждое окно содержит собственную строк у состоян ия, а строка состояния тек ущ ег о окн а заполнена знаками мин ус. Кром е тог о, при1 Это арт ефакт редактора vile, позвол яющ его сок ращ ать команды. Правиль ная ком анд а нос ит имя split-current-window.2 Вним ательн ый читат ель замет ит, что это уже не глав а 12. Главы был и пере нумеров аны при разраб отке седьм ог о изд ан ия.
388 Глава 18. vile: vi Like Emacs (vi как Emacs) акт ивном реж им е вставк и во втором столбц е строк и сос тояния появля етс я I, а есл и файл был изменен, но не сохранялся, к его имен и припи сывае тс я [modified]. Также vile похож на Emacs в плане команд и связ анн ых с ним и сочета ний клав иш. Они пок азаны в табл. 18.1. В нек от ор ых случ ая х два соче тания вып олн яю т одн у и ту же операц ию, как у команд ы delete-other- windows. Табл ица 18.1. Команды управлен ия окнам и в vile Команд а Сочет ан ие Функц ия клавиш delete-other-windows ^O, ^X 1 Удаляе т все окн а, за исключ ение м тек ущег о. delete-window ^K, ^X 0 Удал яет тек ущее окно, есл и тольк о оно не последнее. edit-file, E, e ^X e Отк рывае т данный (для ^X e – нах одящийс я под курсор ом) файл или сущ ес твующий бу фер в окн е. find-file ^X e То же, что edit-file. grow-window V Увел ич ив ае т разм ер текущег о окна на count строк. move-next-window-down ^A ^E Прокручивае т след ующее окн о вниз (или буф ер – вверх) на count строк. move-next-window-up ^A ^Y Прокруч ив ае т след ующее окн о вверх (или буфер – вниз) на count строк. move-window-left ^X ^L Прок ручив ае т окн о влев о на count столбцов или на полэкр ана, есл и count не указ ан. move-window-right ^X ^R Прокруч ивает окно вправ о на count столб цов, или на полэкрана, есл и count не указан. next-window ^X o Перех од ит на след ующее окн о. position-window z where Прокрут ить окно, пом ест ив текущ ую пози цию курсор а в where, где where принимае т одно из следующих знач ен ий: центр (., M, m), верх (ENTER, H, t) или низ (-, L, b). previous-window ^X O Пер ех од ит на предыдущее окно. resize-window Уст ан авливает размер текущ его окн а рав ным count строк. count указ ываетс я как префиксн ый арг умент. restore-window Возврат к окну, сох раненн ому с пом ощ ью save-window. save-window Пометка окн а для последующего возврата в него с помощ ью restore-window. scroll-next-window- ^A ^D Прокруч ив ае т следующее окно вниз на down count пол овинок экр ан а. count зад аетс я в вид е префиксног о арг умент а.
Графические интерфейсы 389Команд а Сочетан ие Функция клав ишscroll-next-window-up ^A ^U Прокруч ив ает след ующ ее окн о вверх на count пол овинок экран а. count задае тс я в виде префиксног о арг ум ент а.shrink-window v Уменьш ает размер тек ущего окн а на count строк. count задае тся в вид е преф иксн ог о арг ум ент а.split-current-window ^X 2 Разд еляет окн о пополам; count со значен и ем 1 или 2 опр ед ел яе т, какое из новых окон станет тек ущ им. count задается в вид е пре фиксн ого арг умента.view-file Открыв ает данный файл или сущ ес твую щий буфер в окне и помечае т его как «толь ко для чтен ия».set-window Открыв ает сущ еств ующ ий буфер в окне.historical-buffer _ Выдае т список перв ых пяти буферов. Циф ра переместит в указ анный буф ер, а символ _ – в сам ый последний ред актиров авш ийс я файл. Tab (и back-tab) прокручиваю т спи сок, что облегчае т пер емещ ение по нему при длинных имен ах буфер ов.toggle-buffer-list * Показывает/скрывает окн о, в котором пок а заны все буф ер ы vile.Графические интерфейсы Снимк и экран а и объясн ен ия для этого разд ел а был и представлены Ке вин ом Буттн ер ом (Kevin Buettner), Томас ом Дик и (Thomas Dickey) и По лом Фокс ом (Paul Fox), за что им больш ое спас ибо. Для vile сущ ес тв уют нескольк о интерфейс ов X11, каждый из котор ых примен яе т свой инструмент ар ий, основанн ый на библиотек е Xt. Есть прос тая версия «No Toolkit», где инструментар ий не исп ольз уется, од нак о в ней присутств ует своя полос а прок рутки и видж ет «доска обс уж ден ия» (bulletin board) для управлен ия геометр ией. Есть версии, ис пользующие инструментар ии Motif, Athena или OpenLook1. Наиб ол ее хорошо подд ержив аю тс я версии Motif и Athena, и в них есть поддерж ка мен ю. Сущ ествуе т GUI для Win32, имеющ ий вар иации с поддержкой OLE и Unic ode. Обе вариации выг ляд ят одинак ов о.1 Sun Microsystems прек ратила поддержку OpenLook пер ед выход ом Solaris 9 в 2002 год у.
390 Глава 18. vile: vi Like Emacs (vi как Emacs) К счастью, основной интерфейс для всех версий один аков: имеется одно окн о верхн ег о уровня, котор ое можно разбить на две или больш е пан е лей (panes). В свою очередь, пан ел и можно исп ользовать для показ а не скольких предс тавл ен ий буфера, нес кольких буф ер ов или их смес и. На языке vile они наз ываются «окн ам и», но во избеж ание путан иц ы при дальн ейшем изл ожении мы прод олж им наз ывать их «панелями».Сборка xvile Хотя для xvile имею тс я двоичн ые пак ет ы, вы может е зах от еть скомп и лир овать его на платф орм е без поддержки пакет ов. При сборк е xvile необх одимо реш ить, какой из инстр умент ар иев вы бу дет е использ овать. Это можно сделать при настройк е vile с помощ ью ком анд ы configure1. Выб ир айте из следующих опц ий: --with-screen=value Опр еделяе т драйв ер термин ал а. По умолч анию это tcap для драйве ра termcap/terminfo. Среди других значен ий есть curses, ncurses, ncur sesw, X11, OpenLook, Motif, Athena, Xaw, Xaw3d, neXtaw и ansi. --with-x Исп ользов ать X Window System. Для верс ии «No Toolkit». --with-Xaw-scrollbars Использовать пол осы прок рутк и Xaw вмес то собственных пол ос про крутк и vile. --with-drag-extension Использовать расшир ение перет аск ив ания/прокрутки с Xaw.Базовый внешний вид и функциональность xvile На следующих рисунках предс тавл ен интерфейс Motif у xvile. Он по хож на инт ерф ейс Athena. На рис. 18.2 показ ан ы три пан ел и: 1. man-стран иц а vile, где демонс тр ир уе тс я исп ользов ание подчеркив а ния и полуж ирн ог о нач ерт ан ия. 2. Буфер misc.c из tin, где есть подсветка синтаксис а (на этот раз с раз личными цвет ам и для директ ив препроцесс ора, операт ор ов, коммен тар иев и ключ евых слов, хотя в книге видн ы тольк о град ации сер ого). 3. Акт ивная трехстрочн ая пан ель [Completions] (строка сос тоян ия у нее темнее) для завершения имен файлов. Она коорд ин ир уетс я с мин и буфер ом (ком андной строк ой с двоет оч ием): в перв ой строк е написа 1 Скрипт configure раб отае т на любой платформе UNIX или сходн ой с ней. Для сборк и в OpenVMS использ уйт е скрипт vmsbuild.com. Инс трукц ии по сборке распол аг аю тся в самом начале скрипта.
Графические интерфейсы 391но Completions prefixed by /usr/build/in/tin-1.9.2+/src/m:, а в мини-бу-фере – Find file: m. Ост альная часть мин и-б уф ера содерж ит имен афайлов, удовл етвор яющ их запрос у. Перв ая строка [Completions] и содержимое меняютс я по мер е завершения пользоват елем имени файла (и нажатия TAB, что укаж ет vile показ ать уменьш енн ый наб орвариа нтов).Рис. 18.2. Графич еское окно xvileНа рис. 18.3 тоже есть три пан ел и:1. Пан ель [Help], в кот орой пок аз ана, разумее тс я, сам ая важная функ ция ред акт ора (как выйт и из него, не сохран яя изм енений). ☺2. [Buffer List], пок аз ыв ающ ая, что пред ыдущим (#) буфером являе тся charset.c. Буфер а % (тек ущег о) в списке нет, пос кольк у в этой коп ии [Buffer List] отображаю тся тольк о «видимые» буф еры. Есл и команд е * зад ать арг ум ент, то она пок ажет и невид имые. Буфер ы 0 и 2 – это charset.c и misc.c. Они загружены, а в [Buffer List] показ ан ы их разм е ры (12425 и 89340). В буфер е 1 (<vile.1>) сод ержитс я форм ат ир ованн ая страница рук овод ства (manpage), сген ерир ованн ая макрос ом. Этом у
392 Глава 18. vile: vi Like Emacs (vi как Emacs) буф ер у не соотв етс твует ник ак ой файл1. Буф ер 3 (color.c) не загру жен, то есть в первом столбц е для нег о стоит u, а его размер – ноль. 3. Буф ер [Completions] явл яетс я акт ивн ым. На этот раз в нем пок аз ано заверш ен ие по тегам для част ичног о соо тветс твия co, а сообщение Completions prefixed не показано, пос кольку буф ер прок ручен пон и же, что явл яе тс я поб очным действ ие м наж ат ия TAB: vile делае т циклич ес кую прокрутку, так что приводятся все вар иа нт ы, даж е ес ли окно маленьк ое2. Рис. 18.3. Буферы и заверш ен ие в vile Сген ериров анн ые буферы, так ие как [Help] и [Buffer List], служ ат «рабо чим и» (scratch) буф ерами. Есл и их сверн уть, то они зак рыв аю тс я, а их 1 Углов ые скобки вокруг имен и <vile.1> использ уютс я по сог лаш ению, чтоб ы изб ежать конф ликта имен, пос кольку иметь два буфера с одним и тем же имен ем запрещ ено. 2 Размер буф ер а [Completions] уст анавл ив ается автом атичес ки. Никог да не по каз ыв аетс я больш е нужного количества строк. Если буф ер слишком вел ик, vile «берет в долг» до : места у соседней панели.
Графические интерфейсы 393сод ерж имое проп адае т. Есть и друг ие «нев идимые» буф еры, наприм ербуферы, сод ерж ащ ие скрипт ы. Как прав ило, ни те, ни другие не отображ аютс я в [Buffer List].Полосы прокруткиСправ а от кажд ой панел и нах од ится пол оса прокрутк и, кот орую можн оисп ольз ов ать для перем ещения по буф ер у стандартн ым спос обом. Заметим, что этот станд артн ый спос об различаетс я в разных инструм ент ар иях. В версия х Athena и «No Toolkit» средн яя кнопка мыш и мож ет использ оватьс я для перетаскив ан ия «бег унка» или вид им ого индик ат ор а,а лев ая и прав ая перем ещ ают вниз и вверх (соо тв етс тв енно) по буферу.Количество перемещ аем ого контент а зав ис ит от положения курсора мыши на полос е прокрутки. Если пом ест ить его окол о верха, перем ещ ен иебудет прои сход ить построчн о, а есл и около низ а – по целым пан елям.Возможн о, пол ос а прокрутки Motif более привычна. Для всех операц ийиспольз уе тся левая кнопк а мыш и. Щелчок по маленьким стрел очк амсместит вас вверх или вниз на одн у строк у. Для быстр ого перем ещ ен ияможн о пер етаскив ать инд ик атор пол осы прокрутк и, а если щелкн утьповыш е или пониж е индикат ора, то произойдет перемещен ие вверхили вниз на всю панель.Во всех версия х имее тся неб ольш ая «рукоятка» выше или ниж е полоспрок рутк и (нах одитс я между ним и), которую можно исп ользовать дляподстройки двух соседн их пан ел ей. В верс ии xvile «No Toolkit» эта рукоя тка вписывается в строку сос тоян ия двух смежн ых панел ей. В других верс иях она бол ее разл ичим а, но во всех случ ая х курсор мыш и приего постановке над рукоятк ой смены размера меняетс я на большую вертик альн ую двойную стрелку. Размер окон можн о помен ять перет аск иван ие м рукоя тки мыш ью.Пан ель можно разб ить на две част и, если при нажатой клавиш е Ctrlщелкнуть левой кнопкой мыш и на полос е прок рутки. Вы пол учит е двапредс тавлен ия одн ого буф ер а. Есл и хотит е смен ить одно из предс тавлений на другой буфер, исп ользуйт е другие команд ы vile. Пан ели можноудал ить, есл и удержив ать клав иш у Ctrl и наж ать на среднюю кнопк умыши. Если созд ан о мног о пан ел ей, можно сдел ать так, чтоб ы все окн озаним ал а одн а пан ель. Для этого нажмите Ctrl и щелкните прав ой кнопкой мыш и. Все другие панел и удал ятся, оставив окно xvile с панелью,по котор ой вы щелкнул и. Обзор дейс тв ий представлен в табл. 18.2.Табл иц а 18.2. Ком анды vile для управл ен ия панел ям иКоманд а ФункцияCtrl-левая кнопк а На полос е прок рутк и, разделяет панель.Ctrl-средняя кнопк аCtrl-прав ая кнопк а Удал яе т панель. Оставляет на экране только ту пан ель, по котор ой щелкнул и.
394 Глава 18. vile: vi Like Emacs (vi как Emacs) Установка положения курсора и движения мыши Внутр и текстовой обл аст и пан ел и курс ор можн о уст ан ов ить прос тым щелчк ом лев ой кнопки мыш и. Это действ ие зад аст не тольк о полож ение курсора, но и пан ель, в кот орой будет прои сх одить редакт иров ан ие. Чтобы поменять ее, но сохранить ее старое пол ож ен ие, щелкните по строк е состоян ия под тем текс том, кот орый вы хотите исправ ить. Щелчок мышью расс матрив ае тс я как перемещ ение, аналогично, на прим ер, команде 4j. Чтобы удал ить пять строк, можн о ввес ти d4j, уда лив тек ущую строк у и чет ыре под ней. То же самое делаетс я и с пом о щью мыш и. Пом ест ит е курс ор в мес то начала удален ия и нажмите d, пос ле чего щелкните по буферу в том месте, до кот ор ого вы хотите уда лить. Щелчки мыш ью являются пер емещ ен ием курсора, так что они могут использоватьс я и в друг их опер ац ия х. Выделения Чтоб ы задать выдел ение, перетащите мышь с нажатой левой кнопк ой. Это наз ывае тс я PRIMARY (первичным) выд елением. Есл и отпуст ить кнопк у мыши, то выд еление коп ир уе тся и стан ов итс я доступн ым для вставк и. Можно потреб овать, чтобы выделенная область был а прям о угольной, есл и удержив ать клавиш у Ctrl при перет аск ив ан ии с наж а той лев ой кнопк ой мыши. Есл и пер ет аскив ан ие выход ит за пределы окн а, текст будет по возможнос ти прок руч ив аться в нужн ом нап равл е нии, чтобы под огнать выдел ен ия, прев ыш ающие разм ер окна. Ско рость, при которой идет прок рутка, будет возр аст ать со врем енем, что позволяе т делать быс трое выделение больш их куск ов текс та. Отдельн ые слова или строк и можно выд ел ять двойн ым или тройн ым щелчком по ним. С помощью правой кнопк и мыш и выдел ен ие может быть расш ирено. Как и в случ ае с лев ой кнопк ой, его можно подс трои ть или прокрутить, удерживая прав ую кнопк у при перетаск ив ан ии. Выделения можн о рас шир ять и в друг их окнах, есл и в них открыт тот же буфер, что и в окн е, в котор ом было сдел ан о выделение. То есть если у вас есть два предс тав лен ия буфер а (на двух разных пан елях), прич ем в одн ом окне пок аз ано нач ал о буфера, а в другом – его конец, можно выд елить весь буф ер, ес ли нажать лев ую кнопку в начал е панел и с нач алом буфера и правую – в панел и с его конц ом. Такж е выд еления можно дел ать прямоугольны ми, сочет ая клавиш у Ctrl с прав ой кнопк ой мыши. Средняя кнопк а мыш и используется для вставки выдел ения. По умол чанию она вставл яет текст в пос ледн юю позицию курсор а. Есл и при ее наж атии удерживать клав иш у Shift, то вставка произойдет на месте курсор а. Выдел ен ие можно очис тить (есл и оно сделано в ред акт ор е xvile), дваж ды щелкнув по строк е сос тояния.
Графические интерфейсы 395Системный буфер (Clipboard)Можно прои зв од ить обмен данн ыми с другими приложениями X черезPRIMARY-выдел ение. Выш е было описан о, как зад ать выделениеи управл ять им.Другие прилож ения использ ую т выделен ие CLIPBOARD для обм ен аданн ым и между соб ой. На многих клав иат урах Sun выд ел енный текстпоп адает в системн ый буф ер при наж атии клав иш и COPY, а вставл яе тся оттуд а при нажат ии на PASTE. Если у вас не получ ается вставитьтекст из xvile в друг ие прог рамм ы (или нао борот), то это, скорее всег о,из-за исп ользован ия этим и программами выдел ен ия CLIPBOARD вместо PRIMARY. (Другой мех ан изм, кот ор ый используе тся очень старыми прилож ен иями, включает использов ан ие кольца буф ер ов.)В xvile есть две ком анд ы для управл ения системным буф ером: copy-to-clipboard и paste-from-clipboard. При выз ов е copy-to-clipboard сод ерж имое тек ущего выд еления коп ир уется в спец иа льный рег истр (clipboardkill register), который обоз нач ается как ; в списке рег ис тров. Ког даприлож ен ие запраш ив ает выд ел ен ие из системног о буфер а, xvile выдает сод ержим ое этого регис тр а. Команда paste-from-clipboard запраш ивае т данн ые сист емн ого буф ера у текущего влад ельц а выделен ияCLIPBOARD.Возм ожно, пользоват елям систем Sun зах оч етс я опр ед ел ить след ующиесоч ет ан ия клав иш в файле .vilerc, чтоб ы можно было исп ольз ов атькнопк и COPY и PASTE: bind-key copy-to-clipboard #-^ bind-key paste-from-clipboard #-*В этой главе мы еще верн емс я к прив язк ам клав иш.Ресурсыxvile сод ерж ит множес тв о рес урсов, посредс твом кот ор ых можн о управлять внешн им вид ом и поведение м программы. Особ енно важен выб оршрифт а, так как он определяе т правильность отображения курсивныхи нак лонн ых шрифт ов. Док ум ент ация vile содержит полн ый спис окрес урсов, а такж е образ ец запис ей в .Xdefault.Добавление менюВ версиях Motif и Athena имеется поддержка меню. Задаваемые пользов ат елем пункт ы мен ю считываю тся из файла .vilemenu тек ущ его илидомашнего кат алог а. xvile доп ускае т пункты мен ю трех тип ов:• Встрое нн ые, то есть специфичные для сист емы меню, такие как по вторн ое счит ыван ие файла .vilerc или создание нов ой коп ии xvile.• Неп осредс тв енный выз ов встрое нн ых ком анд (нап рим ер, показать [Buffer List]).
396 Глава 18. vile: vi Like Emacs (vi как Emacs) • Вызов произвольн ых командных последов ат ельн остей (нап ример, запуск интер активног о макроса, так ог о как ком анд а поиска). Мы считаем два пос ледних пункта различн ым и, так как автор ы пред поч ли, чтобы vile мог провер ять прав ильн ость ком анд пер ед их вып ол нен ием.Сборка winvile Для каждог о релиза winvile доступны бинарн ые файлы, но вам может зах от етьс я скомпил иров ать редактор из промеж ут очн ых пропатчен ных верс ий (interim patch versions). В исх одник ах есть Make-файлы для комп ил ят оров Microsoft (makefile.wnt) и Borland (makefile.tbc). В пер вом есть больш е возможнос тей, например сборка прог рамм ы с под держкой OLE, perl и встрое нн ой подсветк ой синтакс иса. GUI для Win32 можн о собрать люб ым комп илятором.Базовый внешний вид и функциональность winvile На рис . 18.4 и 18.5 показ ан графичес кий интерф ейс Win32 для winvile. На перв ый взгляд он очень пох ож на инт ерф ейс «No Toolkit» в X11 с по лос ами прокрутк и. Есл и копн уть поглубже – а это несложно – он ока зываетс я более замыслов атым, чем инт ерфейс Motif. Рис. 18.4. winvile с не-Unicode шрифтом
Графические интерфейсы 397Рис. 18.5. winvile со шрифтом UnicodeНа рис. 18.4 показ ан вид winvile при редактир овании данных Unicode:• Диалог выб ора шрифт ов изнач альн о уст ан овл ен на мон ошир инный системный шрифт. Как и в xvile, этот шрифт можно задав ать при старт е winvile или с помощ ью скрипт а. Такж е его можно уст ановить пос редством OLE-сервер а. Након ец, как пок азано на рисунк е, его можн о задать обычными средс тв ам и Win32.• Данн ые имею т формат Unicode UTF-16, без отметки о порядк е бай тов. Они подч еркн ут ы, так как палитр а подсветки исп ольз уе т под черкив ан ие и голуб ой (cyan) цвет для раскраски строк в кав ычк ах.• Системный шрифт, стоящий по умолчан ию, не может отобраз ить симв олы в файле. winvile вид ит, что шрифт мал, и отоб ражает дан ные Unicode в шестн адцат ер ичном виде.На рис. 18.5 показан рез ультат выбора более подходящего шрифт а. Есл иснов а выбрать системный шрифт, программ а снова покаж ет шестн адц атер ичные значен ия. Есл и необх одим о постоя нн о видеть симв ол ы в шестн ад цат еричн ом вид е, в vile есть соо тв етств ующая опц ия.На рис. 18.6 пок азаны нес колько функц ий мен ю winvile, среди которых:• winvile расшир яет системн ое меню. Его можно увид еть, щелкн ув пра вой кнопк ой мыши по заг оловк у окна. В появивш емся мен ю есть те же пункты, то есть не нужн о кажд ый раз перемещаться наверх. Это повед ение включается с помощ ью пункт а Menu вниз у мен ю.
398 Глава 18. vile: vi Like Emacs (vi как Emacs) • Мен ю обесп еч ив аю т опер ац ии открыт ия, сохранения, печат и и рабо ты со шрифт ом, тип ичн ые для граф ич ес ких прилож ений. В пункт е CD можн о задать текущий раб очий каталог winvile. Соотв етс твующие диал оги также дост упн ы в конс ольн ой версии для Win32, но без меню. • winvile также позвол яе т заходить в папку Windows Favorites (Из бранное). • Недавн ие файлы (и недавн ие папк и) выб ираю тся из нес кольких (ко лич ес тво задае тс я пользоват елем) нед авно исп ользов авшихс я фай лов (или пап ок). Программ а сох ран яет эти имен а в реес тре, что дел а ет их доступн ым и из всех запущ енн ых экз емпляр ов winvile. Рис. 18.6. Меню пос ледн их файл ов в winvileРасширенные регулярные выражения Мы уже познакомились с расшир енн ыми регулярными выр аж ениям и в разд ел е «Расширенные рег ул ярные выражен ия» на стр. 152. vile пре доставл яе т прим ерно те же возможнос ти, что и опц ия extended в nvi. Они включ ают групп овые выр аж ения POSIX для класс ов симв ол ов, [[:alnum::]], с некот ор ыми расш ир ениям и (доп олнит ельные классы и со
Расширенные регулярные выражения 399кращен ия) и инт ервальн ые выраж ения, так ие как {,10}. Синтаксис немного отл ичае тс я от синт акс ис а в nvi – упор делаетс я на доп олн ительные симв олы, экр ан иров анн ые обратн ой кос ой черт ой:\| Указывает на альтернат иву: house\|home.\+ Соответс тв уе т одному или более предш еств ующим регулярным вы ражениям.\? Соо тв етств ует одн ому или ни одному предшествующ ем у рег ул ярно му выр аж ению.\(...\) Пред ост авляет групп ир овку для *, \+ и \?, а такж е позволяет указ ы вать подстроки в замен яющей части ком анды подс тан овки (\1, \2 и т. д.).\s, \S Соо тв етс твуе т пробельн ым и видим ым символам соотв етств енно.\w, \W Определяе т симв ол ы, «из котор ых сос тоят слов а» (букв енно-цифр о вые и знак подч еркив ан ия, «_»), и симв ол ы, так ов ым и не явл яющие ся, соотв етс тв енно. Нап рим ер, \w\+ зад ае т ключев ые слов а и иденти фикаторы в C/C++1.\d, \D Задае т цифр ы и нец ифровые симв олы соо тветс твенно.\p, \P Опр ед ел яе т неп еч атаем ые и печ ат аем ые символ ы соо тветственно. Проб ел ы отн ос ятс я к печ атаемым.vile доп ускает исп ольз ован ие escape-пос ледовательностей \b, \f, \r, \tи \n в замен яющ ей части ком анд ы замен ы. Они озн ач ают Backspace, запрос на под ач у стран иц ы, возврат каретки, таб уляцию и симв ол новойстроки, соо тветс твенно. Заметим, что vile подражае т perl-обр аботк е \u\L\1\E, а не той, которая есть в vi. Если скомандовать :s/\(abc\)/\u\L\1\E/, то vi заменит на abc, то гда как vile и perl замен ят на Abc. Это пол езн ее для капитализац ии слов.1 Для сам ых въедл ив ых доб авим, что это также соо тветс тв уе т идентиф ик а торам, начинающ имс я с цифр ы; обычно это не приводит к проблемам.
400 Глава 18. vile: vi Like Emacs (vi как Emacs)Улучшенные возможности редактирования В этом разд ел е описан ы функции vile, ускоряющ ие и упр ощающ ие обычн ое редакт ир ов ание.История командной строки и автозавершение vile зап омин ает вводим ые польз оват ел ем ком анд ы ex в буф ере под на званием [History]. Эта возм ожность управл яе тся опц ие й history, кот о рая по умолчанию уст ан овл ен а в значение true. Если она выключен а, то сохран ен ие ком анд не ведетс я, а буф ер [History] удал яе тс я. Команд а show-history разделяет экр ан, после чег о в нов ом окн е отображае тся бу фер [History]. В реальнос ти ком андная строк а с двоеточ ие м явл яе тся мин и- буфер ом. Ее можно исп ользов ать, чтоб ы вспомн ить строк и из буфера [History] и отр едакт ировать их. Клавиш и ↑ и ↓ применяю тс я для прокрутк и вверх и вниз по ист ории ко манд, а ← и → – для пер емещения по строке. Для удален ия символов ис пользуется тек ущ ий симв ол удал ен ия (как прав ило, это BACKSPAC E). Все остальн ые вводимые знак и отображаю тс я в тек ущей поз иции кур сора. Мин и-буф ер можно пер еключ ить в реж им vi, есл и ввес ти симв ол mini- edit (по умолчан ию это ^G). После этог о vile подс ветит мини-буфер с по мощью мех ан изма, опр ед еляемог о опцие й mini-hilite. По умолч анию знач ен ие опции – reverse, инв ерт ирующее цвет. В реж им е vi можно польз оваться ком андам и vi для перемещ ен ия. Такж е можно задав ать ком анды vile, подходящие для ред актир ов ан ия в одн ой строк е, нап ри мер i, I, a и A. vile решае т, как ие ком анды будут работ ать, основ ываясь на свои х таблицах ком анд, что поз вол яе т польз оват ельс ким прив язкам клавиш такж е раб отать в мин и-буфер е. Интер есной особ еннос тью vile явл яе тся использован ие им ист ор ии для отоб раж ен ия ран ее вводимых данн ых, соо тв етс тв ующих ввод им ой ко манде. Например, пос ле ввода :set и пробел а vile высвет ит подсказку Global value:. При этом можно использ ов ать ↑, чтобы увид еть предыд у щие заданн ые вами глоб альные перем енные и пол учить возм ожность изм ен ить одн у из них. Ком андн ая строк а ex предоставляет авт озаверш ение различн ого вида. При вводе имени команд ы можно в люб ой мом ент нажать клавиш у TAB, пос ле чего vile по возм ожнос ти зап олнит остат ок имен и ком анд ы. Если нажать TAB во втор ой раз, программ а создаст новое окно, в кото ром буд ут показ аны все возможные вар иант ы завершения. Зав ершен ие производитс я у встрое нн ых и пользовательс ких команд vile, тег ов, имен файл ов, реж им ов (про них чуть позже), перем енн ых, значен ий перечислен ий (нап рим ер, имен цветов) и симв олов терм ин ала
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: