izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

Upload: alexandr-casapciuc

Post on 07-Jul-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    1/512

    Арнольд Роббинс, Элберт Ханна и Линда Лэмб

    Работа с текстом на максимальнойскорости и мощност и

    Изучаем

    редакторы vi и Vim

    7 и з д а н и е

    7 н о в ы х г л а в о V i m

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    2/512

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    3/512

    Arnold Robbins, Elbert Hannahand Linda Lamb

    Learningthe vi and Vim Editors

    Seventh Edition

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    4/512

    Санкт-Петербург – Москва 2013

    Арнольд Роб бинс, Эл берт Хан наи Линда Лэмб

    Изучаем редакторы vi и VimСедьмое издание

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    5/512

    Арнольд Роббинс, Элберт Хан на и Линда Лэмб

    Изучаем редакторы 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-1ISBN 978-0-596-52983-3 (англ)

    © Издательство Символ-Плюс, 2013Authorized Russian translation of the English edition of Learning the vi and VimEditors, Seventh Edition ISBN 9780596529833 © 2008 O’Reilly Media, Inc. All rightsreserved. 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 печ. л.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    6/512

    Посвящается моей жене Мириамза любовь, терпение и поддержку.

    Арнольд Роббинс(шестое и седьмое издания)

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    7/512

    Оглавление

    Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    8/512

    Оглавление 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

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    9/512

    8 Оглавление

    Изменение размера окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213Буферы и их взаимодействие с окнами . . . . . . . . . . . . . . . . . . . . . . . . . .217Теги и окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221Редактирование с вкладками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222Закрытие и выход из окон . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223Итог . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224

    Глава12. Скрипты Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225Какой ваш любимый цвет? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225Динамическая конфигурация типов файловпри помощи скриптов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236Дополнительные соображения, касающиеся скриптов Vim . . . . . . . . .245Ресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250

    Глава

    13. Графический Vim (gvim) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251

    Общее введение в gvim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252Настройка полос прокрутки, меню и панелей инструментов . . . . . . . .257gvim в Microsoft Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269gvim в 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

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    10/512

    Оглавление 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

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    11/512

    Предисловие

    Редак тирование тек стов – од на из наи более востребован ных за дач в лю-бой ком пьютерной сис теме, а 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 и о том, ка-кие ко ман ды мож но при способить под ва ши ну ж ды. Впо следствиимож но вернуть ся к этим гла вам для бо лее деталь ного изу чения.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    12/512

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    13/512

    12 Предисловие

    Часть 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 . Квад рат ные скоб ки оз начают, что пе ременная яв ля етсянеобязатель ной. На при мер, в стро ке с син так сисом:

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    14/512

    Предисловие 13

    vi [ filename ]

    filename будет за менено на ре аль ное имя фай ла. Скоб ки го ворят о том,что ко ман да vi может вы зывать ся без ука зания име ни фай ла. Са мискоб ки вво дить не на до.Неко торые при меры пока зывают резуль тат ра боты ко манд, вво димыхв ко манд ной стро ке UNIX. В та ких при мерах то, что вы ре аль но вводи-те, на брано шриф том MonoCondensed Bold , что бы отличать это от от кли касистемы. На при мер:

    $ lsch01.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.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    15/512

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    16/512

    Предисловие 15

    Safari ® Books OnlineЕсли вы ви дите зна чок Safari ® Books Online на ва шей

    любимой тех нической кни ге, это оз начает, что кни гадоступ на онлайн по средством O’Reilly Network SafariBookshelf.

    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.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    17/512

    16 Предисловие

    • Новые гла вы, по свя щен ные каж дому из кло нов 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

    Dickey) и По ла Фок са (Paul Fox).

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    18/512

    Предисловие 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), Сти ву Кир кен дал лю (SteveKirkendall), Бра му Моленару (Bram Moolenaar), По лу Фок су (Paul Fox),Тому Ди ки (Tom Dickey) и Ке вину Бейт тнеру (Kevin Buettner), про ве-ряв шим кни гу и снаб дившим ме ня важ ными ма териа лами для глав с 8по 12 (но мера этих глав со ответствуют шестому из данию).Без элек тричества, вы рабатываемого энер гетической ком панией, ра бо-тать на ком пьютере невозмож но. Однако ко гда элек тричество есть в ро-зетке, вы пе рестаете думать о нем. Точ но так же и при на писании кни-ги – без ре дак тора у вас ни чего не получит ся, од нако ко гда он де лаетсвою работу, о нем лег ко за быть. Ги ги Эстабрук (Gigi Estabrook) из O’Reil-ly – это про сто жем чужи на. Ра ботать с ней од но удоволь ствие. Я вы сокоценю все, что она де ла ла и про должа ет делать для ме ня.И на конец, мно го бла годарностей ко ман де O’Reilly & Associates.

    Арнольд Роб бинс (Arnold Robbins)Ra’anana, Из раиль, июнь 1998

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    19/512

    18 Предисловие

    Благодарности для седьмого изданияИ снова Ар нольд бла годарит свою же ну Мириам за лю бовь и под держ-ку. Раз мер дол га в ви де тиши ны и мо роже ного продолжа ет рас ти. Кро-ме того, он бла годарен Дж.Д. «Илиа ду» Фрей зеру (J.D. «Illiad» Frazer)за пре крас ные ко мик сы User Friendly 1.Элберт хо тел бы по благодарить Ан ну, Кел ли, Боб би и своих ро дителейза про яв ленный ин терес к его ра боте в нелегкое вре мя. Их эн тузиазмбыл за разитель ным и бес ценным.Бла годарим Кей та Бостича (Keith Bostic) и Сти ва Кир кен далля (SteveKir kendall) за вклад в до работку глав об их ре дак торах. Том Ди ки (TomDickey) внес зна читель ный вклад в под готовку гла вы о vile и таблицы оп-ций ко ман ды set в приложении B. Брам Мо ленар (Bram Moolenaar), ав-тор Vim, в этот раз так же вы полнил про верку всей кни ги. Ро берт П.Дж. Дэй (Robert P.J. Day), Мэтт Фрай (Matt Frye), Юдит Май ерсон (JudithMyerson) и Сти вен Фиг гинс (Stephen Figgins) да ли цен ные за мечанияпо всему тек сту.Арнольд и Эл берт хо тят по благодарить Эн ди Ора (Andy Ora) и Иза бельКунк ле (Isabel Kunkle) за ре дак торскую ра боту, а так же всех со труд ни-ков O’Reilly Media.

    Арнольд Роб бинс (Arnold Robbins)Ноф Айа лон, Из раиль, 2008

    Элберт Хан на (Elbert Hannah)Кил дир, Ил линойс, США, 2008

    1 Если вы ни чего не слы ша ли о User Friendly , зай дите на http://www.user-friendly.org .

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    20/512

    IЧастьI. Базовый и продвинутый vi

    Часть I по может бы стро начать ра боту с vi , а так же по лучить уг лублен-ные на выки, по зволяю щие ис поль зовать vi более эф фек тивно. Матери-ал ох ватывает оригиналь ный ба зовый vi , а рас смат риваемые ко ман дымож но исполь зовать в лю бой его вер сии; по следующие гла вы посвя ще-ны по пуляр ным кло нам vi . Часть I со стоит из сле дующих глав:• Гла ва 1 «Тек стовый ре дак тор vi»• Гла ва 2 «Про стое редак тирование»• Гла ва 3 «Бы строе перемещение»• Гла ва 4 «За рам ка ми основ»• Гла ва 5 «Вве дение в ре дак тор ex»• Гла ва 6 «Гло баль ная за мена»• Гла ва 7 «Про двинутое редак тирование»• Гла ва 8 «Представляем кло ны vi»

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    21/512

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    22/512

    1Глава 1. Текстовый редактор vi

    UNIX 1 содержит мно же ство редак торов, ко торые мо гут обрабатыватьтек стовые фай лы, будь то фай лы, со держа щие дан ные, ис ход ный кодили обыч ный текст. Та ковыми яв ля ются, на при мер, стро ковые ре дак-торы ed и ex, ото бражаю щие на эк ране лишь од ну стро ку из фай ла. Кро-ме того, есть эк ран ные ре дак торы, на при мер vi и Emacs, у ко торых наэкране тер минала ото бража ется часть фай ла. Тек стовые ре дак торы, ос-

    нован ные на X Window System, так же ши роко доступ ны и ста новят сявсе популяр нее. Как в GNU Emacs, так и в его по томке XEmacs до пуска-ется ис поль зование не сколь ких X-окон; дву мя дру гими ин тереснымивариантами яв ля ются ре дак торы sam и Acme от Bell Labs. В Vim так жедоступен ин терфейс, ос нован ный на X.vi – это наи более полезный стан дарт ный тек стовый ре дак тор в ва шейсистеме. (vi – это сокра щение от « vi sual editor», то есть ви зуаль ный ре-дак тор; про износится как «ви-ай». Это хо рошо про ил люстрировано нарис. 1.1.) В от личие от Emacs, он дос тупен прак тически в не изменномвиде на лю бой современной сис теме UNIX, тем са мым яв ля ясь по доби-ем лин гва-фран ка 2 тек стового редак тирования. То же мож но ска зать

    1 В настоя щее вре мя тер мин «UNIX» вклю чает как ком мерческие сис темы,выведенные из ори гиналь ной ко довой базы UNIX, так и UNIX-по добныесис темы с доступ ным ис ходным ко дом. При мерами пер вых яв ля ются Sola-ris (хо тя про ект OpenSolaris при дал ему не ко торое «про межу точное» поло-же ние в та кой схе ме клас сифика ции. – При меч. на уч. ред.), AIX и HP-UX,а вторых пред став ля ют GNU/Linux и раз нообраз ные сис темы, ос нован ныена BSD. Ска зан ное в этой кни ге при менимо ко всем сис темам та кого ти па,если нет спе ци аль ной оговорки.

    2 GNU Emacs стал уни версаль ной вер сией Emacs. Един ственная про блемав том, что он не яв ля ется стан дарт ной ча стью боль шин ства ком мерческихUNIX-сис тем, по этому его сле дует най ти и ус тановить са мостоя тель но.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    23/512

    22 Глава 1. Текстовый редактор vi

    про ed и ex, однако поль зовать ся эк ран ными ре дак торами на много удоб-нее (на столь ко удоб нее, что стро ковые ре дак торы сей час прак тическине исполь зуются). В эк ран ном ре дак торе мож но пролистывать стра ни-

    цы, пе ремещать кур сор, уда лять стро ки, встав лять сим волы и мно гоедругое, при этом вы сра зу ви дите резуль тат сво их дей ствий. Эк ран ныередак торы ста ли популяр ными бла годаря воз мож ности вно сить из ме-нения при чте нии фай ла, как ес ли бы вы ре дак тировали рас печатан-ный эк земпляр, толь ко бы стрее.

    U S E R F R I E N D L Y b y I l l i a d

    C o p y r i g

    h t

    ( c ) 2 0 0 0 I l l i a

    d

    h t t p : /

    / w w w

    . u s e r f r i e n

    d l y

    . o r g

    /

    РЕДАКТОР"ШЕСТЬ" ?

    ПРИВЕТ! НА МОЕЙМАШИНЕ УСТАНОВЛЕНLINUX, НО Я НЕ ЗНАЮ,КАК ИСПОЛЬЗОВАТЬ

    РЕДАКТОР "ШЕСТЬ".

    ИЗВИНИТЕ, МЭМ,НО Я НЕ ПОНИМАЮ,О ЧЕМ ВЫ ГОВОРИТЕ.

    СЛУШАЙТЕ, ЭТОРЕДАКТОР"ШЕСТЬ" .ВАМ ИЗВЕСТНО,КАК ПИШЕТСЯШЕСТЬ РИМСКИМИЦИФРАМИ?

    ОХ,ВЫ ИМЕЕТЕВ ВИДУ"VI" ?

    ЭТО ТА САМАЯДАМА, КОТОРАЯБЕСПОКОИЛАСЬИЗ-ЗА ТОГО,ЧТО МЫИСПОЛЬЗУЕМСЕРВЕРС "ПАТЧАМИ".

    Рис. 1.1. Про из носите vi пра виль но

    Многим но вич кам vi ка жет ся не понят ным и гро мозд ким – вме сто тогочтобы исполь зовать ком бинации кла виш для об работки тек ста и по зво-лить вам пе чатать обыч ным образом, в этом ре дак торе каж дой кла ви-ше на зна чена своя ко ман да. Ко гда ожи дается вы зов ко ман ды на жа ти-ем кла виши, го ворят, что vi находится в ко манд ном ре жи ме (commandmode ). Для то го что бы начать пе чатать соб ственно текст на эк ране, не-обходимо перейти в спе циаль ный режим встав ки (insert mode ). Следу-ет от метить, что в vi огромное множе ство ко манд.Однако на чав освоение vi , вы обнаружи те, что он хо рошо про думан.

    Что бы заставить его вы полнить слож ную ра боту, по рой достаточно не-сколь ких на жа тий кла виш. По ме ре даль нейшего изу чения vi вы уз нае-те ком бинации кла виш, ко торые все боль ше и боль ше ра боты по ре дак-тированию будут передавать ком пьютеру, то есть ту да, где ей и ме сто.vi (как и лю бой тек стовый ре дак тор) не яв ля ется тек стовым про цессо-ром ти па «what you see is what you get» (что ви дишь, то и по лучишь).Если вам нуж но создать от форматирован ный до ку мент, то при детсяписать ко ды, по нимаемые дру гой про грам мой, ко торая и бу дет управ-лять ви дом печатаемой ко пии. Так, ес ли у не сколь ких аб зацев дол женбыть от ступ, по местите специаль ный код там, где на чинается и за кан-чивается от ступ. Ко ды фор матирования по зволят вам экс периментиро-вать или ме нять внеш ний вид пе чатаемых фай лов. Во мно гих слу чаяхони да ют вам на много боль ше кон троля над внеш ним ви дом доку мента,

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    24/512

    23

    неже ли тек стовый про цессор. UNIX под держи вает па кет фор матирова-ния troff 1. Популяр ными и ши рокодоступ ными аль тернативами яв ля-ются из датель ские сис темы TEX и LATEX2.

    (В действитель ности, vi поддержи вает простые ме ха низ мы фор матиро-вания. На при мер, он мо жет сам пе реносить сло ва при дос тиже нии кон-ца стро ки или де лать ав томатические от ступы у но вых строк. Кро метого, в Vim версии 7 есть ав томатическая про верка ор фогра фии. 3)Как и при лю бой дея тель ности, чем боль ше вы ре дак тируете, тем бы ст-рее освоите редак тор и тем вы ше будет ва ша про изводитель ность. А ко-гда вы изу чите все воз мож ности vi , то вряд ли за хотите вернуть сяк «более про стым» ре дак торам.В чем же за клю чается про цесс редак тирования? Во-пер вых, вам мо жет

    понадобиться вста вить (insert ) текст (на при мер, про пущен ное или но-вое слово либо пропущен ное пред ложе ние) или, на оборот, уда лить (dele-te) текст (от дельный сим вол или це лый аб зац). Так же долж на быть воз-мож ность менять (change ) буквы или сло ва (что бы испра вить опе чат киили из менить тер мин). Воз мож но, вам при дется пе реносить (move)текст из од ной час ти фай ла в дру гую. Кро ме того, по рой тре буется копи- ровать (copy) текст, что бы создать его дуб ликат в дру гой час ти фай ла.В отличие от мно гих тек стовых про цессоров, из началь ным ре жи мом,или ре жи мом «по умол чанию», в vi явля ется ко манд ный ре жим, в ко то-ром слож ные ин терак тивные прав ки мож но выполнять на жа тием всего

    лишь не сколь ких кла виш. (А для встав ки не форматирован ного тек стапросто вы полните любую из не сколь ких ко манд «встав ки», по сле чегоначинай те на бор.)В ка честве базовых ко манд ис поль зуются один или не сколь ко сим во-лов. На при мер:i

    встав ка (insert).cw

    изменить сло во (change word).

    1 troff предназна чен для ла зерных прин теров и на борных ма шин и яв ля ется«братом-близ нецом» nroff – паке та форматирования для строч ных прин те-ров и тер миналов. Оба понимают один и тот же на бор ко манд. Сле дуя обще-при ня тому в UNIX со гла шению, мы на зываем troff оба паке та. В на стоя-щее вре мя все, кто ис поль зует troff , ра ботают с его GNU-вер сией, groff . Заболее под робной ин форма цией обратитесь на сайт http://www.gnu.org/soft-ware/groff/ .

    2 Для по лучения ин формации о TEX и LATEX посетите сайты http://www.ctan.org и http://www.latex-project.org соответственно.

    3 Vim «из ко робки» так же мо жет де лать вы ключ ку тек ста по ле вому, пра во-му краю или по цен тру. – Прим. на уч. ред.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    25/512

    24 Глава 1. Текстовый редактор vi

    Исполь зуя бу квы в ка честве ко манд, вы смо же те редак тировать файлс огромной ско ростью. Вам необя затель но за поминать все со четанияфунк циональ ных кла виш или рас тя гивать паль цы, что бы на жать не-

    удобную ком бинацию кла виш. Вам ни когда не по требуется уби рать ру-ки с кла виатуры или пу тать ся в мно гоуровневых ме ню! Многие ко ман-ды мож но запомнить по пер вым двум бу квам их на зва ний, и поч ти всекоман ды сле дуют оди наковым пра вилам и свя заны друг с дру гом.Вообще го воря, ко ман ды vi :• За висят от ре гистра кла виши (про писная и строч ная бу квы соответ-

    ствуют раз ным ко ман дам: I – не то же, что i ).• Не отобража ются на эк ране, ко гда их вво дят.• Не тре буют на жа тия ENTER по сле ввода ко ман ды.

    Так же есть груп па ко манд, ко торые ото бража ются в ниж ней стро ке эк-рана. Они на чинаются со спе циаль ных сим волов. Ко сая чер та (/ ) и знаквопроса (?) запуска ют ко ман ды поиска; об этом рас ска зано в главе 3.Все ко ман ды ex начинаются с двое точия (:); они ис поль зуются в стро ко-вом редак торе ex. Этот ре дак тор доступен при ра боте в vi , посколь ку ex яв ля ется ба зовым ре дак тором, а vi – это про сто его «ви зуаль ный» ре-жим. Ко ман ды и по ня тия ex обсуж даются в главе 5, но уже в этой гла вевы уз наете о ко ман де ex для вы хода из фай ла без сохра нения.

    Краткая историческая справкаПеред погруже нием во все тон ко сти vi полезно понять, ка ки ми гла замион «смот рит» на ва ше ок руже ние. В ча стности, это по может ос мыслитька жу щие ся ту ман ными сообщения vi об ошибках, а так же ра зобрать-ся, на сколь ко кло ны vi развились по срав нению с ори гиналом.vi восходит к тем вре менам, ко гда поль зователи ра ботали за тер мина-ла ми, ко торые по следователь но подсоединя лись к цен траль ным ком-пьютерам. По все му ми ру были рас простра нены сот ни раз новидностейтерминалов. Каж дый из них вы полнял од ни и те же дей ствия (очи сткаэкрана, пе ремещение кур сора и т. п.), од нако ко ман ды для управ ленияими бы ли раз лич ными. Кро ме того, сис тема UNIX по зволя ет вы бирать,ка кие сим волы ис поль зовать для за боя, ге нерации сиг нала пре рыва-ния и дру гих ко манд, при ме няе мых на по следователь ных тер миналах,напри мер подавления и во зобновления вы вода. Та кие функ ции управ-ля лись (и до сих пор управ ля ются) ко ман дой stty .Первоначаль ная вер сия vi , созданная в Ка лифорний ском уни верситетев Берк ли (University of California, Berkeley, UCB), аб страгировала ин-формацию об управ лении тер миналом из ко да (ко торый бы ло слож но из-менить) в тек стовую базу дан ных воз мож ностей тер минала (ко торую из-

    менить бы ло лег ко), под держи ваемую библиотекой termcap (от term inalcap abilities). В на чале 80-х в System V бы ли вне дрены база дан ных, со-держа щая дво ичную ин формацию о тер миналах, и биб лиотека terminfo

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    26/512

    Открытие и закрытие файлов 25

    (от term inal info rmation). Эти две биб лиотеки бы ли в основном функ-циональ но эк вивалент ными. Что бы сообщить vi , ка ким имен но терми-налом вы поль зуе тесь, не обходимо было установить пе ременную ок ру-

    же ния TERM. Обычно это про делывалось фай лом за пуска обо лочки, та-ким как .profile или .login .В настоя щее вре мя все поль зуются эму ля торами тер миналов в гра фи-ческом ок руже нии (на при мер, xterm ). Как пра вило, сис тема са ма за бо-тит ся о за дании пе ременной TERM. (Ко нечно, мож но вызвать vi и в негра-фической кон соли ва шего ПК. Это мо жет очень силь но помочь при вос-становлении сис темы в од нополь зователь ском ре жи ме. Хо тя осталосьнемного людей, ко торые пред почли бы так ра ботать на ре гуляр ной ос-нове.) Ско рее всего, для по вседневного исполь зования вы вы берите гра-фическую вер сию vi , на при мер Vim или один из дру гих кло нов. В Mic-

    rosoft Windows или Mac OS X он, воз мож но, бу дет за пускать ся по умол-чанию. Од нако ко гда вы за пускае те vi (или ка кой-ни будь дру гой стольже вин таж ный эк ран ный ре дак тор) в эму ля торе терминала, он все ещеисполь зует TERM и дан ные termcap или terminfo , а так же обращает вни ма-ние на ус тановки stty . За пуск в эму ля торе терминала – та кой же про-стой спо соб изучить vi , как и лю бой другой.Другим важ ным для по нимания vi фак том яв ля ется то, что он раз ви-вал ся в то вре мя, ко гда сис темы UNIX бы ли на много менее ста бильны-ми, чем сей час. Поль зователи тех лет долж ны бы ли быть го товымик сбою в системе в любой момент, а в vi была пре дусмотрена под держ кавосстановления тех фай лов, ко торые ре дак тировались в мо мент сис тем-ного сбоя 1. Так что ес ли во вре мя изу чения vi вы уви дите описание раз-лич ных воз никаю щих про блем, вспом ните историю его раз вития.

    Открытие и закрытие файловvi мож но исполь зовать для ре дак тирования про изволь ного тек стовогофай ла. vi копирует редак тируемый файл в буфер (временно выделяе-мую область па мя ти), ото бража ет буфер (хо тя в каж дый мо мент вре ме-ни вы ви дите толь ко ту часть, ко торая поместилась на эк ране) и по зво-ля ет вам до бавлять, уда лять или ме нять текст. При со хра нении ре зуль-татов редак тирования vi копирует отредак тирован ный бу фер обрат нов постоян ный файл, за мещая ста рый файл с тем же име нем. Не за бы-вай те, что вы все гда ра ботаете с копией вашего фай ла, хра нимой в бу-фере, по этому все ва ши прав ки не из менят пер воначаль ный фай л, по кавы не сохра ните буфер. Сохра нение из менений час то на зывают «сохра-нением буфера» или про сто «сохра нением фай ла».

    1 К сча стью, си туа ции та кого рода слу чаются го раз до реже, хо тя сис темы всееще могут ава рий но завершить ра боту из-за внеш них при чин, на при мер из-за пре кра щения по дачи пи тания.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    27/512

    26 Глава 1. Текстовый редактор vi

    Открытие файлаvi – это ко ман да UNIX, ко торая вы зы ва ет редак тор vi для су ществую-щего или для со вершенно нового фай ла. Син так сис исполь зования этойкоман ды сле дующий:

    $ vi [ filename ]

    Скобки, по ка зан ные в этой стро ке, оз начают, что имя файла – не обяза-тель ный па раметр. Са ми скоб ки на бирать не на до. Знак $ – это при гла-шение ко манд ной стро ки UNIX. Ес ли не ука зать имя фай ла, то vi от-кро ет безымян ный бу фер. Имя мож но ука зать при со хра нении бу ферав файл. А по ка да вай те остановимся на ука зании име ни фай ла в ко-манд ной стро ке.

    Имя фай ла долж но быть уни каль ным в пре делах од ного ка талога. Ономожет со держать лю бой из 8-бит ных сим волов, кро ме зна ка ко сой чер-ты (/), за резервирован ного в ка честве раз делителя меж ду фай ла мии ка талогами в пу ти фай ла, и ASCII NUL – сим вола с ну левыми раз ря-дами. В име ни фай ла мож но даже ис поль зовать про белы; в этом слу чаеперед про белом сле дует поставить об рат ную ко сую чер ту (\). Тем не ме-нее на прак тике име на фай лов в основном содержат раз лич ные сочета-ния боль ших и ма лень ких букв, цифр, сим волов точ ки (.) и под черки ва-ния (_). Пом ните, что UNIX чув ствителен к ре гистру: строч ные бу квыотличаются от про писных. Так же не за бывай те на жи мать на ENTER,чтобы сообщить UNIX о том, что вы за кон чили ввод ко ман ды.Если вы хо тите создать в ка талоге новый файл, за дай те в ко ман де vi новое имя фай ла. На при мер, что бы в теку щем ка талоге открыть но выйфайл с име нем practice , вве дите:

    $ vi practice

    Посколь ку это но вый файл, бу фер будет пус тым, и на эк ране вы уви ди-те следующее:

    ~~

    ~"practice" [New file]

    Тиль ды (~) в левом столб це эк рана ука зывают, что в фай ле нет ни ка коготек ста, нет да же пус тых строк. Стро ка при гла шения (так же на зываемаястрокой со стоя ния) вни зу эк рана ото бража ет имя и со стоя ние фай ла.Если вы ука же те имя лю бого из су ществующих в ка талоге фай лов, тосможе те отредак тировать его. Пред положим, что су ществует файл с аб-солютным пу тем /home/john/letter . Если вы уже на ходитесь в ка талоге/home/john , исполь зуй те относитель ный путь к фай лу. На при мер

    $ vi letter

    выдаст на эк ран файл letter .

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    28/512

    Открытие и закрытие файлов 27

    Если вы на ходитесь в дру гом ка талоге, вве дите пол ный путь к фай лу,чтобы начать его ре дак тирование:

    $ vi /home/john/letter

    Проблемы при открытии файлов• При за пуске vi появ ля ет ся сообщение [open mode]

    Возмож но, не пра виль но распозна ется тип ва шего тер минала. Не-медлен но вый дите из се анса редак тирования, вве дя ко ман ду :q .Проверьте переменную ок руже ния $TERM. Ей нуж но при своить имявашего тер минала. Или мо же те попросить сис темного администра-тора дать вам пра виль ное зна чение ти па тер минала.

    • Вы ви дите од но из сле дующих со общений :Visual needs addressable cursor or upline capabilityBad termcap entryTermcap entry too longterminal : Unknown terminal typeBlock device requiredNot a typewriter

    Либо тип ва шего тер минала не опо знан, ли бо что-то не так с его за-писью в ва шем terminfo или termcap . Введите :q , что бы вый ти. Про-верьте переменную ок руже ния $TERM или по просите системного ад-министратора вы брать тип тер минала для ва шего ок руже ния.

    • По яв ля ет ся сообщение [new file] , ко гда вы счи тае те, что файл ужесущест вует .Проверьте, пра виль ный ли ре гистр сим волов вы ис поль зовали в име-ни фай ла (име на фай лов в UNIX чув ствитель ны к ре гистру). Ес ли всеверно, воз мож но, вы на ходитесь в дру гом ка талоге. Вве дите :q длявыхода. По сле это го проверьте, на ходитесь ли вы в том же ка талоге,что и файл (вве дите pwd в команд ной стро ке UNIX). Ес ли вы в нуж номкаталоге, вы ведите спи сок содержа щих ся в нем фай лов (с помощьюls ) и проверьте, нет ли файла под не много дру гим име нем.

    • Вы за пусти ли vi , одна ко по па ли в при гла шение с двое то чием (чтогово рит о том, что вы на ходитесь в ре жи ме стро ко вого редак ти ро-ва ния ex).Возмож но, вы вве ли пре ры ва ние пе ред тем, как vi успел от рисоватьэкран. Вой дите в vi , вве дя в при гла шении ex (:) коман ду vi .

    • По яв ля ет ся од но из сле дующих со общений :[Read only]File is read onlyPermission denied

    «Read only» оз начает, что вы мо же те толь ко про смат ривать файл; ва-ши из менения не мо гут быть со хра нены. Воз мож но, вы за пустили vi

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    29/512

    28 Глава 1. Текстовый редактор vi

    в режи ме просмотра (ли бо через view , ли бо как vi -R ) либо у вас нетправ на за пись это го фай ла. Обратитесь к раз делу «Про блемы присохра нении фай лов» на стр. 30.

    • По яв ля ет ся од но из сле дующих со общений :Bad file numberBlock special fileCharacter special fileDirectoryExecutableNon-ascii filefile non-ASCII

    Файл, ко торый вы хо тите отредак тировать, не яв ля ется обыч нымтек стовым фай лом. Вве дите :q! для вы хода и про верьте этот файл,напри мер ко ман дой file .

    • При вво де :q по одной из вы шена зван ных при чин по яв ля ет ся сооб-щение :

    No write since last change (:quit! overrides).

    Вы ненароком вне сли из менение в файл. Для вы хода из vi введите:q! . В этом слу чае из менения, сде лан ные во вре мя се анса, не бу дутсохра нены.

    Образ действияКак упо миналось ра нее, кон цепция те ку щего «ре жи ма» яв ля ется фун-даменталь ной в ра боте vi . Существуют два ре жи ма: режим встав кии ко манд ный ре жим . Сразу после за пуска ак тивен ко манд ный ре жим,в ко тором каж дое нажа тие кла виши вы зывает ко ман ду. В ре жи мевстав ки все, что вы пе чатаете, ста новится содержи мым ва шего фай ла.Иногда слу чай но мож но попасть в ре жим встав ки или, на оборот, не на-роком вый ти из не го. В лю бом случае то, что вы вве дете, ско рее всего,неже латель но отразит ся на со держи мом фай ла.

    На жми те ESC, что бы попасть в ко манд ный ре жим. Ес ли вы уже в нем,vi даст зву ковой сиг нал (beep) при на жа тии ESC. (По этому ко манд ныйрежим ино гда на зывают сиг наль ным ре жи мом.)Бла гополуч но перейдя в ко манд ный ре жим, вы мо же те испра вить лю-бые слу чай ные из менения, по сле чего вернуть ся к ре дак тированию ва-шего тек ста.

    Сохранение файла и выходВ любой момент мож но прекра тить ра боту с фай лом, со хра нить прав кии вернуть ся в при гла шение ко манд ной стро ки UNIX. Ко ман да vi , ко то-рая со хра няет из менения и пре кра щает работу редак тора, на зываетсяZZ. Обратите вни мание, что ZZ пишет ся про писными буквами.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    30/512

    Выход без сохранения правок 29

    Пред положим, вы соз дали файл под на зва нием practice и ввели в немшесть стро чек тек ста. Что бы сохра нить файл, сна чала на жа тием ESCпроверьте, что вы по пали в ко манд ный ре жим, по сле чего введите ZZ.

    Кла ви ши Ре зуль тат

    ZZ "practice" [New file] 6 lines, 320 characters

    Введена ко ман да за писи ZZ. Ваш файл со хра нит ся как обыч ныйфайл UNIX.

    ls ch01 ch02 practice

    Вывод спи ска фай лов в ка талоге пока жет, что вы соз дали но выйфайл practice .

    Резуль таты ре дак тирования мож но сохра нить и с по мощью ко манд ex .Что бы сохра нить (write) файл, не вы ходя из vi , вве дите :w. Если вы ни-чего не ме ня ли в фай ле, вый ти мож но с помощью ко ман ды :q , а вве дя:wq, вы со хра ните из менения и по ки нете vi . (:wq эквивалент но ZZ.) В гла-ве 5 мы под робно расска жем об ис поль зовании ко манд ex. Сейчас про-сто за помните эти не сколь ко ко манд для за писи и сохра нения фай лов.

    Выход без сохранения правокПри пер вом зна ком стве с vi , особенно если вы бес страш ный экс пери-ментатор, вам мо гут по надобиться две дру гие ко ман ды ex, что бы из ба-вить ся от соз данной ва ми пу таницы.Если вы за хотите отменить все сде лан ные за се анс из менения и вер-нуть ся к пер воначаль ному фай лу, то ко ман да

    :e! ENTER

    вернет вас к по следней сохра ненной вер сии фай ла, и вы смо же те на чатьвсе за ново.

    Если же вы хо тите отка зать ся от из менений и вый ти из vi , то ко ман да:q! ENTER

    осуществит вы ход из ре дак тируемого фай ла и воз врат в при гла шениеUNIX. Обе эти ко ман ды при ведут к по тере всех из менений, сде лан ныхв буфере со времени последнего сохра нения. Обыч но vi не позволя ет от-ка зать ся от из менений. Вос кли цатель ный знак, до бавленный к ко ман-дам :e или :q , за ставит vi отменить этот за прет и вы полнить опе рацию,несмотря на то, что бу фер был из менен.

  • 8/18/2019 izuchaem_redaktory_vi_i_vim_7-e_izd.pdf

    31/512

    30 Глава 1. Текстовый редактор vi

    Проблемы при сохранении файлов• Вы пы тае тесь за писать файл, но по лучае те од но из сле дующих со-

    общений :File existsFile file exists - use w![Existing file]File is read only

    Введите :w! file , что бы перезаписать су ществующий файл, или :wnewfile , что бы сохра нить те ку щую ре дак цию в но вом фай ле.

    • Вы хо ти те за писать файл, но у вас нет раз решения на за пись длянего. Вам вы дает ся «Permission denied.»Исполь зуй те ко ман ду :w newfile , что бы за писать со держи мое буферав новый файл. При на личии прав на за пись для это го ка талога высможе те с помощью ко ман ды mv заменить пер воначаль ную вер сиюновым фай лом. Ес ли у вас нет раз решения на за пись для это го ка та-лога, вве дите :w pathname/file , что бы за писать бу фер в том ка талоге,где у вас есть раз решение на за пись (на при мер, до маш ний ка талогили /tmp ).

    • Вы пы тае тесь за писать файл, но по лучае те со общение о том, чтофай ловая сис те ма пе репол нена.Введите :!rm junkfile , что бы уда лить (боль шой) не нуж ный файл, тем

    самым освободив не м