И зу ч ае м р ед ак то р ы v i и V im R o b b in s, H an n ah & L am b
For nearly 30 years, vi has been the standard editor for Unix and Linux, and since 1986 this book has been the leading vi guide. But Unix isn’t what it was three decades ago, and neither is this book.
The seventh edition of Learning the vi and Vim Editors has been expanded to include detailed information on Vim, the leading vi clone.
Now the default editor on most Linux systems and the default version of vi on Mac OS X, Vim is also available for many other operating systems. This guide teaches text-editing basics as well as advanced tools, such as interactive macros and scripts to extend the editor—all in the easy-to-follow style that’s made this book a classic. You’ll learn how to:
• Move around vi with speed
• Go beyond vi basics, such as using buffers
• Use vi’s global search-and-replace function
• Customize vi and execute Unix commands
• Use Vim’s extended text objects and powerful regular expressions
• Perform multiwindow editing and write Vim scripts
• Make full use of the GUI version of Vim, called gvim
• Use Vim’s enhancements, such as syntax highlighting and extended tags
• Compare Vim with three other vi clones: nvi, elvis, and vile Learning vi or Vim is required knowledge if you use Linux or Unix, and in either case, this book is essential.
Unix
www.oreilly.com
Free online edition for 45 days with purchase of this book.
Details on last page.
y(7IA5J6*PMTSNN( +\!%!&!}!;
ISBN: 978-0-596-52983-3
US $34.99 CAN $34.99
Arnold Robbins, a professional programmer and technical author who’s worked with Unix systems since 1980, helped shape the POSIX standard for awk.
Elbert Hannah is a professional software engineer and software architect who wrote a full- screen editor in assembler in 1983 as his first professional assignment.
Linda Lamb, one of O’Reilly Media’s first editors, also worked for the company as a technical writer and marketing manager.
“ vi, like many of the classic utilities developed during the early years of Unix, has a reputation for being hard to navigate. Bram Moolenaar’s enhanced clone, Vim, has gone a long way toward removing reasons for such impressions.... It has become probably the most popular version of vi.”
—From the Preface
Арнольд Роббинс, Элберт Ханна и Линда Лэмб
Работа с текстом на максимальной скорости и мощност и
Изучаем
редакторы
vi и Vim
7 и зда ние
7 н овы х г лав о V
Learning the vi and Vim Editors
SEVENTH EDITIONim
Arnold Robbins, Elbert Hannah and Linda Lamb
Learning
the vi and Vim Editors
Seventh Edition
Санкт-Петербург – Москва 2013
Ар нольд Роб бинс, Эл берт Хан на и Линда Лэмб
Изучаем редакторы
vi и Vim
Седьмое издание
Изучаем редакторы vi и Vim, 7-е издание
Перевод И. Аввакумова
Главный редактор А. Галунов
Зав. редакцией Н. Макарова
Научный редактор В. Синицын
Редактор Ю. Бочина
Корректор С. Беляева
Верстка Д. Орлова
Роббинс А., Хан на Э., Лэмб Л.
Изучаем редакторы vi и Vim, 7-е издание. – Пер. с англ. – СПб.: Сим вол-Плюс, 2013. – 512 с., ил.
ISBN 978-5-93286-200-1
На протяжении 30 лет vi оставался стандартом для UNIX и Linux, а эта кни га была главным пособием по vi. Однако сейчас UNIX уже не тот, что был 30 лет назад, и книга тоже не стоит на месте. Седьмое издание существенно рас ши- рено и включает подробную информацию о Vim – самом популярном клоне vi.
Доступный стиль изложения сделал эту книгу классикой. Она незаменима, по- скольку знание vi или Vim – обязательное условие, если вы работаете в Linux или UNIX.
Вы познакомитесь как с основами, так и с продвинутыми средствами, та ки- ми как интерактивные макросы и скрипты, расширяющие возможности ре- дак тора. Вы научитесь быстро перемещаться в vi, использовать буферы, при- ме нять глобальную функцию поиска и замены vi, настраивать vi и запускать ко манды UNIX, использовать расширенные текстовые объекты Vim и мощные ре гулярные выражения, редактировать в нескольких окнах и писать скрипты в Vim, использовать все возможности графической версии Vim (gvim), приме- нять такие усовершенствования Vim, как подсветка синтаксиса и расширен- ные теги. Помимо Vim рассматриваются и другие клоны vi: nvi, elvis и vile.
ISBN 978-5-93286-200-1 ISBN 978-0-596-52983-3 (англ)
© Издательство Символ-Плюс, 2013
Authorized Russian translation of the English edition of Learning the vi and Vim Editors, Seventh Edition ISBN 9780596529833 © 2008 O’Reilly Media, Inc. All rights reserved. This trans lation is pub lished and sold by permission of O’Reilly Media, Inc., the owner of all rights to publish and sell the same.
Все права на данное издание защищены Законодательством РФ, включая право на полное или час- тичное воспроизведение в любой форме. Все товарные знаки или зарегистрированные товарные зна- ки, упоминаемые в настоящем издании, являются собственностью соответствующих фирм.
Издательство «Символ-Плюс». 199034, Санкт-Петербург, 16 линия, 7, тел. (812) 380-5007, www.symbol.ru. Лицензия ЛП N 000054 от 25.12.98.
Подписано в печать 12.12.2012. Формат 70×100 1/16. Печать офсетная. Объем 32 печ. л.
Посвящается моей жене Мириам за любовь, терпение и поддержку.
Арнольд Роббинс (шестое и седьмое издания)
Предисловие . . . .10
Часть I. Базовый и продвинутый vi . . . .19
Глава 1. Текстовый редактор vi . . . .21
Краткая историческая справка . . . .24
Открытие и закрытие файлов . . . .25
Выход без сохранения правок . . . .29
Глава 2. Простое редактирование . . . .32
Команды vi . . . .32
Перемещение курсора . . . .33
Простая правка текста . . . .37
Другие способы вставки текста . . . .50
Объединение двух строк с помощью J . . . .52
Обзор основных команд vi . . . .53
Глава 3. Быстрое перемещение . . . .55
Перемещение по экранам . . . .55
Перемещение по текстовым блокам . . . .59
Перемещение по результатам поиска . . . .60
Перемещение по номеру строки . . . .64
Обзор команд перемещения курсора в vi . . . .65
Глава 4. За рамками основ . . . .67
Другие сочетания команд . . . .67
Варианты запуска vi . . . .68
Использование буферов. . . .71
Отметка места . . . .73
Другие продвинутые команды редактирования . . . .74
Обзор команд vi для работы с буфером и метками . . . .74
Глава 5. Введение в редактор ex . . . .75
Команды ex . . . .76
Редактирование в ex . . . .78
Сохранение и выход . . . .84
Копирование одного файла в другой . . . .86
Редактирование нескольких файлов . . . .87
Оглавление 7
Глава 6. Глобальная замена . . . .91
Подтверждаем замены . . . .92
Замена, зависящая от контекста . . . .93
Поиск по шаблону . . . .94
Примеры использования шаблонов . . . .102
Финальный взгляд на шаблоны . . . .110
Глава 7. Продвинутое редактирование . . . .116
Настройка vi . . . .117
Вызов команд UNIX . . . .121
Сохранение команд . . . .124
Использование скриптов ex . . . .137
Редактирование исходного кода программы . . . .143
Глава 8. Представляем клоны vi . . . .149
Знакомьтесь: Даррелл, Даррелл и Даррелл . . . .149
Многооконное редактирование . . . .151
Графические интерфейсы . . . .152
Расширенные регулярные выражения . . . .152
Улучшенные теги . . . .154
Улучшенные возможности . . . .160
Помощь программисту . . . .165
Итоги: сравним редакторы . . . .167
Ничто не сравнится с оригиналом . . . .167
Перспектива . . . .168
Часть II. Vim . . . .169
Глава 9. Vim (vi Improved): введение . . . .171
Обзор . . . .172
Где взять Vim . . . .177
Как установить Vim в UNIX и GNU/Linux . . . .178
Установка Vim в окружении Windows . . . .183
Установка Vim в окружении Macintosh . . . .183
Другие операционные системы . . . .184
Помощь и упрощения для новичков . . . .185
Итог . . . .185
Глава 10. Главные улучшения Vim по сравнению с vi . . . .187
Встроенная справка . . . .187
Варианты запуска и инициализации . . . .189
Новые команды перемещения . . . .196
Расширенные регулярные выражения . . . .198
Сборка исполняемого файла под конкретные задачи . . . .201
Глава 11. Многооконность в Vim . . . .202
Инициализация многооконного сеанса . . . .203
Открытие окон . . . .206
Перемещение по окнам (движение курсора между окнами) . . . .209
Перемещение окон . . . .211
Изменение размера окна . . . .213
Буферы и их взаимодействие с окнами . . . .217
Теги и окна . . . .221
Редактирование с вкладками . . . .222
Закрытие и выход из окон . . . .223
Итог . . . .224
Глава 12. Скрипты Vim . . . .225
Какой ваш любимый цвет? . . . .225
Динамическая конфигурация типов файлов при помощи скриптов . . . .236
Дополнительные соображения, касающиеся скриптов Vim . . . .245
Ресурсы . . . .250
Глава 13. Графический Vim (gvim) . . . .251
Общее введение в gvim . . . .252
Настройка полос прокрутки, меню и панелей инструментов . . . .257
gvim в Microsoft Windows . . . .269
gvim в X Window System . . . .269
Опции GUI и обзор команд . . . .269
Глава 14. Улучшения Vim для программистов . . . .272
Свертка и контуры (режим контуров) . . . .273
Автоматические и умные отступы . . . .284
Ключевые слова и завершение слов по словарю . . . .293
Стеки тегов . . . .302
Подсветка синтаксиса . . . .305
Компиляция и поиск ошибок в Vim . . . .314
Заключительные соображения о написании программ . . . .319
Глава 15. Другие полезности в Vim . . . .320
Редактирование двоичных файлов . . . .320
Диграфы: не-ASCII символы . . . .322
Редактирование файлов из других мест . . . .324
Переход и смена каталогов . . . .326
Резервные копии в Vim . . . .328
Создание HTML из текста . . . .329
В чем разница? . . . .330
Отмена отмен . . . .332
На чем я остановился? . . . .333
На какой я строке? . . . .336
Сокращения команд и опций Vim . . . .338
Несколько мелочей (не обязательно для Vim) . . . .339
Другие ресурсы . . . .340
Часть III. Другие клоны vi . . . .341
Глава 16. nvi: новый vi . . . .343
Автор и история . . . .343
Оглавление 9
Важные аргументы командной строки . . . .344
Онлайн-справка и другая документация . . . .345
Инициализация . . . .346
Многооконное редактирование . . . .346
Графические интерфейсы . . . .348
Расширенные регулярные выражения . . . .348
Улучшения в редактировании . . . .349
Помощь программисту . . . .352
Интересные функции . . . .352
Исходный код и поддерживаемые операционные системы . . . .353
Глава 17. elvis . . . .354
Автор и история . . . .354
Важные аргументы командной строки . . . .355
Онлайн-справка и другая документация . . . .356
Инициализация . . . .356
Многооконное редактирование . . . .358
Графические интерфейсы . . . .360
Расширенные регулярные выражения . . . .366
Улучшенные возможности редактирования . . . .366
Помощь программисту . . . .371
Интересные особенности. . . .374
Будущее elvis . . . .380
Исходный код и другие операционные системы . . . .380
Глава 18. vile: vi Like Emacs (vi как Emacs) . . . .382
Авторы и история . . . .382
Важные аргументы командной строки . . . .383
Онлайн-справка и другая документация . . . .384
Инициализация . . . .386
Многооконное редактирование . . . .387
Графические интерфейсы . . . .389
Расширенные регулярные выражения . . . .398
Улучшенные возможности редактирования . . . .400
Помощь программисту . . . .407
Интересные особенности. . . .410
Исходный код и поддерживаемые операционные системы . . . .417
Часть IV. Приложения . . . .419
Глава A. Редакторы vi, ex и Vim . . . .421
Глава B. Установка опций . . . .458
Глава C. Возможные проблемы . . . .479
Глава D. vi и Интернет . . . .483
Алфавитный указатель . . . .495
Ре дак ти ро ва ние тек стов – од на из наи бо лее вос тре бо ван ных за дач в лю- бой ком пь ю тер ной сис те ме, а vi – один из наи бо лее по лез ных стан дарт- ных тек сто вых ре дак то ров. С по мо щью vi мож но соз да вать но вые тек- сто вые фай лы или ре дак ти ро вать имею щие ся.
Как и мно гие клас си че ские про грам мы, раз ра бо тан ные во вре ме на ста- нов ле ния UNIX, vi име ет ре пу та цию слож ной в управ ле нии про грам- мы. Соз да вая улуч шен ный клон vi под на зва ни ем Vim (от «vi improved»), Брам Мо ле нар (Bram Moolenaar) сде лал мно гое, что бы уст ра нить при- чи ны та ко го впе чат ле ния. Vim со дер жит мно го чис лен ные усо вер шен ст- во ва ния, ви зу аль ные под сказ ки и спра воч ную сис те му. Он стал, ве ро- ят но, са мой по пу ляр ной вер си ей vi, по это му в седь мом из да нии этой кни ги ему по свя ще но семь но вых глав в части II «Vim». Од на ко су ще ст- ву ет мно же ст во дру гих кло нов vi, три из ко то рых мы рас смот рим в час- ти III «Дру гие кло ны vi».
План книги
Кни га раз би та на 4 час ти и со сто ит из 18 глав и 4 при ло же ний.
Часть I «Ба зо вый и про дви ну тый vi» по мо жет бы ст ро на чать ра бо ту с vi, а так же по лу чить уг луб лен ные на вы ки, по зво ляю щие ис поль зо- вать его бо лее эф фек тив но.
В главе 1 «Тек сто вый ре дак тор vi» опи сы ва ют ся не ко то рые про стые ко- ман ды vi, с ко то рых мож но на чать зна ком ст во с про грам мой. По прак- ти куй тесь в них, по ка не ос вои те дос та точ но хо ро шо. Гла ва 2 «Про стое ре дак ти ро ва ние» по зна ко мит с не ко то ры ми эле мен тар ны ми ин ст ру- мен та ми ре дак ти ро ва ния.
Од на ко функ цио нальные возможности vi вы хо дят да ле ко за рам ки обыч ной об ра бот ки тек ста. Боль шое раз но об ра зие ко манд и оп ций по- зво лит со кра тить су ще ст вен ную часть ру тин ной ра бо ты. В главе 3 «Бы- строе пе ре ме ще ние» и главе 4 «За рам ка ми ос нов» уде ля ет ся вни ма ние бо лее про стым спо со бам вы пол не ния за дач. При пер вом чте нии вы по- лу чи те, по край ней ме ре, пред став ле ние о воз мож но стях vi и о том, ка- кие ко ман ды мож но при спо со бить под ва ши ну ж ды. Впо след ст вии мож но вер нуть ся к этим гла вам для бо лее де таль но го изу че ния.
Предисловие 11
Глава 5 «Вве де ние в ре дак тор ex», глава 6 «Гло баль ная за ме на» и гла- ва 7 «Про дви ну тое ре дак ти ро ва ние» по свя ще ны сред ст вам, по зво ляю- щим пе ре ло жить часть бре ме ни ре дак ти ро ва ния на пле чи ком пь ю те ра.
Вы по зна ко ми тесь со стро ко вым ре дак то ром ex, ле жа щим в ос но ве vi, и уз нае те, как из vi об ра щать ся к ко ман дам ex.
Глава 8 «Представляем кло ны vi» зна ко мит с рас ши ре ния ми, дос туп- ны ми в че ты рех кло нах vi. Здесь опи сы ва ют ся мно го окон ное ре дак ти- ро ва ние, гра фи че ские ин тер фей сы, рас ши рен ные ре гу ляр ные вы ра же- ния, функ ции, об лег чаю щие ре дак ти ро ва ние, и не ко то рые дру гие осо- бен но сти, тем са мым по ка зы вая план ос тав шей ся час ти кни ги. Кро ме то го, в этой гла ве есть ссыл ка на ис ход ный код пер во на чаль но го vi, ко- то рый мо жет быть лег ко ском пи ли ро ван на со вре мен ных UNIX-сис те- мах (вклю чая GNU/Linux).
Часть II «Vim» опи сы ва ет Vim – наи бо лее по пу ляр ный на се го дняш ний день клон vi.
В гла ве 9 «Vim (vi Improved): вве де ние» да ет ся об щая ин фор ма ция о Vim, в том чис ле, где взять би нар ные вер сии для наи бо лее по пу ляр ных опе- ра ци он ных сис тем и ка ко вы раз лич ные ва ри ан ты при ме не ния Vim.
В гла ве 10 «Глав ные улуч ше ния Vim по срав не нию с vi» опи сы ва ются наи бо лее су ще ст вен ные улуч ше ния в Vim по срав не нию с vi, та кие как встро ен ная справ ка, управ ле ние ини циа ли за ци ей, до пол ни тель ные ко- ман ды пе ре ме ще ния и рас ши рен ные ре гу ляр ные вы ра же ния.
Глава 11 «Мно го окон ность в Vim» уде ля ет вни ма ние мно го окон но му ре- дак ти ро ва нию, ко то рое, воз мож но, яв ля ет ся наи бо лее зна чи мым до- пол не ни ем к стан дарт но му vi. В гла ве рас смат ри ва ют ся все под роб но- сти соз да ния и ис поль зо ва ния не сколь ких окон.
В гла ве 12 «Скрип ты Vim» рас смат ри ва ет ся язык ко манд Vim, ко то рый по зво лит вам пи сать скрип ты, что бы при спо со бить Vim под ва ши ну ж- ды. Про сто та ис поль зо ва ния Vim «из ко роб ки» во мно гом объ яс ня ет ся ог ром ным ко ли че ст вом скрип тов, на пи сан ных дру ги ми поль зо ва те ля- ми и вклю чен ных в ди ст ри бу тив Vim.
В главе 13 «Гра фи че ский Vim (gvim)» рас смат ри ва ет ся Vim в со вре мен- ных гра фи че ских ок ру же ни ях, на при мер тех, ко то рые яв ля ют ся стан- дарт ны ми на со вре мен ных ком мер че ских UNIX-сис те мах, в GNU/Linux и дру гих UNIX-сис те мах, а так же в MS Windows.
Глава 14 «Улуч ше ния Vim для про грам ми стов» со сре до то че на на ис поль- зо ва нии Vim в ка че ст ве ре дак то ра для про грам ми стов, ос тав ляя за рам- ка ми его воз мож но сти обыч но го ре дак ти ро ва ния тек ста. Осо бен но цен- ны ми яв ля ют ся функ ции сво ра чи ва ния ко да и ре дак ти ро ва ния пла- нов-схем, ум ные от сту пы, под свет ка син так си са и ус ко ре ние цик ла
«ре дак ти ро ва ние-ком пи ля ция-от лад ка».
Глава 15 «Дру гие по лез ности в Vim» яв ля ет ся от час ти со би ра тель ной, так как в ней ох ва ты ва ет ся мно же ст во ин те рес ных во про сов, не во шед- ших в пре ды ду щие гла вы.
Часть III «Дру гие кло ны vi» по свя ще на трем дру гим по пу ляр ным кло- нам vi: nvi, elvis и vile.
Гла ва 16 «nvi: но вый vi», гла ва 17 «elvis» и гла ва 18 «vile: vi как Emacs»
ох ва ты ва ют раз лич ные кло ны vi: nvi, elvis и vile. В гла вах об су ж да ет- ся, как ис поль зо вать их рас ши ре ния, и опи сы ва ют ся осо бен но сти каж- до го из них.
Часть IV «При ло же ния» со дер жит по лез ные спра воч ные ма те риа лы.
В при ло же нии A «Ре дак то ры vi, ex и Vim» пе ре чис ля ют ся все ко ман ды vi и ex, от сор ти ро ван ные по функ ци ям. Кро ме то го, при во дит ся спи сок ко манд ex в ал фа вит ном по ряд ке, а так же не ко то рые ко ман ды vi и ex из Vim.
При ло же ние B «Установка опций» со дер жит спи сок оп ций ко ман ды set для vi и всех че ты рех его кло нов.
В при ло же нии C «Воз мож ные про бле мы» об су ж да ют ся воз мож ные про- бле мы при ра бо те с vi и его кло на ми, а так же спо со бы их уст ра не ния.
В при ло же нии D «vi и Ин тер нет» рас ска зы ва ет ся о мес те, ко то рое за ни- ма ет vi в бо лее ши ро кой куль ту ре UNIX и Ин тер не та.
Способ представления материала
На ша за да ча – дать хо ро ший об зор ма те риа ла, ко то рый по мо жет но- вич кам изу чить vi. Ос вое ние но во го ре дак то ра, осо бен но ре дак то ра со все ми воз мож но стя ми vi, мо жет по ка зать ся не пре одо ли мой за да чей.
Мы сде ла ли по пыт ку пред ста вить ос нов ные кон цеп ции и ко ман ды в ло- гич ной и удо бо чи тае мой фор ме.
По сле из ло же ния об щих ос нов vi, при ме ни мых вез де, мы пе ре хо дим к бо лее глу бо ко му рас смот ре нию Vim. Кар ти ну за вер ша ет об зор nvi, elvis и vile. По сле дую щие раз де лы опи сы ва ют ус лов ные обо зна че ния, ис поль зуе мые в этой кни ге.
Обсуждение команд vi
Здесь вы най де те крат кое опи са ние ос нов ной идеи, пред ше ст вую щее уз ко спе циа ли зи ро ван ным раз де лам. За тем при во дят ся при ме ры при- ме не ния этой ко ман ды в каж дом кон крет ном слу чае на ря ду с ее опи са- ни ем и син так си сом ис поль зо ва ния.
Условные обозначения
В опи са нии син так си са и в при ме рах дан ные для вво да на бра ны шриф- том MonoCondensed. То же ка са ет ся на зва ний ко манд, имен фай лов и оп- ций. Пе ре мен ные (то есть то, что не бу дет вво дить ся бу к валь но, а бу дет за ме нять ся при вво де ко ман ды на нуж ное зна че ние) на бра ны курсивным
MonoCondensed. Квад рат ные скоб ки оз на ча ют, что пе ре мен ная яв ля ет ся не обя за тель ной. На при мер, в стро ке с син так си сом:
Предисловие 13
vi [filename]
filename бу дет за ме не но на ре аль ное имя фай ла. Скоб ки го во рят о том, что ко ман да vi мо жет вы зы вать ся без ука за ния име ни фай ла. Са ми скоб ки вво дить не на до.
Не ко то рые при ме ры по ка зы ва ют ре зуль тат ра бо ты ко манд, вво ди мых в ко манд ной стро ке UNIX. В та ких при ме рах то, что вы ре аль но вво ди- те, на бра но шриф том MonoCondensed Bold, что бы от ли чать это от от кли ка сис те мы. На при мер:
$ ls
ch01.xml ch02.xml ch03.xml ch04.xml
В при ме рах ко да курсив обо зна ча ет ком мен та рий, ко то рый вво дить не на до. В ос нов ном тек сте кур си вом вы де ле ны спе ци аль ные тер ми ны ли- бо то, на что сле ду ет об ра тить вни ма ние.
Сле дуя об ще при ня тым со гла ше ни ям по до ку мен та ции UNIX, ссыл ки ви да printf(3) ука зы ва ют на элек трон ное спра воч ное ру ко во дство (ко то- рое мож но по лу чить по сред ст вом ко ман ды man). Этот при мер ссы ла ет ся на стра ни цу функ ции printf() в раз де ле 3 это го ру ко во дства (в боль- шин ст ве сис тем нуж но вве сти man 3 printf, что бы уви деть ее).
Клавиши
На про тя же нии всей кни ги вы встре ти те таб ли цы, со дер жа щие ко ман- ды vi и ре зуль та ты их ра бо ты:
Клавиши Результаты
ZZ "practice" (New file) 6 lines, 320 characters
Вве ди те ко ман ду вы хо да с со хра не ни ем – ZZ. Ваш файл бу дет со- хра нен как обыч ный файл UNIX.
В этом при ме ре ко ман да ZZ при ве де на в ле вом столб це. В рам ке спра ва со дер жит ся стро ка (или не сколь ко строк) эк ра на, по ка зы ваю щая ре- зуль тат вы пол не ния ко ман ды. По ло же ние кур со ра по ка за но ин вер си ей фо на и цве та сим во лов. В этом слу чае, по сколь ку ZZ со хра ня ет файл и вы хо дит из про грам мы, по сле за пи си фай ла вы уви ди те стро ку со- стоя ния; по ло же ние кур со ра не по ка за но. Под рам кой рас по ло же но объ яс не ние ко ман ды и ее ре зуль та та.
Ино гда к ко ман дам vi об ра ща ют ся при по мо щи од но вре мен но го на жа- тия кла ви ши CTRL с дру гой кла ви шей. В ос нов ном тек сте та кая ком би- на ция кла виш обыч но за пи сы ва ет ся так: CTRL-G. В при ме рах ко да в та ких слу ча ях пе ред на зва ни ем кла ви ши ста вят знак встав ки (^), на- при мер ^G оз на ча ет, что при на жа тии на G нуж но удер жи вать нажатой кла ви шу CTRL.
Возможные проблемы
В тех раз де лах, где у вас мо гут воз ник нуть затруд нения, со дер жит ся пе ре чень воз мож ных оши бок при вы пол не нии тех или иных за дач. Вы мо же те про смот реть эти ошиб ки и вер нуть ся к ним, ко гда столк не тесь с по доб ной про бле мой на прак ти ке. Что бы уп ро стить дос туп к пе реч ню воз мож ных оши бок, они при ве де ны так же в при ло же нии С.
Что нужно знать
Мы по ла га ем, что вы уже про чли «Learning the Unix Operating System»
(O’Reilly) или ка кое-ни будь дру гое вве де ние в UNIX. Вы долж ны знать, как:
• осу ще ст в лять вход в сис те му и вы ход из нее;
• вво дить ко ман ды UNIX;
• ме нять ка та ло ги;
• вы во дить спи сок фай лов в ка та ло ге;
• соз да вать, ко пи ро вать и уда лять фай лы.
Зна ком ст во с grep (global search program, про грам ма гло баль но го по ис- ка) и сим во ла ми под ста нов ки так же бу дет по лез ным.
Замечания и вопросы
Свои за ме ча ния и во про сы по этой кни ге от прав ляй те, по жа луй ста, из- да те лю:
O’Reilly Media, Inc.
1005 Gravenstein Highway North Sebastopol, CA 95472
800-998-9938 (in the United States or Canada) 707-829-0515 (international or local)
707-829-0104 (fax)
Тех ни че ские во про сы и за ме ча ния о кни ге при сы лай те на элек трон ный ад рес:
bookquestions@oreilly.com
Веб-сайт этой кни ги со дер жит при ме ры, спи сок оши бок и пла ны бу ду- щих из да ний. Стра ни ца рас по ла га ет ся по ад ре су:
http://www.oreilly.com/catalog/9780596529833
Для по лу че ния до пол ни тель ной ин фор ма ции о на ших кни гах, кон фе- рен ци ях, про грамм ных про дук тах, ин фор ма ци он ных цен трах и о се ти O’Reilly Network по се ти те наш веб-сайт:
http://www.oreilly.com
Предисловие 15
Safari
®Books Online
Ес ли вы ви ди те зна чок Safari® Books Online на ва шей лю би мой тех ни че ской кни ге, это оз на ча ет, что кни га дос туп на он лайн по сред ст вом O’Reilly Network Safari Bo ok shelf.
Safari пред ла га ет луч шее ре ше ние, не же ли элек трон ные кни ги. Это вир ту аль ная биб лио те ка, где вы мо же те лег ко най ти лю бую из ты сяч тех ни че ских книг, ко пи ро вать и встав лять фраг мен ты ко да, ска чи вать от дель ные гла вы и бы ст ро на хо дить от ве ты, ко гда вам нуж на са мая точ ная и ак ту аль ная ин фор ма ция. По про буй те это бес плат но на http://
safari.oreilly.com.
О предыдущих изданиях
В пя том из да нии кни ги под на зва ни ем «Learning the vi Editor» ко ман- ды ре дак то ра ex рас смат ри ва лись бо лее под роб но. В гла вах 5, 6 и 7 с по- мо щью боль шо го ко ли че ст ва при ме ров разъ яс ня лись слож ные функ- ции ex и vi в та ких те мах, как син так сис ре гу ляр ных вы ра же ний, гло- баль ные за ме ны, фай лы .exrc, со кра ще ния слов, ото бра же ние кла виш и скрип ты ре дак ти ро ва ния. Не сколь ко при ме ров бы ло взя то из жур на- ла «Unix World». Валь тер Зинц (Walter Zintz) на пи сал учеб ник о vi из двух час тей1, рас ска зы ваю щий о не сколь ких не из вест ных нам ве щах и со дер жа щий мно же ст во гра мот ных при ме ров, ко то рые ил лю ст ри ру- ют уже рас смот рен ные на ми функ ции. Рэй Шварц (Ray Swartz) в од ной из сво их за ме ток так же по де лил ся по лез ны ми со ве та ми2. Мы бла го дар- ны им за идеи, из ло жен ные в этих ма те риа лах.
Шес тое из да ние «Learning the vi Editor» со дер жа ло оз на ко ми тель ный об зор че ты рех дос туп ных «кло нов», то есть ре дак то ров со схо жи ми прин ци па ми ра бо ты. Мно гие из них со дер жа ли улуч ше ния по срав не- нию с vi. Сле до ва тель но, мож но го во рить о су ще ст во ва нии «се мей ст ва»
ре дак то ров vi. Из да ние в рав ной сте пе ни уде ля ло вни ма ние nvi, Vim, elvis и vile с це лью по зна ко мить чи та те ля с эти ми кло на ми.
Так же в шес том из да нии бы ло до бав ле но сле дую щее:
• В ос нов ной текст вне се ны мно го чис лен ные ис прав ле ния и до пол не- ния.
• В кон це каж дой гла вы при ве де на свод ка со от вет ст вую щих ко манд.
1 Две ста тьи Валь те ра Зин ца: «vi Tips for Power Users», Unix World, ап рель 1990 и «Using vi to Automate Complex Edits», Unix World, май 1990. (В при- ло же нии D ука за ны веб-ад ре са этих ста тей.)
2 «Answers to Unix», Unix World, ав густ 1990.
• Но вые гла вы, по свя щен ные каж до му из кло нов vi, функ ции и/или рас ши ре ния, об щие для двух или бо лее кло нов, и мно го окон ное ре- дак ти ро ва ние.
• Гла вы, рас ска зы ваю щие не мно го об ис то рии, це лях, уни каль ных осо бен но стях, спо со бах ус та нов ки каж до го из кло нов vi.
• Но вое при ло же ние, где го во рит ся о мес те vi в бо лее ши ро кой куль ту- ре UNIX и Ин тер не та.
Предисловие к седьмому изданию
Седь мое из да ние «Learning the vi and Vim Editors» со дер жит все луч- шее от шес то го. Вре мя по ка за ло, что имен но Vim яв ля ет ся са мым по пу- ляр ным кло ном vi, так что в этом из да нии об зор дан но го ре дак то ра су- ще ст вен но рас ши рен (ему да же от ве де но ме сто в на зва нии кни ги). Но что бы кни га ос та ва лась по лез ной для как мож но боль ше го чис ла чи та- те лей, мы ос та ви ли и об но ви ли ма те риа лы о nvi, elvis и vile.
Что нового
В этом из да нии по яви лись сле дую щие но вые ма те риа лы:
• Вне се ны ис прав ле ния в ос нов ном тек сте.
• Семь но вых глав, в ко то рых все сто рон не рас смат ри ва ет ся Vim.
• Ма те ри ал про со вре мен ное со стоя ние nvi, elvis и vile.
• Два при ло же ния из пре ды ду ще го из да ния, со дер жа щие справ ку по ex и vi, бы ли объ еди не ны в од но, ко то рое те перь со дер жит еще и до- пол ни тель ные ма те риа лы по Vim.
• Об нов ле ны дру гие при ло же ния.
Версии
При тес ти ро ва нии раз лич ных функ ций vi ис поль зо ва лись сле дую щие про грам мы:
• Вер сия vi для Solaris как наи бо лее близ кая к вер сии vi в UNIX.
• Вер сия про грам мы nvi 1.79 Кей та Бос ти ча (Keith Bostic).
• Вер сия про грам мы elvis 2.2 Сти ва Кир кен дал ля (Steve Kirkendall).
• Вер сия Vim 7.1 Бра ма Мо ле на ра (Bram Moolenaar).
• Вер сия vile 9.6 Ке ви на Бейт тне ра (Kevin Buettner), То ма Ди ки (Tom Di ckey) и По ла Фок са (Paul Fox).
Предисловие 17
Благодарности для шестого издания
В пер вую оче редь бла го да рю свою же ну Ми ри ам за за бо ту о де тях, по ка я ра бо тал над кни гой, в осо бен но сти во вре мя «вол шеб ных ча сов» не по- сред ст вен но пе ред обе дом. Я дол жен ей ог ром ное ко ли че ст во ти ши ны и мо ро же но го.
Пол Ман но (Paul Manno) из Тех ни че ско го кол лед жа ком пь ю тер ных тех но ло гий Джорд жии (Georgia Tech College of Computing) ока зал не- оце ни мую по мощь в ус ми ре нии мо их про грамм пе ча ти. Лен Мюл нер (Len Muellner) и Эрик Рэй (Erik Ray) из O’Reilly & Associates по мо га ли с про грам ма ми для SGML. Мак рос vi, на пи сан ный Джер ри Пи ком (Jer- ry Peek), ока зал ся бес цен ным.
Хо тя при под го тов ке но во го и ис прав ле ния ста ро го ма те риа ла ис поль- зо ва лись все упо мя ну тые про грам мы, боль шая часть ре дак ти ро ва ния осу ще ст в ля лась в Vim вер сий 4.5 и 5.0 под GNU/Linux (Red Hat 4.2).
Я бла го да рен Кей ту Бос ти чу (Keith Bostic), Сти ву Кир кен дал лю (Steve Kirkendall), Бра му Мо ле на ру (Bram Moolenaar), По лу Фок су (Paul Fox), То му Ди ки (Tom Dickey) и Ке ви ну Бейт тне ру (Kevin Buettner), про ве- ряв шим кни гу и снаб див шим ме ня важ ны ми ма те риа ла ми для глав с 8 по 12 (но ме ра этих глав со от вет ст ву ют шес то му из да нию).
Без элек три че ст ва, вы ра ба ты вае мо го энер ге ти че ской ком па ни ей, ра бо- тать на ком пь ю те ре не воз мож но. Од на ко ко гда элек три че ст во есть в ро- зет ке, вы пе ре стае те ду мать о нем. Точ но так же и при на пи са нии кни- ги – без ре дак то ра у вас ни че го не по лу чит ся, од на ко ко гда он де ла ет свою ра бо ту, о нем лег ко за быть. Ги ги Эс таб рук (Gigi Estabrook) из O’Reil- ly – это про сто жем чу жи на. Ра бо тать с ней од но удо воль ст вие. Я вы со ко це ню все, что она де ла ла и про дол жа ет де лать для ме ня.
И на ко нец, мно го бла го дар но стей ко ман де O’Reilly & Associates.
Ар нольд Роб бинс (Arnold Robbins) Ra’anana, Из ра иль, июнь 1998
Благодарности для седьмого издания
И сно ва Ар нольд бла го да рит свою же ну Ми ри ам за лю бовь и под держ- ку. Раз мер дол га в ви де ти ши ны и мо ро же но го про дол жа ет рас ти. Кро- ме то го, он бла го да рен Дж.Д. «Илиа ду» Фрей зе ру (J.D. «Illiad» Frazer) за пре крас ные ко мик сы User Friendly1.
Эл берт хо тел бы по бла го да рить Ан ну, Кел ли, Боб би и сво их ро ди те лей за про яв лен ный ин те рес к его ра бо те в не лег кое вре мя. Их эн ту зи азм был за ра зи тель ным и бес цен ным.
Бла го да рим Кей та Бос ти ча (Keith Bostic) и Сти ва Кир кен дал ля (Steve Kir kendall) за вклад в до ра бот ку глав об их ре дак то рах. Том Ди ки (Tom Dickey) внес зна чи тель ный вклад в под го тов ку гла вы о vile и таб ли цы оп- ций ко ман ды set в при ло же нии B. Брам Мо ле нар (Bram Moolenaar), ав- тор Vim, в этот раз так же вы пол нил про вер ку всей кни ги. Ро берт П.
Дж. Дэй (Robert P.J. Day), Мэтт Фрай (Matt Frye), Юдит Май ер сон (Judith Myerson) и Сти вен Фиг гинс (Stephen Figgins) да ли цен ные за ме ча ния по все му тек сту.
Ар нольд и Эл берт хо тят по бла го да рить Эн ди Ора (Andy Ora) и Иза бель Кунк ле (Isabel Kunkle) за ре дак тор скую ра бо ту, а так же всех со труд ни- ков O’Reilly Media.
Ар нольд Роб бинс (Arnold Robbins) Ноф Айа лон, Из ра иль, 2008 Эл берт Хан на (Elbert Hannah)
Кил дир, Ил ли нойс, США, 2008
1 Ес ли вы ни че го не слы ша ли о User Friendly, зай ди те на http://www.user
friendly.org.
I
Часть I.
Базовый и продвинутый vi
Часть I по мо жет бы ст ро на чать ра бо ту с vi, а так же по лу чить уг луб лен- ные на вы ки, по зво ляю щие ис поль зо вать vi бо лее эф фек тив но. Ма те ри- ал ох ва ты ва ет ори ги наль ный ба зо вый vi, а рас смат ри вае мые ко ман ды мож но ис поль зо вать в лю бой его вер сии; по сле дую щие гла вы по свя ще- ны по пу ляр ным кло нам vi. Часть I со сто ит из сле дую щих глав:
• Гла ва 1 «Тек сто вый ре дак тор vi»
• Гла ва 2 «Про стое ре дак ти ро ва ние»
• Гла ва 3 «Бы строе пе ре ме ще ние»
• Гла ва 4 «За рам ка ми ос нов»
• Гла ва 5 «Вве де ние в ре дак тор ex»
• Гла ва 6 «Гло баль ная за ме на»
• Гла ва 7 «Про дви ну тое ре дак ти ро ва ние»
• Гла ва 8 «Представляем кло ны vi»
1
Глава 1.
Текстовый редактор vi
UNIX1 со дер жит мно же ст во ре дак то ров, ко то рые мо гут об ра ба ты вать тек сто вые фай лы, будь то фай лы, со дер жа щие дан ные, ис ход ный код или обыч ный текст. Та ко вы ми яв ля ют ся, на при мер, стро ко вые ре дак- то ры ed и ex, ото бра жаю щие на эк ра не лишь од ну стро ку из фай ла. Кро- ме то го, есть эк ран ные ре дак то ры, на при мер vi и Emacs, у ко то рых на эк ра не тер ми на ла ото бра жа ет ся часть фай ла. Тек сто вые ре дак то ры, ос- но ван ные на X Window System, так же ши ро ко дос туп ны и ста но вят ся все по пу ляр нее. Как в GNU Emacs, так и в его по том ке XEmacs до пус ка- ет ся ис поль зо ва ние не сколь ких X-окон; дву мя дру ги ми ин те рес ны ми ва ри ан та ми яв ля ют ся ре дак то ры sam и Acme от Bell Labs. В Vim так же дос ту пен ин тер фейс, ос но ван ный на X.
vi – это наи бо лее по лез ный стан дарт ный тек сто вый ре дак тор в ва шей сис те ме. (vi – это со кра ще ние от «visual editor», то есть ви зу аль ный ре- дак тор; про из но сит ся как «ви-ай». Это хо ро шо про ил лю ст ри ро ва но на рис. 1.1.) В от ли чие от Emacs, он дос ту пен прак ти че ски в не из мен ном ви де на лю бой со вре мен ной сис те ме UNIX, тем са мым яв ля ясь по до би- ем лин гвафран ка2 тек сто во го ре дак ти ро ва ния. То же мож но ска зать
1 В на стоя щее вре мя тер мин «UNIX» вклю ча ет как ком мер че ские сис те мы, вы ве ден ные из ори ги наль ной ко до вой ба зы UNIX, так и UNIX-по доб ные сис те мы с дос туп ным ис ход ным ко дом. При ме ра ми пер вых яв ля ют ся So la- ris (хо тя про ект OpenSolaris при дал ему не ко то рое «про ме жу точ ное» по ло- же ние в та кой схе ме клас си фи ка ции. – При меч. на уч. ред.), AIX и HP-UX, а вто рых пред став ля ют GNU/Linux и раз но об раз ные сис те мы, ос но ван ные на BSD. Ска зан ное в этой кни ге при ме ни мо ко всем сис те мам та ко го ти па, ес ли нет спе ци аль ной ого вор ки.
2 GNU Emacs стал уни вер саль ной вер си ей Emacs. Един ст вен ная про бле ма в том, что он не яв ля ет ся стан дарт ной ча стью боль шин ст ва ком мер че ских UNIX-сис тем, по это му его сле ду ет най ти и ус та но вить са мо стоя тель но.
про ed и ex, од на ко поль зо вать ся эк ран ны ми ре дак то ра ми на мно го удоб- нее (на столь ко удоб нее, что стро ко вые ре дак то ры сей час прак ти че ски не ис поль зу ют ся). В эк ран ном ре дак то ре мож но про лис ты вать стра ни- цы, пе ре ме щать кур сор, уда лять стро ки, встав лять сим во лы и мно гое дру гое, при этом вы сра зу ви ди те ре зуль тат сво их дей ст вий. Эк ран ные ре дак то ры ста ли по пу ляр ны ми бла го да ря воз мож но сти вно сить из ме- не ния при чте нии фай ла, как ес ли бы вы ре дак ти ро ва ли рас пе ча тан- ный эк зем п ляр, толь ко бы ст рее.
U S E R F R I E N D L Y b y I l l i a d
Copyright (c) 2000 Illiad http://www.userfriendly.org/
РЕДАКТОР "ШЕСТЬ"?
ПРИВЕТ! НА МОЕЙ МАШИНЕ УСТАНОВЛЕН LINUX, НО Я НЕ ЗНАЮ, КАК ИСПОЛЬЗОВАТЬ РЕДАКТОР "ШЕСТЬ".
ИЗВИНИТЕ, МЭМ, НО Я НЕ ПОНИМАЮ, О ЧЕМ ВЫ ГОВОРИТЕ.
СЛУШАЙТЕ, ЭТО РЕДАКТОР "ШЕСТЬ".
ВАМ ИЗВЕСТНО, КАК ПИШЕТСЯ ШЕСТЬ РИМСКИМИ ЦИФРАМИ?
ОХ, ВЫ ИМЕЕТЕ В ВИДУ "VI"?
ЭТО ТА САМАЯ ДАМА, КОТОРАЯ БЕСПОКОИЛАСЬ ИЗ-ЗА ТОГО, ЧТО МЫ ИСПОЛЬЗУЕМ СЕРВЕР С "ПАТЧАМИ".
Рис. 1.1. Про из но си те vi пра виль но
Мно гим но вич кам vi ка жет ся не по нят ным и гро мозд ким – вме сто то го что бы ис поль зо вать ком би на ции кла виш для об ра бот ки тек ста и по зво- лить вам пе ча тать обыч ным об ра зом, в этом ре дак то ре каж дой кла ви- ше на зна че на своя ко ман да. Ко гда ожи да ет ся вы зов ко ман ды на жа ти- ем кла ви ши, го во рят, что vi на хо дит ся в ко манд ном ре жи ме (command mode). Для то го что бы на чать пе ча тать соб ст вен но текст на эк ра не, не- об хо ди мо пе рей ти в спе ци аль ный ре жим встав ки (insert mode). Сле ду- ет от ме тить, что в vi ог ром ное мно же ст во ко манд.
Од на ко на чав ос вое ние vi, вы об на ру жи те, что он хо ро шо про ду ман.
Что бы за ста вить его вы пол нить слож ную ра бо ту, по рой дос та точ но не- сколь ких на жа тий кла виш. По ме ре даль ней ше го изу че ния vi вы уз нае- те ком би на ции кла виш, ко то рые все боль ше и боль ше ра бо ты по ре дак- ти ро ва нию бу дут пе ре да вать ком пь ю те ру, то есть ту да, где ей и ме сто.
vi (как и лю бой тек сто вый ре дак тор) не яв ля ет ся тек сто вым про цес со- ром ти па «what you see is what you get» (что ви дишь, то и по лу чишь).
Ес ли вам нуж но соз дать от фор ма ти ро ван ный до ку мент, то при дет ся пи сать ко ды, по ни мае мые дру гой про грам мой, ко то рая и бу дет управ- лять ви дом пе ча тае мой ко пии. Так, ес ли у не сколь ких аб за цев дол жен быть от ступ, по мес ти те спе ци аль ный код там, где на чи на ет ся и за кан- чи ва ет ся от ступ. Ко ды фор ма ти ро ва ния по зво лят вам экс пе ри мен ти ро- вать или ме нять внеш ний вид пе ча тае мых фай лов. Во мно гих слу ча ях они да ют вам на мно го боль ше кон тро ля над внеш ним ви дом до ку мен та,
23
не же ли тек сто вый про цес сор. UNIX под дер жи ва ет па кет фор ма ти ро ва- ния troff1. По пу ляр ны ми и ши ро ко дос туп ны ми аль тер на ти ва ми яв ля- ют ся из да тель ские сис те мы TEX и LATEX2.
(В дей ст ви тель но сти, vi под дер жи ва ет про стые ме ха низ мы фор ма ти ро- ва ния. На при мер, он мо жет сам пе ре но сить сло ва при дос ти же нии кон- ца стро ки или де лать ав то ма ти че ские от сту пы у но вых строк. Кро ме то го, в Vim версии 7 есть ав то ма ти че ская про вер ка ор фо гра фии.3) Как и при лю бой дея тель но сти, чем боль ше вы ре дак ти руе те, тем бы ст- рее ос вои те ре дак тор и тем вы ше бу дет ва ша про из во ди тель ность. А ко- гда вы изу чи те все воз мож но сти vi, то вряд ли за хо ти те вер нуть ся к «бо лее про стым» ре дак то рам.
В чем же за клю ча ет ся про цесс ре дак ти ро ва ния? Во-пер вых, вам мо жет по на до бить ся вста вить (insert) текст (на при мер, про пу щен ное или но- вое сло во ли бо про пу щен ное пред ло же ние) или, на обо рот, уда лить (de le
te) текст (от дель ный сим вол или це лый аб зац). Так же долж на быть воз- мож ность ме нять (change) бу к вы или сло ва (что бы ис пра вить опе чат ки или из ме нить тер мин). Воз мож но, вам при дет ся пе ре но сить (mo ve) текст из од ной час ти фай ла в дру гую. Кро ме то го, по рой тре бу ет ся ко пи
ро вать (copy) текст, что бы соз дать его дуб ли кат в дру гой час ти фай ла.
В от ли чие от мно гих тек сто вых про цес со ров, из на чаль ным ре жи мом, или ре жи мом «по умол ча нию», в vi яв ля ет ся ко манд ный ре жим, в ко то- ром слож ные ин те рак тив ные прав ки мож но вы пол нять на жа ти ем все го лишь не сколь ких кла виш. (А для встав ки не фор ма ти ро ван но го тек ста про сто вы пол ни те лю бую из не сколь ких ко манд «встав ки», по сле че го на чи най те на бор.)
В ка че ст ве ба зо вых ко манд ис поль зу ют ся один или не сколь ко сим во- лов. На при мер:
i
встав ка (insert).
cw
из ме нить сло во (change word).
1 troff пред на зна чен для ла зер ных прин те ров и на бор ных ма шин и яв ля ет ся
«бра том-близ не цом» nroff – па ке та фор ма ти ро ва ния для строч ных прин те- ров и тер ми на лов. Оба по ни ма ют один и тот же на бор ко манд. Сле дуя об ще- при ня то му в UNIX со гла ше нию, мы на зы ва ем troff оба па ке та. В на стоя- щее вре мя все, кто ис поль зу ет troff, ра бо та ют с его GNU-вер си ей, groff. За бо лее под роб ной ин фор ма ци ей об ра ти тесь на сайт http://www.gnu.org/soft
wa re/groff/.
2 Для по лу че ния ин фор ма ции о TEX и LATEX по се ти те сай ты http://www.ctan.org и http://www.latexproject.org со от вет ст вен но.
3 Vim «из ко роб ки» так же мо жет де лать вы ключ ку тек ста по ле во му, пра во- му краю или по цен тру. – Прим. на уч. ред.