Маленький пост про огромный Vim

Вообще это конечно будет пост в стиле “Тима познает мир”. Но, я думаю, что пост этот может быть полезен не только мне.

Многие мои ровесники боятся vim’a, как огня. Не исключение и некоторые мои коллеги на работе, которые все-таки связаны с IT. И если запустят его случайно, то не знают даже как оттуда выйти. Знаю, сам был таким. Для таких людей сразу напишу, для выхода нужно набрать “:q!” без кавычек, естественно. Восклицательный знак означает безоговорочный выход, без лишних вопросов на сохранение. Такой метод общения с редактором по началу конечно обескураживает, ломает шаблон, так сказать, взрывает мозг. Но позже в этой статье мы покажем, что так шла эволюция и такой интерфейс – результат долгого постепенного пути.

Началось все с телетайпов. Первый телетайп изобрели более ста лет назад. Применялся он на бирже, для быстрого обмена информацией по телеграфу. Первые компьютеры тоже выводили информацию не на широченные мониторы, как сейчас, а на узенькие телетайпы. Был такой текстовый редактор QED, который позволял редактировать текст используя для вывода информации телетайп. Позже Кен Томпсон, один из создателей языка Си, написал похожий редактор для PDP-11 и назвал его ed. Редактор получился ну уж очень инфенальным. Не для простых смертных, явно. Так, например, он был очень лаконичен, отпиливай себе ноги, он даже не пикнет. Работа с ним напоминала разгадывание кодового замка взрывчатки, стоя на канате, натянутом между двумя небоскребами. Редактируемый текст ты не видишь, должен держать его в уме, причем точно помнить где какой символ находится. На то были свои причины. Устройство вывода – телетайп. Весь текст на него не выведешь. Даже если вывести строку, то не останется места на вопрос или ввод команд. Отсюда и лаконичность и немногословность редактора в общении с человеком. Да и памяти у машин того времени было раз, два и обчелся. Поэтому такая своеобразная “аренда” памяти человека. Редактор этот от QED отличало наличие регулярных выражений, которые все-таки сильно упростили жизнь.

Билл Джой, 1982-й год.

Билл Джой, 1982-й год.

После ed был em, разработанный Джорджем Колоурисом (George Coulouris). Em – значит editor for mortals, редактор для смертных. Позже идеи em развил и улучшил Билл Джой (Bill Joy) в своем редакторе en. Потом были его ex и, наконец, vi (но еще не vim).

“…однажды за соседним терминалом оказался этот блестящий хакер — студент Билл Джой, который сообщил мне, что пишет компилятор с Pascal. Я показал ему em, и он сказал: “симпатично, отделу технической поддержки наверняка понравится…”. Впоследствии оказалось, что em, созданный с учетом условий маленького ВЦ колледжа, совершенно непригоден в огромной системе Беркли… Примерно через неделю я увидел Джоя за модификацией исходных текстов em… Затем на основе em Джой создал редакторы ex и vi…”

– вспоминает Джордж Колоурис их встречу с Биллом Джоем в 1976-ом году в Беркли.

Главным новшеством vi был визуальный режим. То есть можно было видеть текст, который ты редактируешь и видеть последствия твоих изменений в реальном времени. Тогда уже на смену телетайпам появились мониторы. Точнее, еще не мониторы, а АЦТ – алфавитно-цифровые терминалы. Вообще работа над vi была тесно связана с работой над Беркли Unix, будущей BSD. Так появилась библиотека termcap. Termcap – сокращение от terminal capability. Это была библиотека и база данных, позволяющая работать с великим множеством АЦТ. Тоже детище Билла Джоя. Эта библиотека и по сей день является частью подавляющего большинства unix-like систем. Таким образом, прикладные программы и vi получили возможность работы на разных АЦТ не заморачиваясь их отличиями.

От редактора ed, кстати, пошла еще одна мощная эволюционная ветка потоковых редакторов. Один из современных представителей этой ветки – sed. Потоковые редакторы отличаются от визуальных тем, что проходят по тексту и изменяют его на ходу, пропуская через себя. То есть задаешь им какую-нибудь команду, правило, например, заменить во всем тексте одно слово на другое, на вход ему подаешь текст, на выходе получаешь от него результат. То есть текст меняется как бы в потоке через редактор. Но это уже совсем другая история.

Что ж, эволюция не стоит на месте и в 1991-м Брам Моленар (Bram Moolenaar) пишет vim. Vi IMproved – улучшенный vi, сначала расшифровывался как Vi IMitation – имитирующий vi. Первоначально редактор создавался для компьютеров Amiga, но позже был портирован на другие платформы. Редактор до сих пор сохраняет режим полной совместимости с оригинальным vi, для тех, кому это по тем или иным причинам нужно. Но и также список улучшений можно продолжать долго. Современный vim по своим возможностям уже давно превзошел даже профессиональные среды программирования. И по возможностям настройки тоже. Конкурировать с ним может разве только Emacs, про который уже давно ходят шутки и легенды. В частности, про кухонную раковину – мол в emacs не входит только она и поэтому она часто служит ему значком.

616px-Vim_syntaxПочему же в эпоху Word’ов и прочих Visual Studio, даже сегодня vim сохраняет свою популярность. Идеи, заложенные Биллом Джоем, оказались очень жизнеспособны. Интерфейс взаимодействия человека и программы посредством команд очень логичен и заставляет человека мыслить алгоритмически, как программист. Ну а как еще организовать более тысячи функций и возможностей так, чтобы было удобно? Если развесить все по меню и кнопкам на панелях, для панелей потребуется несколько мониторов, а меню будут 6-ти, 7-ми этажными. Вешать все на комбинации клавиш? Не хватит клавиатуры. Emacs как раз славится своими зубодробильными, пальце-ломательными комбинациями из 4-х, а то 5-ти  клавиш. И то, даже у него полно функций, которые вызываются напрямую по названию. И хотя часто пишут, что vim не интуитивен для начинающих, я не понимаю, что значит “не интуитивен”? Он логичен, если немного включить мозг и попытаться понять логику.  Вкупе с разными ускорителями, горячими клавишами, кучей способов перемещения по тексту и его редактирования, автоматизации, возможностями настройки всего и вся, все это дает немыслимые скорости работы с текстом. Не интуитивен он только потому, что мы выросли уже на других редакторах, не застали ту эру Кена Томпсона, Билла Джоя и других, не помним, не знаем, не понимаем пути, по которому шло развитие текстовых редакторов.

Еще одно маленькое достоинство vim в том, что он есть практически на любой unix-like станции. Если не полноценный vim, то уж хотя бы vi обычно есть. Если вам нужно отредактировать конфиг на ноде сотовой связи, или на сервере где-нибудь в NASA, то там скорее всего есть хотя бы vi. Запомнив один раз часто используемые команды, вы сможете применять их везде, где есть vi или vim. А значит почти везде. Еще он отлично работает по сети и по медленным каналам связи и ему не обязателен графический интерфейс.

И даже сейчас эволюция опять не стоит на месте. И даже vim можно улучшить. GVim – графический vim с меню и панельками и конечно с ворохом всех тех замечательных возможностей.

Такой вот маленький пост про кусочек истории огромного мира.

 

Vim

Add Comment

Required fields are marked *. Your email address will not be published.