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

Нужно ли вам это читать?

В данном посте описана небольшая часть моей жизни. Также я попытался сказать, почему я решил написать про vim. Если вас не касается ни первое, ни второе, то читать, думаю, не стоит.

Предыстория и совсем не про vim

Начну очень издалека, вот прям совсем. С детства меня увлекали всякие электронные штуковины, я разбирал всё, что попадалось под руку: радиоприёмники, приставки, часы, магнитофоны. У меня была коробка с кучей резисторов, транзисторов, диодов, переключателей и микросхем.

Конечно же у меня было LEGO, и было его много, папа привозил из Москвы сундучки milkyway, близкие дарили на праздники замки, корабли, машины. Ещё у меня обитал забавный электронный конструктор знаток. Ничего сверхъестественного, но всё равно весьма круто.

alt text alt text

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

Да, мне определенно нравилось создавать. Меня вдохновляло, когда после нескольких часов мучений в поисках нужной детали или отладки схемы появлялось осязаемое воплощение мысли. Иногда мне не хватало какой-то запчасти, её просто у меня не было, иногда не хватало знаний для реализации задуманной идеи, но это редко меня останавливало, я листал учебники по физике для старших классов, какие-то книжки по радиоэлектронике, да, частенько при этом мало что понимая из прочитанного, но порой находил ответы на интересующие меня вопросы, что-то делал наугад, полагаясь на интуицию, хотя порой меня за это било током :)

Моё увлечение разделял мой сосед, Паша Тимошин, у него тоже было много всякого электрического хлама, помимо этого у него был советский 16-битный компьютер БК, на котором крутился BASIC-86. Паша писал какие-то программки, показывал мне. Некоторые из них были определенно забавными, но в общем и целом я не понимал, зачем всё это может быть нужно.

alt text

Примерно в году 2004 у меня появился первый компьютер, интеловский проц на 166Гц, 64 метра оперативки и видюшка на 8. Конечно же, в скором времени и он оказался разобранным. Но при этом все еще продолжал работать. Тыкал в виндовые менюшечки, потом начал её потихоньку конфигурять и расковыривать.

Потом увидал у дяди мак и всякие клевости его интерфейса. Он выглядел просто шикарно по сравнению с 98ой виндой. Я спросил: “а можно мне так же?”. На что дядя ответил: “Почему бы и нет?” и записал диск с моим первым дистрибутивом Linux, а ещё он спросил меня, знаю ли я как по-английски будет “человек”. Это было на первый взгляд небольшое событие, но на самом деле оно кардинально поменяло мою жизнь и цвет глаз.

Спустя некоторое время, совершенное случайно, жизнь свела меня с еще одним замечательным человеком - Дмитрием Шалыгой. Большое спасибо за это Ане Николаенко : ) Мы ехали в автобусе на другой конец города и, хотя мы были знакомы всего несколько минут, у нас состоялся примерно следующий диалог:

Дима: Ты умеешь программировать? Вообще пробовал когда-нибудь?

Я: Не-а, только немного на Prolog’е писал.

Дима: А хочешь научу?

Вообще, он сразу меня впечатлил, буквально всем - начиная от одежды, заканчивая манерой разговора. После недолгого диалога я загорелся идей того, что писать код - это восхитительно, и с радостью принял предложение. Мы периодически с ним виделись, он рассказывал мне про синтаксис BASICa и давал простенькие задачки, так я освоил кое-какие основы и поимел представление о проганье.

Но, конечно же, мне стало не хватать возможностей этого простенького языка, стал баловаться кое-чем потяжелее. Сначала это был Visual Basic 6.0, я начал читать какой-то учебник и писать простенькие приложеньица, и в некоторый момент, меня осенило: программирование - это тот самый процесс создания, который так меня привлекал ранее, но за тем лишь исключением, что ты не ограничен материалами, по сути их у тебя сколько угодно, и основная преграда - это только твои мысли.

Позже я начал баловаться вещичками потяжелее: сначала это был Pascal, потом C, постепенно променянный мной на C++. Расширение моего сознания не ограничивалось изучением новых языков и технологий. Опять же, по счастливому стечению обстоятельств, я попал в ЛКШ, где познакомился с еще одним выдающимся человеком, Павлом Олеговичем. Который прокачал мои алгоритмические скиллы за короткий промежуток времени на просто огромную величину, вероятно, это был самый большой буст моих знаний в этой области.

В мире разработки практически бесконечно много материала, но при этом необходимость инструментов для работы с этим материалом остается. Выбор их, на первый взгляд, невероятно обширен, но по факту - так ли это? И тут возникают некоторые сомнения. Хочу провести некоторую аналогию с инструментами труда, которые появлялись и развивались еще с древних времен. Некоторые устарели и не используются, а другие с тех пор практически не изменились.

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

