суббота, 4 декабря 2010 г.

Vim. Чем же он так хорош?

Решил изучить Vim, в планах было давно, но все как-то откладывал.

Помню раньше, работая с сервером под Линухой пользовался вимом для редактирования конфигов - и не понимал всей его прелести. Поэтому меня очень удивило, когда в одной презентации от господ Инсомниаков(проекты - раздва; вики - три ),я увидел скриншот кода, в котором было окошко вима. Это резко изменило мое представление о виме, и я поставил зарубку на память.

Итак, с чего же я начал?

Для начала, я нашел несколько вариантов для работы с вимом под виндой.
  1. gvim - официально-родная графическая оболочка для vim, существует как под виндой, так и под линухой.
  2. VimEmu - плагин для студий версий 2002 и выше, в том числе и 2010. Однако, оказалось, что он платный и не лечится, а отдавать порядка 100$ на что-то, что я еще не изучил...=)
  3. VsVim - плагин для студии 2010. Open Source проект от одного из разработчиков Microsoft; начат в декабре прошлого года, так что находится уже в достаточно зрелом состоянии. Именно на нем я и остановил свой выбор.

Об этом много уже говорилось, но основное преимущество вима - в том, что не надо прыгать руками по всей клавиатуре, чтобы сделать чтов-то и большинство действий можно выполнить не сходя с буквенно-цифровой части клавиатуры.

Как же работает сам редактор? У него есть несколько режимов функционирования:
  • режим вставки - работает так же, как и ввод текста в "обычном" текстовом редакторе.
  • командный режим - в нем можно вводить команды: перемещения по тексту и редактирования.
  • визуальный режим - можно выделять текст и выполнять команды редактирования уже над выделенным текстом.
В командном режиме команда действия частенько может сочетаться с командой перемещения. Так, для того, чтобы удалить слово нужно набрать - <Удалить><Переместиться на слово вперед>, а на клавиатуре - это будет dw. Приятнее, чем Ctrl +Shift + Right -> Del, не так ли? :)

Для начала я выучил основные команды для работы с текстом:
  • перемещения (h, j, k, l - вниз, влево, вправо, вверх; w,b - на слово вперед и назад)
  • редактирования текста (d - удалить, p - вставить ) и проч.
И начал пробовать. Первые несколько дней мозг ломало по-страшному. У меня с трудом получалось думать о том, что же именно я пишу, а большую часть времени занимало обдумывание следующего действия, примерно так( "джей-джей-эйч-ди-ви"). До сих иногда начинаю разговаривать с собой, когда использую команду, которая еще не записалась на подкорку.

Через неделю такое чувство прошло, и уже сейчас руки иногда начинают срабатывать на автомате. С удивлением иногда замечаю, как совершенно машинально для удаления текущей линии нажимаю dd.

Скорость редактирования действительно увеличивается, но для этого желательно обладать навыками слепой печати. В других текстовых редакторах руки машинально тянутся к Esc и пытаются вставить новую строку над текущей с помощью Shift+o, замечаю, что некоторых функций в них мне уже не хватает - вводить в виме приходится куда как меньше буков. Признаюсь правда, что иногда все-таки использую мышку. На мой взгляд текст ею прокручивать все-таки удобнее)

Еще больше преимущество вима осознал, когда пришлось повозиться с вот этим фрагментом кода:

// Set up root attribute parsers
mRootAttribParsers.insert(AttribParserList::value_type("material", (ATTRIBUTE_PARSER)parseMaterial));
mRootAttribParsers.insert(AttribParserList::value_type("vertex_program", (ATTRIBUTE_PARSER)parseVertexProgram));
mRootAttribParsers.insert(AttribParserList::value_type("geometry_program", (ATTRIBUTE_PARSER)parseGeometryProgram));
mRootAttribParsers.insert(AttribParserList::value_type("fragment_program", (ATTRIBUTE_PARSER)parseFragmentProgram));

//////////////////////////
// a lot of lines of codes
//////////////////////////
mPassAttribParsers.insert(AttribParserList::value_type("polygon_mode", (ATTRIBUTE_PARSER)parsePolygonMode));
mPassAttribParsers.insert(AttribParserList::value_type("polygon_mode_overrideable", (ATTRIBUTE_PARSER)parsePolygonModeOverrideable));

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

Сейчас очень доволен тем, что решил его таки изучить и сделал его своим текстовым редактором по умолчанию. Все - на вим! Хотя бы попробовать, чтобы понять, как работают программисты в другом мире =)




Комментариев нет:

Отправить комментарий