Я прохожу курс "Операционная система Unix" и после тестов, вижу в отчете, что этот тест сдало еще 25 человек. Почему так мало, это ведь реально хороший и полезный урок. Здесь естьи теория и практичесские материалы. Сам курс написан хорошо, живым языком. И здесь я получил ответы на вопросы по Linux, которые боялся спросить. Наверное это из-за того, что в названии курса написано не Linux, а Unix и это многих отпугивает. |
Текстовые редакторы Vi и Vim
Vim
Можно рассматривать vi не как конкретную программу, а как концепцию редактирования текста. Более или менее vi -подобных текстовых редакторов существует несколько – так же, как есть несколько видов UNIX-подобных систем. Разные vi можно условно поделить на два множества: программы, повторяющие возможности vi, и программы, возможности которых выходят далеко за его пределы при сохранении максимума совместимости. К " vi -братьям" можно отнести программы, основанные на исходном тексте первого vi (в каждой операционной системе их слегка поправляли), и редактор nvi, предназначенный для замены vi после того, как в его исходных текстах обнаружились части, которые нельзя распространять свободно. В nvi, по заявлению авторов, повторены даже ошибки vi. Отличить один vi от другого проще всего с помощью команды :ver.
Совсем другую картину можно наблюдать в редакторах vim и elvis. Возможности vi, и без того немалые, расширены в этих редакторах далеко за пределы умопостижимости. Особенно постарались авторы vim ( vi im proved, усовершенствованный vi ). Одной документации с этим редактором приходит более трех с половиной мегабайтов. Как и emacs, vim следует рассматривать как среду редактирования текста, в которой поддерживается решение большинства задач, непосредственно связанных с редактированием. Осваивать vim стоит, как и всякую проективную систему, постепенно: для начала составить представление о его возможностях и способах использования, а затем не лениться искать в документации наиболее подходящий для решения каждой задачи инструмент. В конце концов у вас в руках окажется подмножество возможностей редактора, отвечающее вашему стилю работы с текстом и специфике задач.
Встроенная помощь
В лекции 6 мы пришли к мысли, что получение информации можно с удобством организовать теми же средствами, что и управление проективной системой. Поэтому разделы документации по vim удобнее всего читать при помощи самого vim: правила работы с документацией и ее заголовок доступны по команде :help. Документация vim – жестко гипертекстовая: любой объект vim имеет соответствующий ярлык в файле tags документации (их там без малого шесть с половиной тысяч). Значит, любое упоминание имени объекта в тексте служит одновременно контекстной ссылкой на описание этого объекта, так что команда ^] работает в файле помощи почти на каждом слове. Команда :help объект_vim работает так же, как :tag, только использует заранее определенный tags. Каждый параграф руководства vim снабжен ярлыком вида *название* ; не умножая сущностей, будем и мы оформлять таким способом ссылки на руководство.
Структура гипертекста достаточно приемлема: небольшая интерактивная обучающая среда для начинающих; руководство пользователя (учебник, "VIM User Manual"): три раздела по 6-12 глав, в лекции по 6-12 небольших параграфов; полная документация ("VIM Reference Manual"): девять разделов, при необходимости также поделенных на главы и параграфы, сводные таблицы-справочники. Не имея намерения пересказывать содержимое этой документации, мы ограничимся лишь описанием самых интересных, на наш взгляд, возможностей. Предполагается, что для изучения этих возможностей будет использована не наша книга, а сам vim. В частности, все отличия vim от ортодоксального vi кратко и внятно описаны в *vi-differences*.
Буферы и многооконность
В vi была возможность редактировать несколько файлов по очереди. Если при работе с одним файлом требовался режим autoindent, а при работе с другим – не требовался (например, текст на Си и текст на английском), приходилось после переключения с файла на файл всякий раз командовать то :se ai, то :se noai. В vim с каждым файлом связан буфер, в котором запоминаются настройки редактора ( *buffers* ). Многие настройки относятся по умолчанию к текущему буферу, но есть и возможность явно задать область их действия с помощью setlocal и setglobal. Локальная автоматическая метка '\' и другие автоматические метки, определенные в vim ( *mark-motions* ), локальные стили подсветки синтаксиса, форматирования и представления текста, о которых речь пойдет дальше.
Побочным эффектом введения буферов стала возможность показывать несколько файлов одновременно, не меняя соответствующих настроек. Экран терминала можно разбить на несколько прямоугольников и связать с каждым из них свой буфер. Переключаться между получившимися окнами можно с помощью ^W^W, а изменять их размер – с помощью ^W+, ^W- и ^W_. Именно в виде отдельного окна открывается страница помощи.
Типизация файлов и автокоманды
Различия в настройках для работы с разными файлами зависят прежде всего от типа файла. Для того чтобы при открытии файла на редактирование vim применял соответствующий набор настроек, пришлось реализовать распознавание типа файла ( *filetype* ), и одновременно механизм подключаемых модулей ( *filetype-plugins* ) – специальных файлов настройки vim, содержимое которых выполняется при открытии файла определенного типа. Если настройки, предлагаемые по умолчанию, не подходят, можно создать собственный файл настроек для определенного типа: например, подключаемый модуль для программ на Си будет лежать в ~/.vim/ftplugin/c.vim. Символ "~" означает здесь домашний каталог пользователя.
После того как vim научился распознавать типы файлов, многие полуавтоматические работы стали автоматическими. Целый раздел документации, *autocommand*, посвящен автоматическим командам. Автоматическая команда привязывается к типу файла и списку событий, с этим файлом происходящих. Например, команда :autocmd BufRead *.txt set expandtab привяжет к событию "чтение из файла" для файлов, чье имя заканчивается на .txt, включение настройки expandtab (превращать символы табуляции в последовательность пробелов).