Emacs для начинающих

       

Vim: уже шесть!



Автор: Владимир Попов, popov_inm@yahoo.com
Опубликовано: 06.02.2002
Оригинал: http://www.softerra.ru/freeos/15764/

Итак, версия 6 популярного редактора vim вот уже три месяца в разряде стабильных и входит, практически, во все последние дистрибутивы Linux. На настоящий момент количество пользователей vim во всем мире приблизительно оценивается, как превышающее миллион. Vim используется программистами таких компаний как Sun, HP, MicroSoft.
Напомним, что встроенный язык программирования (помимо фактически стандартного для любого «приличного» редактора языка макрокоманд) и практически неограниченные возможности настройки с момента рождения сулили vim долгое и успешное развитие. Зачем же тогда эти новые версии, если редактор как инструмент конечного пользователя, может эволюционировать практически исключительно усилиями его сторонников, склонных в той или иной мере к программированию? И эволюционирует: количество расширений и советов (plugin's & tip's), предложенных пользователями через , измеряется сотнями, а количество «вовлеченных в разработку» все растет. Но и Bram Moolenaar, представьте, никак не «остепенится» (быть может, идеи, предложенные пользователями, оказываются слишком интересными). Налицо факт: автор «сотоварищи» окончательно «перепутались», и если в том, что касается кода самого редактора, последнее слово все-таки за Bram Moolenaar, то расширения vim (собственно, все содержимое архивов runtime) – создаются многими и многими участниками проекта. Время от времени Bram Moolenaar решает, что количество изменений и дополнений предыдущей версии превысили некоторый предел, и – появляется новая версия. Что же нового появилось в 6-й? Данный материал – попытка ответить на этот вопрос.

Одним из самых отмеченных vim-сообществом событий, происшедших между выходами 5-й и 6-й версий, было, издание в апреле 2001 года книги Steve Oualline. Это первая книга, посвященная исключительно vim – впечатляющий фолиант объемом свыше шестисот страниц, говорят, очень живо написанный. Так или иначе, то, что сотрудничество со Steve Oualline повлекло за собой переработку документации vim – очень отрадный факт. Предыдущие версии содержали, фактически, только «reference guide» – описание всех доступных при редактировании функций. Описание полное, но, если можно так сказать, «недружественное». Мало того, что список этих функций у vim и так чрезвычайно обширен, эти функции к тому же дублируют друг друга в разных режимах, наследуют «предков», ориентированных на алфавитно-цифровые терминалы, а иногда и просто избыточны для многих категорий пользователей. Теперь представьте себе эти более чем тысячу клавиатурных последовательностей, разбитых на режимы и отсортированных по алфавиту – ужас! Но теперь это – в прошлом. Не в том смысле, что «изъят» reference guide, а в том, что теперь документация содержит и «user manual» – 46 сравнительно небольших глав, каждая из которых посвящена одной из сторон работы редактора. Получить помощь в vim и раньше было просто: набрал help [что-то] – и получи ответ… Знать бы только, какие бывают эти «что-то» – вот в чем была трудность. Теперь, просмотрев USER MANUAL, можно смело браться за редактирование: если чего-то не вспомнишь – найдешь. А в качестве небольшого, но полезного дополнения – коротенький справочник в отдельном файле – quick reference. Bravo, Bram!

Теперь о «нововведениях» первого порядка. Тех, что, на мой взгляд, существенно дополнили функциональность vim.
Прежде всего это возможность вертикального деления окон (:vsplit или CTRL-W v). На первый взгляд – ничего особенного, тем более – в графической среде. Но это – только возможность. А как ею воспользуется программист с фантазией? Первое следствие – реализация нового режима: diff-mode. Набираем:
vimdiff file1 file2
(файлов может быть до четырех)… и появляются два вертикальных окна, в которых совпадающие строки – скрыты, а отсутствующие или несовпадающие – выделены цветом. С различиями допустимы все мыслимые операции: переходы, удаления, копирования и т.п. Пишущих под unix, трудно этим удивить: замечательная утилита diff тоже очень много умеет, но что бы сам редактор…
Обратите внимание на «скрытие» совпадающих фрагментов в окнах diff-mode. Видите символы «плюс» левее начала строки? Переводим туда маркер, нажимаем «пробел» – текст открылся. Набираем <za> – текст закрылся. Это еще одно новшество – folding («папки»): возможность скрывать несколько строк за одной. Придумано это, конечно, не для diff-mode, а для более рационального представления структурированных текстов (прежде всего программ). Принципов, по которым группируются скрываемые строки, шесть:


  • вручную;
  • по левому отступу;
  • по результату вычисления заданного выражения;
  • по синтаксическим признакам;
  • по совпадающим строкам (см. выше);
  • с помощью маркеров.


Подробное описание заняло бы слишком много места, но полезность новшества сомнений не вызывает.
Следующее «приобретение» – приведение существовавшего и ранее механизма подключения пользовательских скриптов к популярной форме plugin's. Как программист, я не вижу большой разницы в том, загружается скрипт строкой в конфигурационном файле или помещением в каталог /plugin, но – веление времени. Отныне всякий скрипт, помещенный в каталог /plugin, будет загружаться при запуске vim автоматически.
А вот еще один каталог, которого не было в предыдущей версии – /ftplugin. Это тоже скрипты, но загружаться они будут в зависимости от типа открываемого файла. Раньше типом файла определялась только подсветка синтаксиса, а теперь – и некоторые особенности редактирования. Очень рационально.
Принято считать, что vim создан «программистами для программистов», и предназначен прежде всего для написания текстов программ. То ли «онтогенетическое родство» программистов и Сети сыграло свою роль, то ли слишком многие программисты стали web-master-ами, но посмотрите на новую возможность: vim позволяет редактировать файлы в кодировке UTF-8 – это при том, что еще не все browser-ы и mail-клиенты умеют ее читать!
Как часто адептам unix приходится слышать о «трудностях» работы с командной строкой… Ни авто-заполнение, ни неисчерпаемая «история команд» не убеждают оппонентов, предпочитающих всему на свете «drag'n'drop». И вот еще одна попытка убеждения от vim 6.0: теперь, набрав <q:>, <q\> или <q?> мы попадаем в command-line window (окно командной строки). В этом окне в нашем распоряжении последние 100 (или сколько указано в hystory) команд, фрагменты которых можно совершенно произвольно использовать для составления новой команды.
Использовали ли Вы когда-нибудь выделение вертикальных блоков? Очень удобно при работе с таблицами. Вот если бы еще блок можно было отмечать независимо от того, есть в нужной позиции символ или нет, то есть пустые позиции автоматически заполнялись бы пробелами… Ну, теперь – можно! Разрешаем «виртуальное редактирование» командой:
set virtualedit=block
Вместо block может быть insert, или – all: в зависимости от того в каком режиме нам это требуется, и – пожалуйста.

«Нововведениями» второго порядка, я бы назвал те, которые изменили функциональность vim не так существенно. Это, конечно, вопрос субъективный, так что, прошу не судить слишком строго.
На мой взгляд, это:




  • Easy Vim – режим после запуска с параметром -y. Очень напоминает notepad для windows;
  • «гибкий» способ задания отступа слева – с помощью indent-скриптов, подобно тому, как это делается для подсветки синтаксиса;
  • расширение множества символов, используемых для составления «шаблонов» поиска – очень полезно, если, конечно, удастся их запомнить;
  • поддержка нескольких языков в сообщениях, меню и т.п. (не сочтите «славянофобом», но, по-моему, это не актуально: многословность vim аналогична многословности языков программирования - их же мы не пытаемся переводить. На мой взгляд, полезнее был бы перевод документации. Впрочем, русского среди предлагаемых languages все равно нет);
  • редактирование по сети – теперь, кроме nfs это возможно и по протоколам rcp, ftp, http;
  • коммуникации между двумя vim по сети (X Window, MS Windows);
  • два новых типа буфера… время покажет;
  • усовершенствована система печати – очень существенное дополнение;
  • дальнейшее улучшение «портированных» версий: 5 из 10-ти улучшений касаются версий для ОС от MicroSoft. Количество пользователей этих версий, участвующих в vim-online по-прежнему растет;
  • у quickfix появилось выделенное окно ошибок – использующие quickfix обязательно это оценят;
  • а вот очень «приятная» мелочь: модификатор ("v", "V" или CTRL-V) между оператором и командой перемещения определят его область действия в символах, словах или блоках;
  • еще одна «дань моде» – возможность выбора «цветовых схем»;
  • появилось 8 новых команд для нормального режима, новые опции, связанные, прежде всего, с печатью и folding-ом, пару десятков новых команд режима командной строки.


«Нововведениями» третьего порядка я бы назвал те, которые не имеют отношения непосредственно к коду vim. Это упоминавшиеся plugin's, файлы описания синтаксиса, вспомогательные утилиты, файлы меню. Среди них есть очень существенные для оценки vim как целостного продукта: «третьестепенность» в данном случае не коррелирует с «не важностью».
Прежде всего это global plugin's:




  • explorer.vim – полнофункциональный файл менеджер, запускаемый командой :Explore (или любой клавиатурной последовательностью, «привязанной» к этой команде);
  • gzip.vim – возможность редактировать архивированные gzip файлы;
  • netrw.vim и rrhelper.vim, обеспечивающие редактирование по сети.


Количество скриптов, зависящих от типа редактируемого файла пока что на порядок меньше, чем количество файлов-описателей синтаксиса, но и оно впечатляет: 26. Хочется верить, что такое число языков программирования, редактируемых в соответствии с их особенностями, удовлетворит большинство пользователей.
Что касается файлов описания синтаксиса, то он еще более расширился, превысил три сотни и в этом смысле vim, кажется, вне конкуренции.
Из «новичков» каталога /tools можно отметить:

  • efm_perl.pl – скрипт, позволяющий использовать quickfix при работе с Perl, как будто это транслятор, а не интерпретатор;
  • vimspell.sh – подключающий spellchecker к vim. (Правда, на мой взгляд, использовать непосредственно ispell все же удобнее.)


  • Отдельно стоит упомянуть menu.vim – этот файл «вырос» относительно предыдущей версии почти вдвое. Функциональность увеличилась соответственно. Все возможности vim он, конечно, не охватывает, но для первого знакомства – вполне достаточно. Полезен также при использования команд, потребность в которых возникает «раз в год».
    Осталось упомянуть файлы описания цветовых схем. Их 12, но мне больше всего понравилась схема с незатейливым названием "default". Дело вкуса.

    Полное описание отличий версии 6.0 можно найти в /doc/version6.txt. Но пусть Вас не удивляет размер этого файла – без малого 160 кб.

    Таким вот образом, идеи и исполнение многих людей «вылились» в новую версию популярного редактора. А жизнь, между тем, не останавливается. Каталог скриптов (теперь – plugin's) на vim-online все пополняется и среди них есть довольно интересные. Например – EasyHtml.vim. Представьте: редактируем html-код, позиционируем маркер на tag-e, нажимаем <F2> – и в левой части экрана открывается узкое вертикальное окно, каждая строка которого – опция, допустимая к использованию с данным tag-ом. Выбрали – вставили. Синтаксис html подсвечивался в vim и ранее. И все это – в UTF-8. Такой «импровизированный» html-редактор вполне может составить конкуренцию специальным средствам web-редактирования, а в разряде консольных, быть может, окажется и вне конкуренции.
    Или – colorize.vim. Вы никак не привыкните к переходам из режима в режим? Загрузите colorize.vim, поместите его в каталог /plugin, и цвет фона всегда укажет – находитесь Вы в режиме вставки (insert mode) или нет.
    Еще один вариант spellchecker-а с использованием интерпретатора Ruby? Пожалуйста – spellcheck.vim.
    А vimtips.vim будет показывать Вам при каждой загрузке по одному совету из базы данных все того же vim-online. Если Вы ему позволите, конечно.


    Содержание раздела