| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() |
Vim... Быть может он действительно - лучший? Обзор весьма мощного и очень популярного текстового редактора Vim, с примерами работы и рассуждениями о том, что же должен уметь толковый текстовый редактор. За годы общения с вычислительной техникой мне пришлось увидеть множество средств набора и редактирования текста. Консоли "МИРа" и "Саратова", терминалы ЕС, уже вполне "зрелые" редакторы DEC-овских VMS/RSX, "радуга" редакторов под MS DOS и так далее. Менялись платформы и операционные системы, средства вывода и ввода, неизменной оставалась потребность в создании программного обеспечения, а значит - в программах, с помощью которых это ПО создается. Есть, правда, еще IDE (интегрированные среды разработки), есть visual (визуальные) средства, но нет программирования без программ-редакторов. Текстовые процессоры, а тем более издательские системы - принципиально другие продукты, для написания программ явно избыточные с одной стороны и недостаточные с другой. Именно хорошего редактора не хватает в стандартном наборе современного пользователя MS Windows, коих большинство среди сидящих за IBM PC. Можно добавить: к сожалению, но факт от этого фактом быть не перестанет. Будет неправильно сказать, что написание текстов программ - дело только профессиональных программистов. Даже если не принимать во внимание энтузиастов, то отмахнуться от того обстоятельства, что всякий, задумавший обзавестись своей страничкой в Интернет, попадает в положение программиста - просто невозможно. Число последних неминуемо "стремится" к числу пользователей Сети, имя которым - "легион". Поэкспериментировав какое-то время с MS Word, Adobe Photoshop и FrontPage, большинство таких программистов-"неофитов" приходит к выводу, что лучший инструмент написания html-кода - notepad. Вам не приходилось слышать такое утверждение? Оно не беспочвенно: notepad едва ли не единственный именно редактор среди наиболее распространенных программ для MS Windows. "Именно редактор" означает в данном случае инструмент для эффективного ввода и модификации текста, не отягощенный средствами создания лучшего дизайна, расширенными возможностями печати и тому подобное. Но если такую популярность получил notepad - редактор, уступающий по своим возможностям даже вспомогательным встроенным редакторам интегрированных сред разработки вроде Borland-овских Turbo и оболочек вроде Far, то, может, имеет смысл обратить внимание на редакторы, используемые профессиональными программистами? В мире UNIX самым заметным в этом классе, безусловно, является vi (VIsual editor) и его современный "потомок" - vim (Vi IMprooved - улучшенный). Он чаще других вызывается по умолчанию, его интерфейс чаще упоминается рядом с определениями "совместимый" и "подобный" и так далее. Но, быть может, это - дань традиции? В большой степени - да. Утверждение о том, что этот редактор - лучший, нуждается в доказательстве. Некоторые доводы в пользу этого и приводятся ниже. Прежде всего, условием необходимым, хотя и не достаточным, является функциональная полнота редактора: он должен уметь все, что только может потребоваться при работе с текстом. Термин "все" конкретизировать невозможно, но достаточно будет сказать, что vim имеет ограниченное только здравым смыслом количество буферов (фактически - открытых файлов) и окон (в данном случае название "окно" очень точно отражает суть происходящего: есть файл, а есть окно, через которое мы содержимое этого файла рассматриваем). Окно может занимать всю площадь экрана, а может - часть, причем любую, то есть экран может делиться как по горизонтали, так и по вертикали. Переключения - произвольны. Сказанное справедливо как для графического, так и для консольного режимов. Кроме стандартной для "взрослых" редакторов возможности создания макрокоманд (фиксированных последовательностей элементарных команд редактора), есть развитый язык программирования. Редактор имеет 5 режимов (modes):
По умолчанию <Esc> (иногда - два нажатия) возвращает в "нормальный" режим, <Ins> - переводит в режим "вставки", а из него - в режим "замены". Двоеточие в "нормальном" режиме даст перевод в "командный" режим. Символы операторов из, опять-таки, "нормального" режима переводят в "операторный". Символы <v> и <V> - в "визуальный". Поскольку действия редактора по нажатию любой из клавиш в любом режиме программируются, то, как вы, вероятно, уже догадались, у увлекшегося настройкой vim пользователя, этот редактор вполне может стать воистину неузнаваемым. Здесь мы подходим ко второй сильной стороне vim - исключительной модифицируемости. Нужно ли это? Берусь утверждать: да. Меняются клавиатуры, хотя их типов, впрочем, и в каждый конкретный период - предостаточно, если говорить не только об IBM PC. Меняются устройства ввода, задачи, наконец. У vim как у достойного члена семейства наиболее типичных UNIX-приложений настройки хранятся в конфигурационном файле, каких, в свою очередь, может быть множество. По одному на тип решаемых задач, например. И название и местоположение конфигурационного файла традиционно для UNIX: .vimrc в "домашнем" каталоге пользователя. Пример (vimrc_example.vim) - в каталоге самого vim (для Linux обычно -/usr/share/vim/vimNN/, где NN - номер версии. Одним словом, если вы "создаете" свой редактор практически сами, то такое решение претендует на звание "решение навсегда": не в смысле неизменности, разумеется, а в смысле постоянной готовности соответствовать вашим новым требованиям. Впервые познакомившемуся с возможностями конфигурации vim, трудно устоять перед соблазном "подогнать" его под "милый сердцу" прототип: для кого-то - MultiEdit, для кого-то - nedit, а для кого-то - и notepad. Это не сложно. Однако не стоит торопиться: vim имеет возможности, которых, вполне возможно, не было у "прототипа", а познакомившись с ними однажды, вы, быть может, уже не захотите от них отказываться. Перечислить все эти возможности вряд ли удастся уже хотя бы потому, что как всякая открытая система, vim развивается усилиями многих людей и быть в курсе всех разработок просто не реально. Попытаюсь перечислить наиболее известные возможности. Подразумеваются настройки "по умолчанию", ввод в "нормальном" режиме, кроме тех случаев, когда оговаривается иное. Двоеточие говорит о переходе в командный режим. Разумеется, можно как угодно позиционироваться в файле:
Весьма удобным является механизм меток, к которым всегда можно вернуться:
Еще одна возможность, довольно редко встречающаяся у редакторов, - множество именованных буферов. В последних версиях MS Windows это называется многостраничным clipboard-ом. Буферы, как и метки, метятся одной буквой:
Разумеется, есть множество средств поиска/замены:
Разумеется, есть полный список файловых операций. Перечислять все вряд ли имеет смысл: в них нет ничего "экзотического". Интереснее упомянуть "автозаполнение": набрав пару-тройку первых символов и не выходя из режима "вставки", нажмите <Ctrl-n> (или <Ctrl-p>): vim начнет предлагать варианты продолжения слова из имеющихся в вашем файле. Для пишущих на С добавлю: и в include-файлах тоже. Меня, в свое время, эта возможность примирила с длинными, информативными метками и именами переменных: я перестал в них ошибаться. Еще один сюрприз: <[i> покажет в командной строке определение переменной, находящейся под курсором, а <[d> - определение макро, если символы под курсором являются переменной или макрокомандой, разумеется. И еще "фокус" - справка по поводу кода символа под курсором, причем сразу во всех системах исчисления кроме двоичной, разве что. Последовательное нажатие <ga> даст практически полную информацию по поводу символа под курсором. Разумеется, можно отказаться от сделанных изменений (undo), введя просто <u>, а можно восстановить сразу всю редактируемую строку: <U>. Иногда бывает нужно отказаться от отмены изменений (undo the undo's). Можно и это: <Ctrl-R> Можно изменить регистр символа под курсором нажатием <~>. И, напоследок, часто весьма облегчающая жизнь точка <.> - повторить последнюю операцию. Теперь понятно, почему не достаточно одного режима: все разнообразие функций трудно покрыть только функциональными клавишами, а использование клавиш обычных требует отказа на какое-то время от режима экранного редактирования. Среди множества установок, задаваемых командами ":set ..." есть и задающая режим вставки как действующий по умолчанию, что делает vim похожим на большинство экранных редакторов. Попробуйте. И, скорее всего, вы убедитесь, что заданный по умолчанию разработчиками "нормальный" режим с точки зрения затрат времени экономичнее. Похожая ситуация с предложенными разработчиками для использования по умолчанию клавишами. Для не знакомых с UNIX назначение клавиш для поиска, копирования, вставки кажется непривычным. Однако, если вместе с vim вы будете осваивать, например, Linux, то очень скоро обнаружите, что те же клавиши "работают" и при просмотре man-страниц, и в популярной screen, и даже для стандартного интерпретатора командной строки bash, оказывается, существует vi-подобный режим. Одним словом, в UNIX-среде освоение vim либо проходит легче, если вы не совсем "чайник", либо "пригодится" при дальнейшем знакомстве с системой. Разумеется, vim имеет подсветку синтаксиса, причем для десятков языков программирования и конфигурационных файлов. Для версии 5.6 подкаталог syntax содержит 189 файлов общим объемом более мегабайта, что, в свою очередь, составляет почти пятую часть объема дистрибутива. Разумеется, vim прекрасно документирован: без малого 2 мегабайта файлов в текстовом формате, снабженных системой перекрестных ссылок и поиска. Плюс небольшой скрипт, превращающий эти текстовые файлы в универсальные html. Разумеется, vim портирован практически на все платформы. Включая все известные ОС от MicroSoft, не в упрек будь сказано софтверному гиганту. И это еще не все. Полтора десятка утилит, разработанных специально для vim, дополняют и без того немалый список возможностей. Среди них средства для создания перекрестных ссылок с файлами других форматов, "рисование" псевдографикой, таблицы, дополняющие форматеры, конвертеры и тому подобное. Ну, и, разумеется, vim бесплатен. Если быть точным, то за него не обязательно платить. Плата же, если таковая случится, переводится в фонд помощи детям Уганды. Не единичный в мире Open Source, но, тем не менее, весьма благородный жест разработчиков. Нужно признать, что vim сложен или, по крайней мере, непривычен для пользователей не-UNIX систем. Именно им пригодились бы все возможности конфигурирования, но их изучение кажется в начале пути таким "изнурительным"... Не стоит отчаиваться. Кроме документации в составе дистрибутива vim, стоит познакомиться с сайтом В заключение нужно сказать о недостатках. Не без этого. Внутренняя сложность vim может сделать его довольно медлительным на "слабых" машинах. Заметное время уходит на поиск, медленно может перемещаться маркер в "визуальном" режиме. Заметить это можно, повторюсь, только на машинах типа Pentium-166, например, но - можно. Использование клавиш помимо функциональных предполагает, что включена не "ru"-раскладка. При работе с текстами программ это, как правило, не важно, а вот если обрабатываемый текст - исключительно кириллица, то переключение раскладки каждый раз, когда потребуется команда, вызываемая алфавитными клавишами из "нормального" режима, - раздражает. Быть может, стоит для работы с подобными текстами иметь свой конфигурационный файл с "акцентом" на использование функциональных клавиш, не зависящих от раскладки клавиатуры. А попробовать, все-таки - стоит. Особенно работающим в разных операционных средах. Если вам действительно нужен редактор, попробуйте и вы, почти наверняка, не пожалеете. |
|
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
|