Во время разработки большую часть времени проводишь за работой с текстом. Да и не только во время разработки, когда правишь конфиги, пишешь стихи… Соответственно, неплохо бы всю работу с текстом выполнять крайне эффективно. Так сложилось, что живу я в мире linux. Я пробовал много чего, долго сидел под виндами, переюзал кучу linux’овых дистрибутивов, макось потыкал. Но пока ничего проще, понятней и удобней gentoo linux не встретилось. Так и живем. На удивление, в большинстве случаев никакой gui даже близко не идет в сравнение с текстовым интерфейсом по эффективности. Хотя есть и обратная сторона медали - порог вхождения.

Первый раз

Первый раз случился, когда я был совсем юнцом, сидел под ubuntu, тогда у меня только начал расти канал в интернет. Я, как и многие другие, сидел на разных сайтах и читал статьи про конфигурацию conky и compiz. Тогда я верил на слова этим гайдам и не задумываясь, копировал команды в эмулятор терминала. И в один момент открылось что-то непонятное, уродливое и там виднелось содержание того конфига, который мне нужно было исправить. Мои попытки что-то изменить были тщетны, но через некоторое время я все таки смог это сделать. Это было мучительно, неудобно, непонятно, я попытался побыстрее закрыть этот кошмар, но не тут то было, это исчадие не отпускало меня.

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

А потом

А потом мой сосед-СУНеЦ, Долгов Боря, знатный линуксойд, мне как-то сказал, что vim - это нереально круто, и все тру-кул-хацкеры его юзают. Конечно же, мне хотелось быть true, и я стал потихоньку юзать эту крайне неудобную штуку в качестве основного текстового редактора.

Теперь вместо ctrl-s я писал :w, а чтобы начать что-то печатать нажимал i и очень пугался, когда случайно нажимал какие-то хоткеи и текст менялся до неузнаваемости. Так продолжалось некоторое время, и я не до конца понимал, в чем же крутость этого странного инструмента. Я начал гуглить, увидел некоторые конфиги, что-то копипастнул в свой конфиг, что-то просто взял на вооружение. И тут я понял, что не такое уж это и унылое творение красноглазых умов, а достаточно мощный feature-rich редактор и в нем можно делать все, что умеют и другие популярные блокнотики.

Но чуть позже я смекнул, что это вовсе не конфиг, а список последовательных команд, написанных на VimL, и что можно писать код, который влияет на поведение vim‘a. И тут я осознал, какой потенциал в этом. А еще некоторое время спустя я подумал, что практически не использую стандартных возможностей редактора, которые есть по-дефолту. Что для любого часто повторяющегося действия есть свой хоткей, и если для чего-то приходится нажимать слишком много клавиш, то наверняка я делаю что-то не так и стоит потратить немного времени, чтобы в перспективе делать это действие крайне быстро.

Кажется, что все это мелочи и можно пару раз в день не жалеть немножко лишнего времени на выполнение повторяющихся таксков. Но если вы возьмете то время, которое вы тратите на это действие за месяц, год, то поймёте, что это совсем не пару минут. И так с каждой мелочью - казалось бы, всего пол лишней секунды, которые выливаются в минуту в день, полчаса в месяц и 6 часов в год. А теперь подумайте - сколько таких мелочей, которые вы могли бы делать быстрее? И тут уже счет может идти не на часы, а на дни, которые вы теряете только потому что было лень один раз оптимизировать повторяющуюся задачу.

Сейчас

Сейчас я имею достаточно универсальный инструмент для работы с любой текстовой информацией: кодом, сообщениями, постами, конфигами, заметками. И получаю исключительное удовольствие от скорости работы с обилием буковок. Меня не отвлекает задача редактирования, мои мысли сразу воплощаются в символы. Не могу сказать, что идеально знаю vim, я по-прежнему узнаю новые идеи и use case’ы, но, думаю, то время, которое я потратил на изучение, уже с лихвой окупилось.

Помимо непосредственной работы с текстом, прямо из редактора выполняются многие смежные задачи: работа с файловой системой, системами контроля версий, с сервисами типа github(gist, issues), etc. К тому же, ввиду специфики моей работы, мне приходится работать на удаленных серверах, поэтому меня очень выручает эта классная штуковина. Небольшой примерчик редактирования куска кода, взятый с jaxbot:

Что мне хочется?

Мне хочется написать серию постов, в которых я буду собирать конфиг с нуля и объяснять, почему выбрал тот или иной путь, параллельно рассказывая о возможностях, которые использую сам. На это меня подталкивает тот факт, что множество моих коллег или не используют vim вовсе или делают это крайне неэффективно. В итоге хочется создать качественный материал, который помогает достаточно быстро получить удобный рабочий инструмент и навыки для его использования. Также хочется систематизировать знания и привести в порядок свой собственный конфиг.