Многооконное редактирование 151 Подсветка синт акс иса В elvis, Vim и vile можно сдел ать так, чтоб ы отд ельные част и файл а отображал ись в разн ых цветах и шрифт ах. Это особ енно удобно при ред актирован ии программн ого кода.Многооконное редактирование Возм ожн о, сам ое важное улучшен ие станд артного vi, пред ост авл яемое его модификациями, – это способность ред акт ир овать файлы в не скольк их окнах. Оно позвол яет легко править сразу нес кольк о файлов и «вырез ать и вставл ять» текст из одн ого файл а в другой посредств ом копиров ан ия и вставк и. В клонах не обязательно разд ел ять экр ан, чтоб ы коп ир ов ать и вставлять текст между файл ами. Только ориг ин альный vi очища ет буферы для хранения фрагм ент ов текс та при пер еключ ении меж ду файлами. В кажд ом редакт оре сущ ествую т две осн овн ые концепции, лежащие в осн ов е реализ ации мног ооконности: буферы и окна. В буфер е сод ерж итс я ред акт ир уемый текст. Он может быть взят из фай ла или быть соверш енн о нов ым, котор ый нужно буд ет зап исать в файл. Кажд ому файл у соотв етствует тольк о один связанный с ним буф ер. Окн о обесп еч ив ает просмотр буфер а, позвол яя видеть и измен ять сод ер жащийся в нем текст. С одн им буфером может быть связан о нескольк о окон. Изм енения, сделанн ые в буфер е в одном из окон, отражаю тс я и в друг их окн ах, в которых открыт этот буфер. С буф ером может не быть связано ни одн ого окна. В этом случ ае с ним ничего нельз я делать, разве что открыть его в окне позж е. Если зак рыть пос леднее из окон, связ анных с некот ор ым буф ер ом, то «закрое тся» и файл. Если буф ер был измен ен, но не сох ранен на диск, то ред акт ор мож ет запретить (или не зап ретить) зак рыть пос ледн ее связ анн ое с ним окно. При создании нов ог о окн а редакт ор разд ел яет тек ущ ий экран. В боль шинс тв е программ в новом окн е вы увидит е редакт ируем ый файл. По сле этого можно пер еключ итьс я в окно, где вы хот ите редакт ировать друг ой файл, и дать ред акт ор у команду о пер ех оде к редактиров ан ию файл а в этом окне. Кажд ый редакт ор предоставл яе т дост уп к ком анд ам vi и ex для пер ем ещ ен ия по окнам впер ед и наз ад, а также поз воляе т менять размер окон, скрыв ать и пок аз ывать их. О мног оо конн ом редактир ов ании в Vim рассказывается в глав е 11. В каждой из глав част и III, посвященн ой очередн ом у редактор у, мы по каж ем пример ы раздел ен ия экр ан а (на прим ере одн их и тех же двух файлов) и расскажем, как разб ить экран и пер ем ещ атьс я между окна ми.
152 Глава 8. Представляем клоны viГрафические интерфейсы У elvis, Vim и vile есть верс ии с граф ич ес ким и пользовательским и ин терф ейсами (GUI), дающие все преи мущес тв а раст ров ых экранов и мы ши. Кром е подд ержки X Window в UNIX подд ержив аю тс я также Mic rosoft Windows и друг ие оконн ые сист ем ы. В табл. 8.1 перечисл ен ы GUI, доступные для разн ых модиф ик ац ий vi. Таблиц а 8.1. Дост упн ые GUI Ред ак Терми X11 Microsoft OS/2 BeOS Macin Amiga QNX OpenVMS тор нал Windows tosh Vim • •• •• • • nvi • elvis • •• • vile • •• •• ••Расширенные регулярные выражения Мет ас имв ол ы, дост упн ые в vi при пои ске и замен е пос редс твом регу лярных выражен ий, описаны ранее в глав е 6 в разд еле «Метасимв олы, исп ольз уем ые при поиск е по шабл ону» на стр. 95. Во всех модиф икац и ях vi есть разновидности расшир енных регул ярных выражений, кот о рые либо опц иональны, либо доступны всегда. Как правило, они иден тичн ы (или почти идент ичны) аналогам из программ ы egrep. К сож але нию, разн ов идн ос ти расшир енн ых выраж ений в разных мод иф ик аци ях vi нес кольк о отлич аются. Чтобы показать возм ожн ости расшир енн ых рег ул ярных выражен ий, представ им их на прим ере nvi. Разд ел «Расш ир енн ые рег ул ярные вы ражен ия» на стр. 198 описывает расширенн ые регул ярн ые выраж ен ия Vim, а глав ы част и III, пос вященные модиф ик ациям vi, также описы вают синт акс ис ы расш иренн ых регул ярных выражений соответс тв ую щих редакт оров, прич ем пример ы не повтор яются. Сог ласно станд арт у POSIX, расш иренные рег ул ярные выражения nvi называю тс я Extended Regular Expressions (ERE). Чтобы включ ить их, восп ольз уйт есь ком анд ой set extended либ о в файле .nexrc, либ о из при глашения ex. Кром е стандартн ых метасимв олов, описанных в главе 6, и скобковых выр ажен ий POSIX, про которые мы упом ин ал и в разд еле «Выражен ия в скобк ах в стандарте POSIX» на стр. 97 той же глав ы, здесь дост упны следующ ие метасимв ол ы: | Раздел яет нес колько возможных вариа нт ов. Нап ример, a|b соотв етс т вуе т или a, или b. Одн ак о этот метас имвол не огр ан ич иваетс я один оч ным и знакам и: house|home соо тветствует либо слов у house, либ о home.
Расширенные регулярные выражения 153 (...) Используе тс я для созд ания групп ы, к котор ой пот ом можно приме нять друг ие операт ор ы рег ул ярн ых выраж ен ий. Например, house|home можно сок ратить (если не упр остить) до ho(use|me). Опер ат ор * можно прим ен ять к тексту в скобк ах: (house|home)* соо тв етс твует home, homehouse, househomehousehouse и т. д. При включ енной опц ии extended текст, сгруппированн ый скобк ам и, вед ет себ я аналогично текс ту, заключенному между \(...\) в обыч ном vi: строка, соотв етствующ ая совп аден ию, может быть воспроиз вед ена в части зам ен ы в команд е подстановки с пом ощ ью /1, /2 и т. д. В этом случ ае для ввод а обычн ой открывающей скобк и без специ альног о значения исп ольз ую тс я симв ол ы \(.+ Соо тветс тв ует одному или нескольк им предшеств ующ им регул яр ным выр ажениям. Это мож ет быть либ о один очн ый симв ол, либо групп а симв ол ов, заключ енн ых в скобки. Обр ат ит е вним ание на раз лич ия между + и *. Символ * может означать пуст ое мес то, а у + долж но быть хотя бы одно совп ад ен ие. Например, ho(use|me)* соответс тв у ет ho, равн о как и home, и house, но ho(use|me)+ не соотв етс твует ho.? Обозначает ноль или одн о вхождение предшес твующего регул ярно го выраж ен ия. Так можн о указ ать на «необяз ательн ый» текст, кото рый мож ет присутс тв ов ать, а может и нет. Нап рим ер, free?d соо твет ств ует и fred, и freed.{...} Опр ед еляе т инт ерв альн ое выр аж ение. Инт ервальн ое выраж ение описыв ает счетн ое число повторен ий. В следующ их опис аниях n и m обознач аю т целые числ а: {n} Обознач ае т ровно n повтор ен ий предыдущ ег о регул ярн ог о выр а жен ия. Наприм ер, (home|house){2} соответс твует homehome, home house, househome, househouse и больше ничем у. {n,} Соо тв етствуе т n или более пов торен ия м пред ыдущ его рег ул ярн о го выраж ен ия. Можно считать, что эта ком анд а зад ает «как ми ним ум n» повторений. {n,m} Соотв етствуе т числ у повтор ен ий от n до m. Огр анич ен ие важн о, так как оно опред ел яе т, сколько именно текс та заменится ком ан дой подстан овк и1.1 Операт ор ы *, + и ? можно свес ти к {0,}, {1,} и {0,1} соотв етств енно, но исполь зов ать перв ые гор азд о удобн ее. Кроме тог о, с точк и зрен ия истории UNIX интервальн ые выр аж ения был и введен ы в обр ащен ие позже.
154 Глава 8. Представляем клоны vi Если опц ия extended не установлен а, то эта же функц ия реализуе тс я в nvi при пом ощи \{ и \}.Улучшенные теги Программа «Exuberant ctags» – это разн овидн ость ctags, способная сде лать намног о больш е, чем ctags в UNIX. Она создае т файл tags расши ренн ог о форм ата, кот ор ый дел ае т проц есс пои ск а по тег ам более гибким и мощным. Мы опиш ем версию Exuberant первой, так как она поддер живается больш инством мод иф икаций vi. В этом разделе также опис аны стек и тег ов, поз вол яющие сохран ять не сколько посещ енн ых с пом ощью команд :tag или ^] поз иц ий в файлах. Стеки тегов подд ерж ив аются во всех разнов иднос тях vi.Exuberant ctags Программа Exuberant ctags была созд ан а Дарреном Хиберт ом (Darren Hiebert) и на мом ент нап исан ия этой книги выш ла в верс ии 5.71. Ее до машн яя страница – http://ctags.sourceforge.net/. Следующий спис ок воз можн остей прог рамм ы взят из файл а README дистриб утив а ctags: • Генер ац ия тег ов для всех тип ов синтакс ических элем ент ов языков C и C++, включая назван ия класс ов, опр ед ел ения макр ос ов, назван ия пер ечисл ен ий (enum), перечисл яемые значен ия (то, что нах од ится внутр и enum), опр едел ен ия функций (метод ов), объя вл ен ия/прот о тип ы функц ий (методов), члены структ ур и пол я классов, наз ван ия структур (struct), определ ения тип ов (typedef), имен а объе дин ений (union) и пер еменн ых. Уфф! • Поддержка кода C и C++. • Также поддерживаются 29 других языков, включ ая C# и Java. • Прог рамма очень уст ойчив а при анализе код а, и ее гораздо сложнее одур ачить кодом, содержащ им дир ект ив ы преп роц есс ора #if. • Возможн ость ее использ ов ан ия для расп еч атывания чит аб ельн ог о спис ка выбранных объект ов, обн ар уж енн ых в исх одном коде. • Поддержка ген ер ации файл ов тег ов в стиле GNU Emacs (etags). • Раб ота под Amiga, Cray, MS-DOS, Macintosh, OS/2, QDOS, QNX, RISC OS, UNIX, VMS и Windows версий от 95 до XP. На веб-сайте доступ ны нек от ор ые скомп ил ир ов анн ые бинарные файл ы. Exuberant ctags генер ирует файлы tags в форм ате, кот ор ый мы опиш ем ниж е. 1 На момент подгот овк и русс кояз ычног о издан ия – 5.8. – Прим. науч. ред.
Улучшенные теги 155Новый формат тегов Как прав ил о, файл tags имее т три пол я, отд еленные друг от друга табу ляц ией: имя тег а (обычн о это идент иф ик ат ор), исходный файл, сод ер жащ ий тег, и указ ание, где иск ать идент иф ик атор. Это указание может быть либо простым ном ер ом строки, либ о пои сков ым шабл оном, соот ветс тв ующ им уст ановл енной опц ии vi nomagic и зак люченным межд у обратным и косым и чертам и или знакам и вопроса. Кром е того, файл tags всег да отс орт иров ан. Этот форм ат генерируе тс я программ ой UNIX ctags. Фактич ески мног ие версии vi прин им али в пол е пои скового шабл он а любую команд у (зияю щая дыр а в безопасн ости). Бол ее тог о, имелась недокум ент ированн ая особенн ость: есл и строк а заканчив алась точк ой с запят ой, пос ле кот о рой стоял и двойн ые кав ычк и (;\"), то весь текст после этих символ ов иг норир овалс я (двойными кав ычк ам и отк рываетс я комм ент арий, как в файл ах .exrc). Новый формат имеет обр атн ую совмест им ость с трад ицио нн ым. Пер вые три поля те же сам ые: тег, имя файла и шаблон поиск а. Exuberant ctags ген ерируе т тольк о шабл оны поиск а, а не произв ольн ые ком анды. После разд елител я ;\" став ятся расш иренн ые атр ибут ы. Кажд ый атри бут отд ел ен от след ующего симв олом табуляции и содерж ит два подп о ля, раздел енных двоет очие м. Первое подполе содержит ключ евое сло во, описывающее атриб ут, второе – его знач ен ие. В табл. 8.2 пер ечисле ны подд ерж ив аем ые ключевые слова. Табл иц а 8.2. Ключ ев ые слов а в расш ир енном ctagsКлючевое слово Значениеkind Значение – одна бук ва, указывающ ая на лекс ич ес кий тип тег а. Это может быть f для функции, v для пер ем енной и т. д. Пос кольку имен ем атриб ут а по умолчанию являе тся kind, люб ая отд ельная бук ва мож ет обоз начать тип тег а (напри мер, f для функц ии).file Для «статич ес ких» (то есть локальн ых для файл а) тегов. Значением должно быть имя файл а. Если значен ию прис воена пуст ая строка (прос то file:), то считается, что оно совп адает со втор ым полем (имя файла). Эта особенность была добавл ена отчасти для компактнос ти и для обесп ечения простог о спос оба поддержк и файлов tags, распол оженн ых не в тек ущем каталог е. Знач ение поля, со держащего имя файла, всег да зад ае тся относ ит ельно тог о кат алог а, где располож ен сам файл tags.function Для лок альных синтакс ич еских конс тр укций. Значение – имя функции, где они опр еделен ы.struct Для пол ей в struct. Знач ен ие м служит имя структур ы.
156 Глава 8. Представляем клоны vi Таблица 8.2 (продолжение) Ключ ев ое слов о Знач ение enum Для элем ент ов пер ечисл ений enum, где значение – имя пере числ ения. class Для членов-функц ий и член ов-пер еменных в C++. Значе- ние – имя класс а. scope Предназнач ен о в осн овном для член ов-функций класс а C++. Обычно оно имее т значен ие private для час тных закрытых членов или опускаетс я для публ ичных член ов, чтоб ы поль зов ат ель мог огр анич ить поиск тегов только публ ичным и членами. arity Для функц ий. Опред еляе т число ее арг ум ент ов. Если пол е не содерж ит двоеточия, то считае тся, что оно отн осится к ти пу kind. Прив ед ем примеры: ARRAYMAXED awk.h 427;\" d file: AVG_CHAIN_MAX array.c 38;\" d array.c array.c 1;\" F ARRAYMAXED – это макр ос C #define, опр еделенный в awk.h. AVG_CHAIN_MAX – тож е макр ос C, но он использ уетс я тольк о в array.c. Третья строка не мног о друг ая: это тег для самого файл а исх одн ого код а! Он генерир ует ся с пом ощ ью опц ии -i F Exuberant ctags и позволяет зад ать ком анд у :tag array.c. Кроме тог о, удобно поместить курс ор над имен ем файла и перейти к этому файлу с помощью ком анды ^] (наприм ер, есл и вы ре дактир ует е Makefile и хотит е пер ейти к определ енному файл у). В той части атрибута, где зад ае тся знач ение, обратн ая кос ая черт а, та буляц ия, возв рат кар етк и и симв ол ы пер евод а строк и должны быть предс тавл ен ы как \\, \t, \r и \n соответс твенно. Расшир енные файлы tags могут содержать некоторое кол ичес тв о ини циал изир ующ их тег ов, нач ин ающ ихс я с !_TAG_. Эти тег и обычн о отсор тир ов ан ы в начале файла и полезны при опр ед елении программ ы, соз давш ей файл. Exuberant ctags ген ерируе т следующее: !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;\" to lines/ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ !_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/ !_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ !_TAG_PROGRAM_VERSION 5.7 // Некот орые редактор ы мог ут использов ать эти спец иальн ые тег и для реа лизации различных функций. Нап рим ер, Vim уделяет вним ан ие тегу !_TAG_FILE_SORTED и при пои ске в файле tags будет исп ольз ов ать бин арн ый пои ск вместо линейн ог о, использ уемого для неотс орт ированных файл ов. Есл и вы пользует есь файлам и tags, рек оменд уем уст ан ов ить Exuberant ctags.
Улучшенные теги 157Стеки тегов Ком анд ы ex :tag и ^] в режиме vi предоставл яю т огр ан ич енные возмож ности для пои ска идент ифик ат ор ов на осн ове информац ии, содержа щейся в файл е tags. Одн ак о во всех мод ифик ац ия х ред акт ор а есть рас ширен ие этих возможностей, а именно – спос обность поддержив ать стек пол ож ений тег ов. Всяк ий раз при вызове ком анд ex :tag или ^] в ре жим е vi перед поиском указ анного тег а ред актор сох ран яет текущ ее по ложен ие в файл е. После этог о можно верн утьс я к сох ран енном у поло жению, исп ольз уя (как правило) ком анд у vi ^T или ком анду ex. Ниж е мы расскаж ем о стек е тегов Solaris vi и привед ем нек оторые при меры. Стек и тегов Vim опис ыв аются в разд ел е «Стек и тег ов» на стр. 302. О методах раб оты со стеками тегов, прим еняемых в других ред акторах, расс каз ывае тся в соотв етс твующ их главах части III.Solaris vi Как ни удивительн о, версия vi для Solaris подд ержив ае т стек и тегов. Возм ожно, не столь удив ительн о то, что эта функц ия сов ершенн о не до кум ент ирована на страниц ах ex(1) и vi(1) рук оводства по Solaris. Мы свели свед ен ия о раб от е со стеком тег ов в Solaris vi в табл. 8.3, 8.4 и 8.5. Стек тег ов в Solaris vi весьма прост1. Таблица 8.3. Ком анд ы тег ов в vi для SolarisКоманда Действ иеta[g][!] tagstring Редакт ир уе т файл, сод ержащий tagstring, согласно файл у tags. Воск лиц ательн ый знак заставл яе т vi пер ек лючиться в нов ый файл, даж е есл и текущ ий буфер измен ен, но не со хран ен.po[p][!] Выт аскив ае т один элем ент из стек а тегов.Таблиц а 8.4. Команды тег ов для ком андн ого реж има vi для SolarisКоманд а Действие^] Отыскивает в файл е tags местоп оложение идентификатора, на^T котором стоит курс ор, и пер ех од ит на это мес то. Если включен стек тегов, то текущее пол ожен ие автомат ически помещае тс я в стек. Возвращает к пред ыдущ ем у месту в стеке тег ов, то есть выт ас кив ае т отт уд а один элем ент.1 Эта инф орм ация была пол уч ен а эксперимент ально. Ваш и результ аты мо гут отлич атьс я.
158 Глава 8. Представляем клоны vi Табл ица 8.5. Опц ии для управл ен ия тег ам и в vi для Solaris Опция Действие taglength, tl Управляет кол ичеством знач им ых символов в теге при его по tags, tagpath иск е. Значение по умолч анию, равн ое нулю, указ ывает, что зна tagstack чим ы все символы. Значен ием явл яетс я спис ок файл ов, где нужно искать теги. По умолчанию это \"tags/ usr/lib/tags\". Ког да эта опция уст ан овлен а равн ой true (истина), vi пос ылае т в стек каждое местоп оложение. Чтоб ы ее вык лючить, введите :set notagstack.Exuberant ctags и Vim Чтоб ы было пон ятно, как исп ользов ать стек и тегов, представ им неб оль шой пример с использов ан ие м Exuberant ctags и Vim. Предпол ожим, вы работ аете с программ ой, исп ольз ующей функц ию GNU getopt_long, про которую вам необход им о узнать больш е. GNU getopt состои т из трех файлов: getopt.h, getopt.c и getopt1.c. Снач ал а создад им файл tags, а зат ем начнем редакт ировать основную программ у, расп ол оженную в main.c: $ ctags *.[ch] getopt.h getopt1.c main.c tags $ ls Makefile getopt.c $ vim main.c Клав иш и Результат /getopt_ /* option processing. ready, set, go! */ for (optopt = 0, old_optind = 1; (c = getopt_long(argc, argv, optlist, optab, NULL)) != EOF; optopt = 0, old_optind = optind) { if (do_posix) opterr = TRUE; Ред акт ируем main.c и перех од им к выз ов у getopt_long. ^] int getopt_long (int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } \"getopt1.c\" 192L, 4781C Вып олн яе м поиск тег ов по getopt_long. Vim пер емест ит вас в get opt1.c и пос тавит курсор на опр ед ел ение getopt_long.
Улучшенные теги 159Оказ ывае тся, getopt_long явл яетс я функц ие й-«обертк ой» для _getopt_internal. Вы помещаете курс ор на _getopt_internal и снов а вып олняетепои ск тегов.Клав иши Результ ат3jf_ ^] int _getopt_internal (int argc, char *const *argv, const char *optstring, const struct option *longopts, int *longind, int long_only) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data); optind = getopt_data.optind; \"getopt.c\" 1225L, 33298Cjfo; ^] Вы перешли к getopt.c. Чтоб ы отыскать больше информац ии о struct option, поместите курс ор на option и опять вып олн ит е по иск по тег ам. one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ \"getopt.h\" 177L, 6130C Редакт ор переш ел на опр еделение struct option в getopt.h. Теперь можно поч ит ать коммент ар ии, где объясн яется использ ован ие данной структ ур ы.:tags # TO tag FROM line in file/text main.c 1 1 getopt_long 310 getopt1.c getopt.c 2 1 _getopt_internal 67 3 1 option 1129 Команда :tags в Vim показывает стек тегов.
160 Глава 8. Представляем клоны vi Наж ат ие ^T три раза перем естит вас обр атн о в main.c, откуда вы нач али. С пом ощ ью тегов очень удобн о перемещатьс я во врем я ред актир ов ания исх одного код а.Улучшенные возможности Во всех разновиднос тях vi есть дополнительные возм ожн ости, позво ляющие редакт иров ать текст прощ е и быстр ее: Ред актир ован ие командн ой строк и ex Способность ред актировать ком анд ы в реж им е ex во время их ввода, включ ая сох ран ен ие истории ком анд ex. Такж е сюда входят функ ции заверш ения имен файлов и проч ие, нап ример зав ерш ен ие ко манд или опц ий. Отс утс твие огранич ений на длину строки Редакт иров ан ие строк и прои зв ольн ой длины. Такж е сюда входит возм ожн ость ред акт ировать файлы, сод ержащ ие люб ые 8-разряд ные симв олы. Беск онечные отмен ы Последов ательная отмен а всех сдел анн ых в файл е изм енен ий. Инкрементный пои ск Поиск текс та прямо во врем я ввод а шаблона поиск а. Правая/лев ая прок рутка Возможн ость не пер ен осить длинн ые строк и, позволяя им вылез ать за пред ел ы экран а. Визуа льный реж им Спос обн ость выб ир ать произв ольные смежн ые фрагменты текста, над кот орыми буд ет сов ерш ен а как ая-либ о опер ация. Инд ик ат оры режим а Видимый указ атель акт ивного реж им а (командн ог о или реж им а вставк и), а такж е указ ат ел и тек ущих строки и столбц а.История командной строки, автозавершение Польз ов ат ел и оболоч ек csh, tcsh, ksh, zsh и bash знают, что если есть воз можн ость выз ывать предыд ущие команд ы и легко редактир овать их и вып олнять зан ов о, то раб ота стан ов ится нам ного более эффективной. Для польз овател ей ред актор ов это так же верн о, как и для польз оват е лей командн ой строк и. К сож ал ен ию, в vi для UNIX нев озм ожн о сохра нять и восстан авливать команд ы ex. Этот недостаток исправл ен во всех модиф икац иях vi. Сох ран ение исто рии команд и их повторный выз ов реал из ов ан ы в них разн ыми спос об а ми, но все эти механизм ы работают и добавл яют удобства в раб от е.
Улучшенные возможности 161 Вдоб авок к ист ории ком анд во всех этих ред акт ор ах есть нек от орое по доб ие авт оз ав ершен ия ком анд ы. Нап ример, пос ле ввод а нач ал а имени файл а и наж ат ия опред ел енной клав иш и (наприм ер, табуляции) редак тор зав ершает имя файл а за вас. Кром е автозав ерш ен ия имен и файла в нек отор ых редакт ор ах есть авт оз ав ерш ение и для друг их объе ктов. Подр обн ости, касающ иеся Vim, можно найт и в разд еле «Ключ ев ые сло ва и зав ерш ен ие слов по словарю» на стр. 293. Про другие ред актор ы подробно расс казываетс я в соотв етствующ их главах части III.Строки произвольной длины и двоичные данные Во всех модиф ик ация х vi есть поддержка строк произвольн ой длины1. Старые версии част о имели предел, равн ый примерно 1 000 симв олам в строке, а более длинн ые строки обрез ались. Кроме того, все они проз рачн ы для 8-разрядных симв ол ов, то есть в них можно ред акт иров ать файл ы, содержащ ие люб ые 8-разр ядн ые симво лы. При необх одим ости можно редакт ир овать даж е двоичные и исп ол няемые файл ы. Иног да это мож ет приг од иться. Редактор у можн о сооб щить о том, что файл двои чн ый, а можно и не сообщать. nvi Авт омат ич ески подд ержив ает двои чн ые данн ые. Не треб уется ни специа льных опц ий ком андн ой строки, ни ex. elvis Под UNIX не дел ает отличий межд у двоичным и и прочим и файла ми. В других системах используе т файл elvis.brf для зад ан ия опц ии binary, чтобы изб еж ать проб лем с восприятие м переноса строк и (файл elvis.brf и реж им отображен ия hex опис ан ы в разделе «Инт ер есные особ еннос ти» на стр. 374). Vim Не ограничив ае т длину строки. Если не уст ан овл ен режим binary, Vim ведет себя как nvi и авт омат ич ески подд ерж ивае т двои чн ые дан ные. Одн ако при редактир ов ании двои чного файл а лучше восп ользо ватьс я опцией -b ком андной строки или :set binary. При этом уст а навл ив аются нек от ор ые другие опц ии Vim, облегчающие ред акти рован ие двоичн ых файл ов. vile Автом ат ичес ки подд ерживает двои чн ые данные и не треб ует ни спе циальн ых опц ий ком андной строки, ни ex. Наконец, одн а важная дет аль. Традиц ионн ый vi всег да сох ран яет файл с добавленным в кон ец симв ол ом перенос а строки. Таким образ ом, при редактиров ании двои чного файла к нему может добав иться лишний1 Верн ее, до максим ального знач ен ия тип а long в C – 2 147 483 647 (на 32-раз рядном комп ьют ер е).
162 Глава 8. Представляем клоны vi симв ол, что прив ед ет к неприя тн ос тям. По умолчанию nvi и Vim со вмест им ы с vi и добавл яю т пер ен ос строк и. В Vim этого можно изб е жать, есл и уст анов ить опцию binary. elvis и vile ник ог да не добавляют пер ен ос строк и.Бесконечная отмена vi для UNIX поз воляет отм енить тольк о последн ее измен ение или вос становить строк у в сос тоян ии до внесен ия в нее как их-либ о изм ен ен ий. Во всех разнов иднос тях ред акт ор а есть «беск онечн ая отм ена» – способ ность отк ат ывать действия пользов ат ел я одно за другим вплоть до со стояния, когда файл не подв ергался ник ак им правк ам.Инкрементный поиск При использов ан ии инкрементн ого поиск а ред актор перем ещ ает кур сор по всем у файл у, отыскив ая соотв етств ия в тексте по мер е ввода шаб лон а поиска. Пос ле наж ат ия на ENTER поиск завершае тся1. Если рань ше вы подобн ого не встречал и, то понач алу это мож ет привест и в заме шательство. Однак о ког да вы прив ыкн ит е к этом у, то удив итесь, как раньш е обх од ил ись без так ого поиск а. В nvi, Vim и elvis инк рем ентн ый поиск присутс твуе т в качеств е опц ии, а vile используе т даж е две спец иальные команд ы реж има vi. vile мож но скомп ил ир ов ать с отключенн ым инкрем ентн ым пои ском, но по умол чанию он включ ен. В табл. 8.6 показ ан ы опц ии, предоставл яемые каж дым из редактор ов. Табл ица 8.6. Инкрементный пои ск Ред актор Опц ия Команд а Действ ие nvi searchincr Во врем я ввод а курс ор пер ем ещается по фай лу, всегда попад ая на перв ый символ текста, где обнар уж ил ось соотв етс твие. Vim incsearch Во врем я ввод а курсор перем ещ аетс я по фай лу. Vim подс вечивает текст, соотв етс твую щий уже введенн ом у. elvis incsearch При вводе курсор пер емещ ае тся по файл у. elvis подсвечивае т текст, кот ор ый соотв ет ств уе т введенному. vile ^X S, ^X R При ввод е курс ор перемещ ается по файл у, всегда поп адая на первый символ текс та, где обнаруж ил ось соответств ие. Команд а ^X S вып олняе т инкрем ентный поиск впер ед по файл у, а ^X R – в обр атн ом нап равл ении. 1 В Emacs инкрементный пои ск был всег да.
Улучшенные возможности 163Прокрутка влево-вправо По умолчанию vi и больш ая часть его модификаций пер еносят длин ные строки. Таким образом, одн а лог ич еская строка файла может зани мать несколько вид им ых строк на экр ан е. Иногда предп очт ит ельн ее сдел ать так, чтоб ы длинн ая строк а не пер е нос илась, а выходила за правый край экран а. Есл и поставить курсор на так ую строку и перем ест ить его направ о, то весь экран «прокрутитс я» в стор он у. Эта функция доступн а во всех разнов идн ос тях vi. Как прави ло, числов ая опц ия задает, на сколько нужн о прок ручив ать экран, а бу- левская опр ед еляет, перен осятс я строк и или исч ез аю т за границ ами экр ана. В vile также есть командные клав иш и, позволяющие смещ ать в сторон у весь экр ан. В табл. 8.7 прив едены пример ы исп ользован ия го ризонтальн ой прокрутк и в разных ред акт ор ах.Табл иц а 8.7. Прок рутка в стор он ыРедак Велич ин а Опция Дейс тв иетор прок рутк иnvi sidescroll = 16 leftright По умолч ан ию вык люч ена. Если включитьelvis эту опцию, то длинн ые строки вых одят заVim гран ицы экрана. За один раз экран прокру чив ается на 16 символов влев о или вправо.vile sidescroll = 8 wrap По умолч анию вык люч ена. Если включ ить опцию, то длинн ые строки вых од ят за гра ницы экран а. За один раз экран прокручива етс я на 8 символ ов влево или вправ о. sidescroll = 0 wrap По умолч ан ию выключ ен а. Если включить эту опц ию, то длинн ые строк и вых од ят за границы экр ана. Есл и sidescroll рав ен ну лю, то кажд ая прокрутка помещ ае т курс ор в серед ин у экран а. В ост альных случая х экр ан прок руч иваетс я на уст ан овл енн ое ко личес тв о симв ол ов. sideways = 0 linewrap По умолчанию вык люч ен а. Есл и включ ить опцию, то длинн ые строки будут пер ено ситься. По умолчанию они уход ят за грани цы экрана. Длинные строк и отмеч аются слева и справ а символам и < и >. Есл и side ways рав ен нулю, то кажд ая прок рутка пе ремещ ае т экр ан на 1/3. В остальных случ ая х экр ан прокручиваетс я на установленн ое ко лич ес тво символ ов. horizscroll По умолч ан ию включ ен а. Есл и опц ия вклю чен а, то курсор, пер ем ест ивш ись за пред ел ы экрана, смес тит весь экр ан. Есл и опц ия не установл ен а, то смещаетс я только тек ущая строка. Это удобно на медленных дисп леях.
Варианты запуска и инициализации 193 Пользов ат ел и Windows могут получ ить доступ к этим версия м про грамм ы Vim в списке программ (в стартовом меню).Системные и пользовательскиеконфигурационные файлы Vim ищет инструкции по иниц иал из ации особым образ ом. Он вып ол няе т перв ый найденн ый набор инс тр укц ий (либо в перем енн ой окр уж е ния, либ о из файла) и нач инает редактир ование. Иным и слов ам и, пер вый встретившийся элем ент из следующ ег о спис ка буд ет единствен ным элем ент ом из списка, кот орый будет выполн ен. Спис ок таков: 1. VIMINIT. Это пер еменн ая окр уж ен ия. Если она не пустая, Vim испол няе т ее сод ержимое как команду ex. 2. Польз ов ат ельс кие файлы vimrc. Файл иниц иализации vimrc (Vim re source) кроссплатформ енн ый, однако из-за нек оторых отл ич ий меж ду операц ионн ым и системами и платф орм ам и Vim ищет его в раз ных местах в след ующ ем пор ядке: $HOME/.vimrc (Unix, OS/2 и Mac OS X) s:.vimrc (Amiga) home:.vimrc (Amiga) $VIM/.vimrc (OS/2 и Amiga) $HOME/_vimrc (DOS и Windows) $VIM/_vimrc (DOS и Windows) 3. Опц ия exrc. Если устан овлен а опц ия Vim exrc, то ред актор будет ис кать три доп олнит ельн ых файл а настрое к: [._]vimrc; [._]vimrc и [._] exrc. Файл vimrc – хорош ее место для уст ан овки хар акт еристик ред актор а Vim. Теорет ичес ки в этом файл е можно включ ать или вык люч ать лю бую опц ию Vim, и он особ енно хорошо подх од ит при уст ановке глобаль ных перем енн ых и опред ел ении функций, аббревиатур, отоб ражен ий клав иш и т. д. Вот что след уе т знать о файле vimrc: • Комм ентарии нач ин аются с двойн ой кав ычки (\"). Она мож ет стоять в люб ом мест е строк и. Люб ой текст пос ле двойной кавычк и, вклю чая ее сам у, буд ет игн орир ов аться. • Ком анд ы ex можно указывать с двоет оч ием или без него. Нап ример, set autoindent равнос ильно :set autoindent. • Файл будет гораздо удобн ее в управлении, если вы разоб ьет е боль шие наб оры определ ений опц ий по разн ым строкам. Нап рим ер: set terse sw=1 ai ic wm=15 sm nows ruler wc=<Tab> more эквив алентн о след ующ ему: set terse \" short error and info messages set shiftwidth=1 set autoindent set ignorecase
194 Глава 10. Главные улучшения Vim по сравнению с vi set wrapmargin=15 set nowrapscan \" don't scan past end or top of file in searches set ruler set wildchar=<TAB> set more Обр ат ите вним ан ие, насколько бол ее удоб оч итаем второй набор ко манд. Также его легче обраб ат ывать пос редств ом удален ий, встав ок и временн ого комм ент иров ан ия строк при поиск е ошибок в конфи гурац ио нном файле. Наприм ер, есл и вам зах оч етс я врем енно убрать нумерацию строк из стартов ой настройки, прос то пос тавьт е двойную кав ычку (\") в начало строк и set number конф иг урац ио нного файла.Переменные окружения Множес тво пер еменных окр уж ен ия влияет на стартов ое поведен ие Vim, а некоторые – даже на пов ед ение во врем я ред акт ир ов ания. В осн овном они пон ятн ы и заменяютс я устан овкам и по умолч анию, есл и не зад ать их специальн о. Как установить переменные окружения Командное окр уж ение (в UNIX называем ое оболочк ой), сущ ес тв ующ ее при рег истр ац ии, уст анавл ив ае т перем енн ые, отражающ ие его пов еде ние либ о влияющ ие на нег о. Пер ем енн ые окр уж ения особенно пол езны, поскольку они влияют на программ ы, вызванн ые из ком андн ог о окр у жения. След ующие инс трукции кас аютс я не только Vim; их можно примен ять для уст ан овки переменн ых окруж ения, которые вы хотит е вид еть в своем командном окруж ен ии. Windows Чтобы уст ановить пер ем енн ую окруж ен ия: 1. Выз овите панель управлен ия. 2. Дваж д ы щелкн ите по System. 3. Пер ейд ите на вкладку Advanced. 4. Нажмит е кнопк у Environment Variables. В рез ультате вы увид ите окно, раздел енное на две области пер емен ных окруж ен ия, User и System. Нов ичк ам не следует мен ять сист ем ные переменн ые окр уж ения. В област и User можн о задать перем ен ные окруж ен ия, связ анные с Vim, и сделать их постоянн ыми для всех сеанс ов раб оты. Unix/Linux Bash и другие оболочк и Bourne Отред актируйте подход ящ ий файл нас тройки оболочк и (наприм ер, для пользов ателей Bash это .bashrc) и вставьте строк и след ующего вид а: VARABC=somevalue VARXYZ=someothervalue
Варианты запуска и инициализации 195 MYVIMRC=myfavoritevimrcfile export VARABC VARXYZ MYVIMRC Пор яд ок строк рол и не играе т. Операт ор export прос то дел ае т эти пе рем енные вид им ыми для программ, раб отающ их в оболочк е, так им обр азом прев ращая их в перем енные окруж ения. Их знач ения мож но уст ан авлив ать как до экспорт а, так и пос ле него.Unix/Linux оболочки C Отред акт ир уйте подх од ящий файл нас тройк и оболочки (так ой как .cshrc) и вставьте строки следующ ег о вид а: setenv VARABC somevalue setenv VARXYZ someothervalue setenv MYVIMRC myfavoritevimrcfileПеременные окружения, связанные с VimДалее мы прив одим спис ок перем енн ых окр уж ения, чащ е всег о используем ых в Vim, а также их действ ие.Опц ия команды Vim -u отменяет действие пер еменных окр уж ен ия Vimи пер еходит неп ос редс тв енно к указанн ом у конфиг урац ионн ом у файлу. -u не отм ен яет пер еменн ые окр уж ения, не относящиес я к Vim:SHELL Указ ывает, как ую оболочку или внешн ий интерпрет ат ор ком анд ис польз ует Vim в командах обол очк и (!!, :! и т. д.). В MS-DOS, если SHELL не уст ан овлена, вместо нее исп ользуе тся перем енная окр уж е ния COMSPEC.TERM Устан авлив ает в Vim внутреннюю опц ию term. Это нео бязательн о, поскольк у редактор настраивает свой терм ин ал так, как счит ае т нужным. Другими словам и, Vim лучше знае т, что так ое терм ин ал, неж ел и предопредел енная пер ем енн ая.MYVIMRC Отмен яет поиск файл ов иниц иал изации в Vim. Если MYVIMRC при старте имеет знач ение, то ред актор пол аг ае т, что оно и являе тс я име нем файла иниц иализац ии и, если такой файл сущ ествует, бер ет от туд а все устан овки. Друг ие файл ы при этом не проверяю тся (см. по следов ат ельность поиск а в предыд ущ ем раздел е).VIMINIT Указывает, какие команд ы ex нужн о выполн ить при старте Vim. Можно зад ать несколько ком анд, отд еляя их вертик альн ой чертой (|).EXINIT То же, что и VIMINIT.
196 Глава 10. Главные улучшения Vim по сравнению с vi VIM Содержит путь к сист емн ом у кат алогу, где нах од итс я инф орм ация о стандартн ой установк е Vim (только для сведения, в Vim не исп оль зуе тся). Если на комп ью т ере устан овлено несколько версий Vim, то ком анда VIM, скорее всего, будет отражать разн ые значен ия в завис имости от зап ущ енной польз оват елем верс ии. Нап рим ер, на машине одног о из автор ов версия Cygwin устан овила перем енной VIM знач ение /usr/ share/vim, тогда как пакет с vim.org установ ил ее равн ой C:\Program Files\Vim. Это важн о иметь в вид у во время правок в файлах Vim, пос кольку при ред актир ов ан ии не тех файлов ваш и измен ения не дадут эф фекта! VIMRUNTIME Указывае т на файлы поддержки Vim, так ие как онлайн-док умент а ция, опред ел ен ие синт аксиса и каталог и с плагинам и. Обычн о ре дактор сам об этом знает. Есл и польз оват ель задает эту пер ем енную, например в файл е vimrc, то это мож ет выз вать ошибк и при устан овк е бол ее нов ой версии Vim, так как пользов ат ельс кая VIMRUNTIME мож ет указывать на старое, нес ущес твующее или неп равильн ое мес то.Новые команды перемещения В Vim присутс тв ую т все ком анд ы перемещен ия и движения vi, боль шая часть кот ор ых пер еч ислена в глав е 3, а также есть нов ые, приве денн ые в табл. 10.1. Таблиц а 10.1. Команд ы перем ещ ения Vim Ком анда Опис ан ие <C-End> Переход в кон ец файл а, то есть на пос ледний символ последней <C-Home> строки файла. Если задать count, то прои зойдет перех од на по следн ий симв ол строки count. count% Пер ех од на первый непробельн ый симв ол перв ой строки файла. Это отл ичае т его от <C-End>, поскольк у <C-Home> не пер еместит кур сор на проб ельный симв ол. Пер еход на count-й проц ент файла; помещ ае т курсор на первый пе чатаем ый символ строки. Важн о отм ет ить, что Vim подсчит ыв ает процент, основ ыв ая сь на количестве строк, а не символ ов в файле. Это может показаться нев ажным, одн ак о рассмотр им файл, сод ер жащий 200 строк, перв ые 195 из кот ор ых сос тоят из пят и симв ол ов (например, $4.98), а последние четыре – из 1 000 символов. В UNIX, с учет ом симв ол а пер енос а строк и, файл содерж ит примерно (195 * (5 + 1)) (Число симв ол ов в перв ых 5-символьных строках)
Новые команды перемещения 197Ком анд а Опис ан ие:go n + 2 + (4 * (1000 + 1)) (Число симв ол ов в 1000-символьных строк ах)n go или 5 200 символ ов. Реально 50% соо тветс тв ует поз иции на стро ке 96, тог да как 50%-е перемещ ен ие в Vim пом естит курсор на со тую строк у. Пер еход на n-й байт в буфере. В расч ет бер утс я все символ ы, вклю чая знак конца строки.Движение в визуальном режиме Vim позволяет пользов ателям виз уа льн о опр едел ять выд еление и про изв одить над ним ред актирование. Это пох ож е на то, что можн о увид еть в графич ес ких редакт ор ах, ког да пользоват ель выд ел яе т обл асти, щелк нув мышк ой в одном мест е и перетащ ив ее в друг ое. Виз уальный режим Vim доб авляет удобства в работе, отображая выд еленн ый кусок текста, над кот ор ым прои звод ятс я какие-либо действия, а такж е действие всех тех мощных ком анд Vim, которые прои зводят измен ен ия в визуальн о выделенном тексте. Это позвол ит прод елывать нам ного более изощ рен ную работу над выделенн ым текстом, неж ел и трад иц ионные ком анды «вырезать» и «встав ить» в мен ее прод вин утых ред акт орах. Выдел ять текст в Vim можн о теми же способам и, что и в друг их ред ак тор ах, то есть указ ыв ая обл асть мыш ью. Однак о кроме этого сущ еству ют пол езные ком анды перем ещения и нек от ор ые спец иальные команды для визуальног о реж им а, поз воляющие задать визуальное выделение. Нап ример, можно в обычном реж име ввести v, после чего запуст ится виз уа льн ый реж им. При нах ожд ении в нем любая ком анд а перем еще ния пер ед виг ае т курсор и подс веч ив ает текст по мере того, как курс ор переходит на новую позиц ию. Так, команда «на следующ ее слово» (w) в визуа льном реж име пер ем ест ит курсор на следующее слов о и подс ве тит выделенный текст. Друг ие пер ем ещен ия такж е расшир ят выд ел ен ный фрагм ент. В виз уа льн ом реж име Vim исп ольз уе т специальн ые ком анды, с пом о щью которых удобно расш ирять выделенный текст, выб ирая текстов ый объе кт, окружающ ий курс ор. Например, курсор мож ет нах одитьс я внут ри «слов а», одн оврем енн о внутр и «предлож ения» и, наконец, в «абзаце». С помощью ком анд, расш иряющ их подс веч енный текст до текстового объекта, Vim позволит увелич ить виз уа льное выд ел ен ие. Для виз уаль ного выд еления слова можн о использов ать aw (в визуальн ом реж им е). Vim предлагает различные команд ы пер ем ещ ения, исп ользующ ие пре имущ ества «виз уальн ог о режим а», котор ый подсвечивае т строк и и сим волы в буф ере, наглядн о показ ывая, как ой именно текст будет подвер гаться дальн ейшим действ ия м Vim. Виз уальн ые област и в буфере мож но подс вечив ать нескольким и способ ам и. В текстов ом режим е просто введ ите v для пер ехода в виз уальный режим и выхода из него. При
198 Глава 10. Главные улучшения Vim по сравнению с vi включенн ом виз уальном режиме при перем ещ ении курс ор а в буф ере поя вл яется и подсвеч ивае тс я выд ел ен ие. В gvim можно прос то выдел ять текст мыш ью. Это уст ан овит виз уальн ый флаг Vim. В табл. 10.2 пок аз аны нек от орые команд ы Vim для перем ещ ен ия в ви зуа льном реж им е. Табл иц а 10.2. Команд ы для перемещения в виз уальном режиме Vim Ком анд а Опис ание countaw, countaW Выдел яет count слов, включ ая, есл и присутс твует, проб ель countiw, countiW ный симв ол. Это немног о отл ич ае тся от iw (см. следующ ий пункт). Строчная w ищет слов а, разд еленные знаками пре as, is пин ан ия, а прописная W ищет слов а, раздел енн ые пробель ap, ip ными символ ам и. Выб ирае т count слов. Добавляе т слова без проб ельных сим вол ов. Строчн ая w ищет слова, огран иченные знак ам и пре пин ан ия, а проп исная W – проб ельн ыми символ ам и. Добавл яет предл ож ение или внутр енн ееa предлож ен ие. Доб авляе т абзац или внутренний абзац. a «Внутр енним» явл яе тс я сам текс тов ый объект без окруж ающ их его неп е чат аемых и т. п. симв олов. – Прим. нау ч. ред. Для получения подр обн ой инф ормации о текс товых объе ктах и их ис пользов ании в виз уальном реж име восп ользуйтесь команд ой справк и: :help text-objectsРасширенные регулярные выражения Из всех мод ифик аций vi Vim предоставляе т самый бог ат ый наб ор функ ций для раб от ы с регулярн ым и выражениями. Больш ая часть текс та опис ан ия в нижеприв ед енном списке взят а из док умент ации Vim: \| Указ ывае т на вар ианты (house\|home). \+ Соотв етств ие одном у или бол ее предш ествующ им регул ярным вы ражен ия м. \= Соответств ие одн ом у или ни одн ом у из предшес твующ их рег ул яр ных выр аж ен ий. \{n,m} Соо тв етс тв ие максим альном у колич еств у предш ес тв ующих регуляр ных выр ажений в диапазоне от n до m. n и m – это числ а от 0 до 32 000.
Расширенные регулярные выражения 199 Vim требует, чтобы обр атная кос ая черта стояла только перед лев ой фигурн ой скобкой, а не перед прав ой.\{n} Соо тв етс твие n предш еств ующим регулярн ым выр ажениям.\{n,} Соо тв етс твие как можн о большему кол ич еств у предшес твующих регул ярн ых выраж ен ий, но не меньше n.\{,m} Соо тветс тв ие как можн о больш ем у кол ич еств у предш ес твующих регулярн ых выр аж ений в диап азон е от 0 до m.\{} Соотв етс тв ие как можн о больш ему колич еству предш ес тв ующих рег ул ярных выражен ий, нач ин ая от нуля (аналогично *).\{-n,m} Соо тв етс тв ие мин им альному количеству предшествующих регуляр ных выр аж ений в диап аз оне от n до m.\{-n} Соотв етс твие n предш еств ующ им регул ярн ым выражен ия м.\{-n,} Соответс тв ие наим еньшему количес тву предшествующих рег уляр ных выр аж ен ий, но не меньше n.\{-,m} Соо тв етств ие наим еньшему колич еств у предш ес твующих рег уляр ных выр ажений в диап азон е от 0 до m.\i Соо тветс твие люб ому симв ол у идент иф икат ора сог ласно опц ии isi dent.\I Под обн а \i, но иск лючае т цифры.\k Соо тветствие любому ключ евом у слову согласно опц ии iskeyword.\K Подобн а \k, но исключ ае т цифры.\f Соотв етствие люб ому симв ол у имен и файла сог ласно опции isfname.\F Под обн а \f, но иск лючае т цифр ы.
200 Глава 10. Главные улучшения Vim по сравнению с vi \p Соответств ие любом у печат аемом у симв олу согласно опции isprint. \P Под обн а \p, но исключает цифр ы. \s Соо тветс тв ие любому проб ельн ому симв олу (то есть проб ел у или та бул яции). \S Соответс тв ует всему, что не явл яе тс я пробелом или табуляцие й. \b Симв ол заб оя (Backspace). \e Escape. \r Возврат кар етк и. \t Табуляция. \n Зар ез ервир ован а для буд ущег о исп ользования1. В конц е конц ов бу дет исп ользов атьс я для многострочн ых шаблонов. За подр обнос тя ми обращ айтесь к док умент ац ии по Vim. ~ Соотв етс твие последней использовавш ейс я строк е замены. \(…\) Обеспеч ив ает групп ировку для *, \+ и \=, а также делает дост упным подтекст в команд е зам ены (\1, \2 и т. д.). \1 Соо тв етс тв ует той же строк е, которая соотв етств овала первому под выраж ен ию в \( и \). Наприм ер, \([a-z]\).\1 соответс твуе т ata, ehe, tot и т. д. \2, \3 и проч ие мог ут исп ольз оваться для соответс тв ия второ му, третье му и пос лед ующ им подвыр ажен ия м. Опции isident, iskeyword, isfname и isprint определ яют печ атаем ые сим волы, содерж ащиеся в идентиф икатор ах, ключев ых слов ах и именах файл ов. Исп ользован ие этих опц ий прид ает рег ул ярн ым выраж ения м еще больш е гибкости. 1 В версии Vim 7.3 этот метас имв ол уже раб отоспос об ен. – Прим. науч. ред.
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: