Изучаем редакторы vi и Vim, 7-е издание

Изучаем редакторы vi и Vim, 7-е издание
Автор: Арнольд Роббинс, Элберт Хана, Линда Лэмб
Год: 2013
ISBN: 978-5-93286-200-1
Страниц: 513
Язык: Русский
Формат: PDF
Размер: 10 Мб

Download

На протяжении 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.

+

В этом издании появились следующие новые материалы:

  • Внесены исправления в основном тексте.
  • Семь новых глав, в которых всесторонне рассматривается Vim.
  • Материал про современное состояние nvi, elvis и vile.
  • Два приложения из предыдущего издания, содержащие справку по ех и 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), Тома Дики (Тот Dickey) и Пола Фокса (Paul Fox).

Текстовый редактор vi

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

vi – это наиболее полезный стандартный текстовый редактор в вашей системе, (vi – это сокращение от «visual editor», то есть визуальный редактор; произносится как «ви-ай». Это хорошо проиллюстрировано на рис. 1.1.) В отличие от Emacs, он доступен практически в неизменном виде на любой современной системе UNIX, тем самым являясь подобием лингва-франка текстового редактирования. То же можно сказать про ed и ex, однако пользоваться экранными редакторами намного удобнее (настолько удобнее, что строковые редакторы сейчас практически не используются). В экранном редакторе можно пролистывать страницы, перемещать курсор, удалять строки, вставлять символы и многое другое, при этом вы сразу видите результат своих действий. Экранные редакторы стали популярными благодаря возможности вносить изменения при чтении файла, как если бы вы редактировали распечатанный экземпляр, только быстрее.

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

Однако начав освоение vi, вы обнаружите, что он хорошо продуман. Чтобы заставить его выполнить сложную работу, порой достаточно нескольких нажатий клавиш. По мере дальнейшего изучения vi вы узнаете комбинации клавиш, которые все больше и больше работы по редактированию будут передавать компьютеру, то есть туда, где ей и место.

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

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

Как и при любой деятельности, чем больше вы редактируете, тем быстрее освоите редактор и тем выше будет ваша производительность. Л когда вы изучите все возможности vi, то вряд ли захотите вернуться к «более простым» редакторам.

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

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

В качестве базовых команд используются один или несколько символов. Например:

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

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

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

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

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

Вообще говоря, команды vi:

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

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

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

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

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

Простое редактирование

Эта глава, построенная в виде руководства, познакомит вас с редактированием в vi. Вы узнаете, как перемещать курсор и делать простые правки. Если вы еще ни разу не работали в vi, то лучше прочтите эту главу целиком.

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

Нельзя освоить vi, просто запомнив все команды. Начните с изучения простых команд, о которых рассказывается в этой главе, и обращайте внимание на общие шаблоны их использования.

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

В этой главе рассказывается о том, как:

  • Перемещать курсор
  • Добавлять и менять текст
  • Удалять, перемещать и копировать текст
  • Переходить в режим вставки разными способами

Команды vi

В vi есть два режима: командный и режим вставки. При входе в файл вы оказываетесь в командном режиме, и редактор ждет ввода команд. Они позволяют перемещаться на любое место в файле, производить правки или переходить в режим вставки, чтобы добавить новый текст.

Команды также нужны для выхода из файла (с сохранением изменений или без), чтобы вернуться в командную строку UNIX.

Оба режима работы можно рассматривать как две разные «клавиатуры». В режиме вставки ваша клавиатура работает подобно печатной машинке. В командном режиме каждая клавиша имеет свое значение или вызывает какую-либо инструкцию.

Есть несколько способов сообщить vi о переходе в режим вставки. Самый простой из них – нажать клавишу i. Сама буква i на экране не появится, но после ее нажатия все, что вы набираете, возникнет на экране и будет передаваться в буфер. При этом курсор отмечает место для вставки нового текста. Для выхода из режима вставки нажмите ESC. Это действие переместит курсор на один символ назад (он встанет на последний введенный вами символ) и вернет vi в командный режим.

Например, вы открыли новый файл и хотите вставить туда слово «introduction». Если ввести iintroduction, то на экране появится:

introduction

При открытии нового файла vi начинает работу в командном режиме и понимает первую клавишу (i) как команду вставки. После этого все введенные символы рассматриваются им как текст, пока вы не нажмете ESC. Чтобы исправить ошибку в режиме вставки, вернитесь назад с помощью клавиши BACKSPACE и наберите символ заново. В зависимости от типа используемого вами терминала BACKSPACE может либо удалять набранный текст с экрана, либо перемещать курсор поверх него. В любом случае замещаемый текст будет удален. Обратите внимание, что вы не сможете использовать клавишу BACKSPACE дальше того места, где включили режим вставки. (Если в Vim выключить совместимость с vi, то там возможно перемещение курсора дальше места начала режима вставки.)

В vi есть опция, позволяющая определить правый отступ и выполняющая возврат каретки всякий раз при его достижении. Пока же во время вставки текста для перехода на новую строку используйте ENTER.