вторник, 10 сентября 2013 г.

Пара слов о наболевшем...

Пишу не так часто, как хотелось бы, поэтому сразу про несколько вещей :)

Не так давно вышел vim 7.4, в принципе без революций, изменения скорее "под капотом", хотя, возможно, кто-то найдет что-то для себя интересное. Новость на самом деле хорошая - редактор отличный, живет, развивается, ни его в systemd, ни в него systemd никто не тащит. Все было бы хорошо, если бы не одно "но", относящееся, скорее даже не к vim, а к *nix-образным вообще. Как ни странно "но" примыкает к контексту философской дискуссии "апстрим" vs. "все остальные" - за кем правда.

Дело собственно в чем: так исторически сложилось, что я активно использую старый добрый bash и иже с ним, для повседневных, в основном рабочих, задач. И когда выходят новые версии bash'a, CLI-утилит, или того же vim'а посещает странный набор чувств: сначала радуешься "ухты, сколько всего нового можно будет делать", а потом понимаешь: в своей системе ты это увидишь еще не скоро, а перед тем как можно будет использовать новые фичи пройдут годы.

Даже, если "своя система" - это какой-нить веселый Arch'ик, в который обновления весело и беззаботно могут прийти уже на следующий день:  ок, поиграться в песочнице и разжечь аппетит получится, но привыкать к новому не стоит - нигде его еще нет.  Собирать пакеты для других систем - так себе вариант, особенно если собирать пакеты нужно для зоопарка, и вообще не вариант, если зоопарк не твой, да и работа вообще не в администрировании заключается. Плюс к тому сборка пакетов автоматически означает переведение системы, в упрощенное пакетным менеджером, но все же ручное управление. Можно еще что-то собрать у себя в $HOME - тоже удовольствие ниже среднего. В общем получается апстрим разродился новинками, а ты можешь только пооблизываться. Поэтому, в пользовательском контексте, вопрос апстрим vs. "все остальные" вообще не стоит: мы жрём что "все остальные" нам дадут.

Между делом такое положение вещей еще и добавляет лишний сантиметр в "порог вхождения" новых разработчиков в разработку открыто-свободного софта. Традиционная, до боли знакомая по описаниям схема выглядит просто: пользуюсь системой, что-то нервирует/мешает/хочется немного по-другому, беру редактор с компилятором в зубы - и давай дорабатывать, потом отдаю сообществу плоды своего творчества. Чего дорабатывать: версию X.XX.XX/1.build123 из дистрибутива, или X.XY из апстрима? Дистрибутивная ближе к телу, она то вообще и раздражала, и для нее более-менее понятно как можно потом собрать себе пакет, но изменения в нее никому нафиг не надо. Апстримовую? - Там может оказаться совсем другое и с другими глюками и  порожденными хотелками, да и тогда, по-хорошему, нужно опять вспоминать как в этом проклятом дистрибутиве пакеты билдят, не хорошо же в /usr/local все складывать, если верить надписям на заборах в интернетах.

Хаотичность и беспорядочность открытого мира, как она есть.

Ну и раз vim'ом начали, vim'ом и закончим. Не смотря на то что vim, чисто в *nix-традициях, умеет делать одну вещь, но умеет делать ее хорошо, - это вообще достаточно большая и сурьезная махина. Просто с наскоку не разберешься и не настроишь, это скорее процесс: сначала учишься как из него выходить, потом узнаешь как добиться того чтобы он бибикал поменьше и не портил все подряд, а потом можно уже и итеративно что-то настраивать-подстраивать, да при случае запоминать новые комбинации клавиш, пополняя книгу рецептов свежими заклинаниями. Парочка заклинаний, которые мне кажутся полезными(не из самой новой версии, но версия поновее чем 7.0 для некоторых все же требуется):

1. AutoComplPop - не то чтобы сверхполезная штука, но достаточно интересная. По-сути: самовсплывающий попап с автодополнением, как в Visual Studio и прочих "взрослых" IDE,  то есть не требует нажатия дополнительных клавиш типа Ctrl + N, итп. Для некоторых языков использует omni completion.  Обещают возможность скрестить с популярным нынче snipMate и с perl-completion.

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

:set backupdir=~/.vim/backup.dir
:set directory=~/.vim/backup.dir

3. При редактировании кода, часто хочется чтобы история для команды 'undo' сохранялась и при выходе из редактора. Отредактировали файл, закрыли, вернулись, и все еще можно продолжать работу с undo, как будто никуда и не уходили. В vim 7.3, как оказывается, такая возможность появилась, включается она достаточно просто, директория нужна для хранения файлов с историей редактирования:

:set undofile
:set undodir=~/.vim/undo.dir