Конфиги для bash

Июнь 16, 2010

Практически у каждого гуманоида, обреченного возиться с консолью, есть набор конфигурационных файлов, который собирается годами и содержит мудрость предков и пыль веков. И каждый неофит, постигший необходимость настройки bash под свои нужды, прежде всего стучится в гугл и тратит достаточно большое количество времени на чтение чужих конфигов.
Огромное число их можно откопать на GitHub. Есть даже специальный сайт, где сложено 1474 (на данный момент) конфиг-файла (там правда все в кучу .vimrc, .bashrc, .zshrc и т.д.).
Но в хранении конфигов есть один тонкий момент, с которым приходится сталкиваться любому, кто растит их некоторое время. Во-первых, они становятся довольно объемными и, следовательно, трудно поддерживаемыми, а во-вторых, часты бывают нужны разные настройки для разных машин.
Если обратиться к интернетам в поисках мудрости, то довольно часто рекомендуют простейший расклад, когда создается три файла:


aliases - разные удобные сокращения (alias lsa='ls -lha')
config  - настройки самого bash (export HISTSIZE=10000)
env     - настройки среды окружения (export LANG=en_EN.UTF-8)

Плюс еще пара файлов, которые это все загружают: bashrc и bash_profile
Данное решение нацелено на структуризацию и просто предлагает не сваливать все в кучу, а как-то разнести по темам. В принципе, это лучше, чем один .bashrc на 1500 строк.
Но проблема того, что на linux-сервере нам совершенно невозможно иметь TextMate, который стоит редактором по-умолчанию на mac-машине остается в силе, не говоря уже о различных PATH-переменных окружения, которые могут внести некоторую путаницу.
При этом я предполагаю, что мы храним все где-то в системе контроля версий на удаленном сервере (я храню на GitHub) и используем на каждой машине, где нам выдают шелл. Можно поколдовать с .gitignore и не пушить в репозиторий host-specific файлы, но не хочется их разом потерять вместе с внезапно сгоревшим хардом. Поэтому я решил немного допилить напильником изначальный расклад и вот, что получилось:


aliases         - общие aliases
config          - общий config 
hostname        - директория для host-specific файлов
    server-1    - очень боевой сервер
    dev-1       - сильно разработческая машина
platform        - директория для platform-specific файлов
    darwin      - все, что относится к миру mac
    linux       - все, что относится к миру суровых linux
scripts         - директория со вспомогательными скриптами
bashrc          - файл, который подгружает весь этот зоопарк

В самом bashrc есть только загрузка нужных файлов, выглядит это так:


droot=~/.dotfiles/bash

# Load common files
. ${droot}/config
. ${droot}/aliases

# Load platform-specific shortcuts
platform=`uname | awk '{print tolower($0)}'`
if [ -f ${droot}/platform/${platform} ]; then
    . ${droot}/platform/${platform}
fi

# Load machine-specific files, if presented
hostname=`hostname -s`
if [ -f ${droot}/hostname/${hostname} ]; then
    . ${droot}/hostname/${hostname}
fi

Теперь можно продолжать наращивать парк серверов и не бояться, что конфиги для bash распухнут до полной неюзабельности. А я, тем временем, все еще посматриваю в сторону zsh и все надеюсь как-нибудь перебраться на него в качестве каждодневного шелла.

Реклама

Изучаем Computer Science в MIT, Berkley, Stanford, etc.

Июнь 3, 2010

Образование 2.0

Как-то так сложилось, что программирование я изучал по книжкам и интернетам. Мне кажется, что это довольно распространенная практика, учитывая культ высшего образования в нашей стране и слабые представления абитуриентов о том, чем они хотят заниматься в дальнейшем. Есть, конечно, люди, которые выбирают себе увлечение в 10 лет и спокойно развиваются в выбранном направлении, но таких меньшинство.
Программинг — штука очень многогранная с большим количеством уровней абстракции и возможностями для саморазвития. Т.е. учиться программированию можно спокойно всю жизнь и все равно узнавать что-то новое. В какой-то момент на собеседовании выпускник Гарварда попросил меня решить одну задачку, а после того, как я не смог предоставить ему решение, объяснил, что надо было использовать модифицированный алгоритм Дейкстры. Тогда я понял, что в моем книжно-интернетном образовании есть провалы =).
Книги по околокомпьютерам я читаю постоянно, но ни одна из них не претендует на фундаментальность. Именно эта фундаментальность закладывается в университетских курсах, о которых я сегодня кратко расскажу.
Все началось с того, что где-то я наткнулся на сайт Academic Earth, на котором собраны записи с лекций в ведущих американских ВУЗах. Погуглив эту тему вглубь, я понял, что в америках давно существует практика выкладывания этих самых лекций и прочего сопроводительного материала в глобальную сеть, надо просто знать, где искать. Потом я вспомнил, что в iTunes есть раздел iTunesU, где оказались все те же лекции, только их там намного удобнее смотреть. Поэтому я здесь выложу подборку того, что мне показалось интересным со ссылками на оба источника, а вы сами решайте что по вам лучше. Сразу скажу, что все это курсы базового уровня, которые призваны устранить именно пробелы и дать немного пищи для размышлений. К сожалению, продвинутые курсы никто не расшаривает, чтобы люди не переставали платить деньги =)

MIT

Introduction to Computer Science and Programming
Раньше в качестве введения в программирование там читали легендарный Structure and Interpretation of Computer Programs и Scheme давали в качестве первого языка. Сейчас используют Python, и читают курс пара мужиков, один очень веселый и интересные, а второй суровый и я от него засыпаю.
Страничка с материалами к курсу
AcademicEarth
iTunesU

Introduction to Algorithms
Тем, кто уже прочел Осла или Кнута этот курс не даст ничего нового, но остальным может пригодиться как популярное введение в классические алгоритмы
AcademicEarth
iTunesU

MIT выкладывает, по-моему, больше всех курсов, полный список можно найти здесь.

Stanford

CS106a Programming Methodology
Курс для тех, кто в глаза не видел программирования, но уже знает как включать компьютер. Примечательно, что курс идет на Java и, в принципе, в конце там довольно приличные приложения пишутся. Ведет очень веселый индус, которого позитивно смотреть за завтраком.
AcademicEarth
iTunesU

CS106b Programming Abstractions
Это уже посерьезнее, там C++ и довольно нескучная тетка. Является логическим продолжением предыдущего курса.
AcademicEarth
iTunesU

CS107 Programming Paradigms
Последний из CS курсов, доступных от Stanford, самый продвинутый. Но даже в нем не обсуждают еще Design Patterns.
AcademicEarth
iTunesU

Stanford лучше всех подходит к выкладыванию дополнительных материалов. Вот здесь можно найти прямо целые архивы со всем необходимым чтивом, исходниками и даже стенограммами лекций(!), которые пригодятся по мере выполнения домашних заданий.

Berkley

До этих курсов я пока не добрался, но в списке они у меня есть, поэтому кратко:
The Structure and Interpretation of Computer Programs
Это курс по той самой легендарной книжке, от которой отказались в MIT. Хотя я бы рекомендовал смотреть оригинальные записи с их лекций, благо они доступны на их сайте.
AcademicEarth
iTunesU

Operating Systems and System Programming
Курс по системному программированию, для общего развития
AcademicEarth
iTunesU

Data Structures
Курс по классическим структурам данных.
AcademicEarth
iTunesU

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

На хабре проскакивала статья, где автор тоже собирал множество ссылок на разные источники знаний. Ну а для разгрузки, я хотел бы еще порекомендовать смотреть на YouTube Google Tech Talks, где участвуют приглашенные ораторы и рассказывают много интересных вещей.

Последний из Things, The Hit List и OmniFocus

Июнь 3, 2010

OmniFocus

OmniFocus — это тяжелая артиллерия в рядах таск-менеджеров. Когда начал барахлить THL, и я подумал, что надо бы мигрировать куда-то я подумал про него. Потом нашел скрипт, который импортировал все таски из THL (в plain-виде, т.е. без иерархий) и потратил пару часов на то, чтобы воссоздать дерево проектов и списков. Получилось красиво и серьезно. Дальше я повспоминал то, что слышал про него во всяких MacPowerUsers и отправился смотреть скринкасты все с тем же шотландским акцентом. На это ушло еще пара часов. И вот спустя почти полдня я понял, что так и не понимаю, как с ним работать =).
Во-первых он тоже очень сильно мышко-ориентирован. Т.е. навигация по проектам и спискам другими способами невозможна, хотя емаксовские биндинги на вверх-вниз он поддерживает и можно с клавиатуры обеспечивать вложенность проектов и тасков.
Во-вторых интерфейс у него какой-то совершенно не маковский, перегруженный непонятными кнопками, которые на проверку оказываются предустановками системы фильтрации. И вот эта система фильтрации и есть его главная фича. На ней построены все кейсы работы с этой программой.

Должен сказать, что по сравнению с Things, который был немного игрушечным, но вызывал симпатию и с ним хотелось работать, эта штука своей монструозностью вызывает у меня некоторое отторжение.В принципе, я понимаю, что с точки зрения GTD — это очень хороший инструмент. Потому что у него есть встроенные reviews, которые все ленятся делать и есть ощущение «надежной системы», которой можно доверять. Т.е. когда ты уже не можешь держать в голове названия всех своих проектов и забываешь когда у тебя какие дедлайны и хочешь ну чего-то сильно автоматизированного, вот тут OmniFocus очень хорошо подойдет. Надо только отказаться от желания все сделать на бегу и с клавиатуры, а каждый день тратить на него немного времени, выставляя все эти «последовательно-параллельно», даты review, сроки начала и окончания, флаги и контексты и все будет отлично. Это вечером, а утром надо пробегать через все активные проекты, выставлять, допустим флажок, который говорит нам, что мы хотим это делать сегодня и врубать фильтр, отсекающий все остальное.
Проще говоря, не подружился я пока с этой чудесной программой и теперь, когда у меня кончились претенденты я немного в растерянности. Я написал систему бэкапа для THL, но она не спасает, т.к. он просто не пишет в свой файл на диск, а хранит данные где-то в памяти и потом благополучно их теряет. Есть еще идея дампить из него данные через AppleScript, но их потом сложно запихивать обратно. Одно расстройство, короче. Видимо, придется делать свой таск-менеджер с клавиатурой и шаблонами проектов.

Еще немного про Things, OmniFocus и The Hit List

Май 24, 2010

Things

Начинать проще всего с Things, потому что он проще. Программа доступна для всех маковских девайсов (iPhone, iPad), что позитивно, другие платформы по старинной маковской традиции не поддерживаются и не планируются. Когда запускаешь программу, она просто очаровывает тебя своей простотой.

В Things все даже чуть проще, чем в THL. Здесь есть таски (с тэгами, заметками и дедлайном) и пять предопределенных папок для их жизни. В Today живут таски, которые специально отмечены звездочкой «сделать сегодня» или у которых сегодня дедлайн (тогда они еще красненькие будут). В Scheduled живут таски, появление которых приурочено к какой-то дате и до этого обращать на них внимание без смысла. В Someday живут таски, у которых даже даты появления нет, т.е. вы еще не определились будете их выполнять или нет.
Следующей сущностью являются проекты. Они отличаются от тасков только тем, что содержат подТаски. Здесь нас подстерегает первая засада. В программе не предусмотрена произвольная иерархия. Т.е. таски не могут содержать подтасков, а проекты подПроектов. Для тех, кто привык мыслить и работать с иерархиями это может стать серьезной проблемой.
Но, в принципе, разработчики предоставляют некоторую возможность сделать еще один уровень вложенности и называют его «Areas» — области ответственности, которые тоже могут содержать таски и проекты. Но все равно это не похоже на пространство для маневра.
Центральной точкой программы, с которой предполагатеся работать больше всего является папка Next.

Здесь содержатся все таски, которые живут вне проектов и по нескольку тасков из каждого проекта, который активен (т.е. не в Someday или Scheduled) и именно отсюда предполагается составлять себе расписание на день.
Через все эти дебри папок предполагается продираться с помощью тэгов (которые можно биндить на отдельные клавиши, что удобно) и мышки. И здесь вторая и главная, для меня, засада Things. По нему практически невозможно бродить с клавиатуры. Разработчики явно что-то делают в этом направлении, например, можно фильтровать по тэгам и перемещаться по пяти предопределенным папкам, но попасть в произвольный проект или область нельзя, до поиска добраться нельзя и, что вообще непонятно, нельзя бродить по таскам с помощью маппингов emacs, только стрелочками (занудство, знаю, но почти в любой макопрограмме это возможно).
В принципе, Things не безнадежен. Если четко следовать их сценарию работы, то бродить про проектам не нужно, а нужно сидеть в Next, но иногда приходится вносить новые таски и их надо тащить мышкой в нужные проект. Еще почти удобно сделано делегирование, можно добавлять своих коллег в специальный список и мышкой таскать на них таски. Области ответственности можно использовать как SmartFolder, т.е. определять тэги, по которым таски будут падать в определенные области. Есть интеграция с iCal, куда можно выгружать из папок и фильтровать по тэгам.
В конечном итоге, программа мне действительно нравится, нравится как она выглядит, как работает, но в качестве ежедневника я ее использовать не могу. Она просто отсутствует на кончиках пальцев. В принципе, можно перекроить свои привычки и пойти на поводу у разработчиков, живя в папке Next, записывая все в Inbox и садиться раз в день разгребать его мышкой, но как-то я привык к большей гибкости. Вот OmniFocus известен как раз своими богатыми возможностями, о них мы и поговорим в следующий раз.

Upd.
Очень неплохие скринкасты по Things с прекрасным шотландским акцентом. Часть 1, Часть 2, Things for iPhone, Things for iPad.

Things, OmniFocus и The Hit List

Май 22, 2010

Проблемы выбора

После миграции на мак, я столкнулся с выбором системы для учета добрых дел и намерений. А все из-за того, что мое любимое приложение ThinkingRock смотрелось ну слишком чужеродно в новой среде. Виной тому, конечно Java, которая везде выглядит не нативно, а именно как Java. И если под Linux это не бросалось в глаза из-за чрезмерной разношерстности тамошних приложений, то под маком, где все более или менее однородно, это стало заметно (а новая версия приложения и подавно стала платной).
Перелистывая маковскую прессу еще до покупки, я знал, что сильных игроков на этом поприще насчитывается ровно 2: Things и OmniFocus. Оба приложения имели за собой армию поклонников и немного разную ауру. OmniFocus считается приложением серьезным и для взрослых, в то время, как Things он для менее требовательных пользователей, которым, однако, не безразличен интерфейс.
Однако, по счастливой случайности, купив бандл MacHeist 3, я обнаружил в нем нового участника парада под названием The Hit List, который и стал моим приложением для добрых дел. Причин тому множество.

The Hit List

Ведение списка добрых дел вещь очень индивидуальная. Конечно, есть GTD, ZTD и даже техника помидора™, но, каждый конкретный индивидуум в итоге выстраивает свой процесс, который является некоей вариацией существующих или вообще смешной третьей опцией. И для программы очень важно не мешать ему это делать. Именно этим и хорош THL, он, как любой хороший инструмент, дает вам достаточно веревки, а дальше вы делаете то, что хотите. Кто-то может возразить, что намного проще «становить» систему, когда тебя загоняют в какие-то рамки, но мне кажется, что когда ты из рамок выбираешься, а программа твоя не позволяет тебе вольностей, приходится значительно хуже. Так что мне по душе изначальная свобода действий.

В THL все очень просто.У вас есть таск с привычными параметрами. У вас есть список тасков, где их может быть сколько угодно, они могут быть вложены как угодно и т.д. У вас есть папки, в которые можно распихивать эти самые списки. Это простые сущности. Для радости есть еще умные папки, концепция которых повтоярет маковскую, т.е. там мышкой настраиваются разные условия, по которым этот таск в них находится. Еще есть инбокс, куда можно складывать свои умные мысли для последующей обработки, и еще пара предопределенных умных папок: Сегодня (где живут все таски с датой начала на сегодня или раньше) и Скоро (где живут все таски с определенными датами начала).

Помимо этого есть табы, тэги и уникальный Card View, когда на экране у вас один единственный таск со всеми его заметкими и т.д. Плюс есть система приоритетов циферками от 0 до 9, таймер для замера времени работы над таском и привычная интеграция с iCal. И никаких ограничений на творчество =)

Но и это еще не все. Самое, на мой скромный взгляд, ценное в THL это управление с клавиатуры. Клавиатурные шорткаты есть практически для всего (ну кроме перемещения листов и папочек в иерархии, там только мышкой можно справиться). Переходы(!) по проектам, правка, сортировка, вложенность тасков, тэгирование, установка дат. Причем поддерживаются стандартные emacs-овские биндинги, которые в макоси везде работают, кроме Java-приложений (опять, да). Т.е. это приложение совершенно не осложняет вам жизнь, оно просто живет себе на кончиках пальцев и появляется, когда это необходимо.
При этом, благодаря MacHeist, у приложения появилась армия поклонников, которые пишут скрипты, расширяющие возможности создания тасков или позволяющие вбивать таски из LaunchBar. Единственное, что всех расстаривало, это отсутствие iPhone-приложения. Меня это никак не тревожит, поэтому я просто работал себе в удовольствие.
Но не все чудесно в датском королевстве. В какой-то момент, примерно на рождество прошлого года, разработчик выложил скриншот приложения под iPhone и исчез, натурально так. На письма не отвечает, в контакт с пользователями не входит, в твиттер не пишет. И фиг бы с ним. Но после миграции на Snow Leopard мое приложение стало терять данные. Т.е. вводишь таск, выходишь из приложения, заходишь обратно — таска нет. Расстраиваешься. На третий раз мне это надоело и я написал в поддержку, что мол так и так, проблемы пам-пам, но ответа не последовало. Тогда я серьезно задумался о смене своего ежедневника на что-нибудь более поддерживаемое и вновь обратился к Things и OmniFocus.
Что из этого получилось, расскажу в следующий раз =)

Upd. Судя по всему, разработчик жив, потому что он выходил на связь с TUAW и уверял их, что работа кипит.

Немного про ExtJS

Май 14, 2010

Надо сказать, что я не использовал ExtJS около полутора лет. За это время сменился мажорный номер версии (на 3) и у библиотеки добавилось приятных возможностей, которые упрощают жизнь. Самым значительным изменением для меня стала доступность Ext.data.Writer, который сильно облегчает задачу сохранения данных. Вообще заметно, что библиотека становится все более зрелой и фишко-насыщенной. Но, одновременно со всем этим, у нее остались теже проблемы, которые меня всегда в ней немного раздражали. При всей ее зрелости, любой шаг вправо-влево от того, что предлагает библиотека все так же карается расстрелом, багами и жестокими оверрайтами, которые потом вылезают боком. Я, конечно, соглашусь с теми, кто скажет, что я просто не умею ее готовить и с любой библиотекой так получается. Но весь прикол как раз в том, что для того, чтобы эффективно писать на ExtJS, надо с ней жить =) Т.е. тратить значительное строить и строить на ней приложения, запоминать хлипкие куски и знакомые паттерны багов и так далее. А что-то не хочется. А теперь немного речей от моего внутреннего героя Стэна, который в очередной раз многое понял.

Про архитектуру приложений на ExtJS написано уже достаточно много (раз, два на вскидку), я ничего добавлять не буду. Для собирающих модулей я предпочитаю, так называемый Revealing Module Pattern, который является продолжением идей Yahoo про Module Pattern, но по структуре мне нравится больше. А так все тоже, создаем свои компоненты, наследуя из от экстовских и оживляем их =)

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

Довольно часто сталкиваешься с тем, что обновив ExtJS что-то перестает работать. В первую очередь, надо следить за тем, что вы обновили плагины, которые входят в поставку ExtJS (например RowEditor). Затем надо проследить, что все внешние плагины обновлены. Если ничего не помогло, то стоит отправится на форум. Часто там уже вовсю обсуждают, как починить вашу проблему =), потому что она не только ваша. Ну и потом уже можно вооружаться FireBug и писать на форум.

Вот список самых интересных плагинов, с которыми я работал в этот раз:
Ext.ux.form.DateTime — позволяет выбирать дату и время, а не просто дату.
Ext.ux.form.GroupingCombobox — позволяет использовать группировку значений, как обычный <optgroup>.
Ext.ux.form.XCheckbox — в отличие от обычного чекбокса, всегда отправляет значение, вне зависимости от того, отмечен он или нет.
Ext.ux.grid.CheckColumn — позволяет делать колонку из чекбоксов
Ext.ux.grid.ItemDeleter — добавляет колонку по нажатию на ячейки которой можно удалять строки
Ext.ux.grid.RowEditor — из официальной поставки, удобно редактировать строки в гриде
Ext.ux.gird.Search — старый-старый плагин, который позволяет осуществлять поиск по разным колонкам грида
Ext.ux.PanelCollapsedTitle — плагин, который добавляет заголовки на свернутые панели BorderLayout (причем и для IE, и для остальных вменяемых браузеров)
Ext.ux.grid.Filter — семейство фильтров, который вешаются в меню колонки и позволяют не загромождать тулбар всякими поисковыми формами

Чарльз Петцольд — «Код. Тайный язык информатики»

Май 3, 2010

Код - тайный язык информатикиТак уж сложилось, что в последнее время программированием занимается все больше людей, которые получали образование по совершенно другим специальностям. Да и в университетах все больше отходят от низкоуровневых языков. И получается, что очень многие программисты совершенно не представляют, как на самом деле работают компьютеры и что там происходит за пределами их IDE. А бывает, что по молодости лет мы просто не уделяем внимания этим предметам в институте, считая что все эти ассемблеры уже отжили свое и Java всех победит.
Эта книга создана для того, чтобы восполнить пробелы в образовании или просто напомнить о том, как оно на самом деле. Вместе с автором мы проходим путь от разных способов кодирования информации (язык Брайля, код Морзе) до современных операционных систем с графическими интерфейсами.
По ходу дела мы узнаем как построить простейший, но вполне себе компьютер их 5 миллионов реле и небольшого колличества лампочек, как их потом заменить на лампы, а затем и на транзисторы. Что представляет собой язык машинных кодов для процессора 8080 и зачем использовались сопроцессоры. Узнаем, как представлены дроби и пиксели в памяти компьютера и пишем простейшие программы на ассемблере. Именно этой низкоуровневой части посвящена основная часть книги.
Ну а в последних главах, автор очень быстро проходится по всяким периферическим устройствам, вроде сканера, MIDI-секвенсоров и принтеров.
Рекомендуется к прочтению всем, кто так или иначе вовлечен в программирование и хочет получше узнать что же происходит внутри этой умной железки.

Автодополнение ssh хостов

Март 31, 2010

Автодополнение хостов ssh — это благо, особенно, когда их набивается достаточно много. Одной из хороших подсказок является создание файла ~/.ssh/config с примерно таким содержанием:


Host        myhost      # Имя хоста
HostName    server.com  # Это удаленнй хост
User        username    # Пользователь на удаленном хосте
Port        22222       # Номер порта

Этот файл является очень хорошим подспорьем, особенно если вы устроили коннект по ключу. Тогда запоминать надо только пароль от ключа и имя хоста из нашего конфига. Но иногда и этого бывает не достаточно. Точнее уже бывает лень набирать даже ssh myhost и хочется автодополнения. На этот случай можно поискать в интернетах скрипты bash ssh autocompletion, но они все опираются на файлик known_hosts, а мне хотелось бы чтобы автодополнение шло по именам из конфига. Нет ничего проще. Стоит добавить пару строк к себе в ~/.bashrc или ~/.profile:


# SSH Auto Completion of Remote Hosts
complete -W "$(echo `cat ~/.ssh/config | grep '^Host ' | colrm 1 5`)" ssh

Vim на Mac Os X 10.6

Март 18, 2010

Если не сильно заморачиваться, то в поставке Os X уже есть вим. Но он там сильно урезанный и работать в нем подолгу просто не реально. Хотя бы потому, что он собран без поддержки GUI, а значит никакие красивые темки (с помощью CSApprox) вам установить не удастся. Ну а без темок жизнь не жизнь и работа не работа.

Добрые люди собирают приложение под нехитрым названием MacVim, которое представляет собой обычное GUI-Vim типа GVim. Но, к сожалению, вы не можете использовать его в коммандной строке (можете, конечно, но об этом позже), но самое главное, что вам не дают свободы при конфигурировании, например включить интерпретаторы питона и руби. Поэтому все приходится делать самому, благо на сайте приведена подробная инструкция по сборке, так что ошибиться особо не получится. Для ленивых вот ее краткое содержание


1. git clone git://repo.or.cz/MacVim.git vim7
2. cd vim7/src
3. ./configure \
--with-macarchs=i386 \
--with-features=huge \
--enable-pythoninterp \
--enable-rubyinterp \
--enable-cscope \
--enable-multibyte \
--enable-gui \
--with-macsdk=10.6
4. make
5. open MacVim/build/Release/MacVim.app

Таким образом, мы получаем наш любимый Vim таким, каким мы хотим его видеть. В данном случае, это 32-битный билд, с питоном, руби, cscope и GUI. Что ж еще для счастья надо! А надо, чтобы можно было стартовать его из коммандной строки, причем иметь порядочный терминальный вим, а не окошечный =) Нет ничего проще. Для начала стоит скопировать MacVim.app в папку /Applications и в файл ~/.profile стоит добавить одну строчку:

alias vim=/Applications/MacVim.app/Contents/MacOS/Vim

Все, теперь ничто не помешает поставить все любимые плагины и темку RailsCast =)

Стоит добавить, что для корректной работы Vim его необходимо запускать не в стандартном Terminal, а в iTerm

TextMate. Дополнительные бандлы

Март 17, 2010

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

Project+

Начать хочется с ProjectPlus, который является надстройкой для более удобной работы сайдБара. Он заменяет текстмэйтовский drawlwer на привычный и логичный sidebar. Возможно, это шаг в сторону от изначальной задумки, но мне так удобнее. Помимо этого, он привносит несколько дополнительных опций в контекстное меню сайдбара, позволяет следить за файлами под SCM (Git, SVN, Mercurial, Bazaar) и сохраняет состояние дерева проекта при выходе. В общем вещь полезная для организации жизни.

GetBundles

Второй незаменимый плагин — это getBundles, который позволяет наиболее комфортным образом инсталлировать дополнительный бандлы прямо из репозиториев разработчиков. При этом можно добавлять эти репозитории и он забирает из них то, чего нет в основном. Эдакая система менеджмена пакетов для текстового редактора =). Без него придется постоянно клонировать репозитории руками для установки дополнений. Полезен и прост в использовании. Главное – не перепутайте его со старым и забытым getBundle, а то будете удивляться зачем вам это посоветовали, ведь оно как-то не работает =)

Ack in project

Ack — это магия Perl. Штука, которая быстрее grep и предназначена для поиска по исходным кодам (это с их сайта, может по протым текстам им религия не позволяет искать, я не знаю =). Для начала стоит установить сам бинарник куда-нибудь, например в /usr/local/bin (не забыть выставить права на исполнение, ну и переименовать его в ack). Можно так же установить его из CPAN или MacPorts. Далее ставиться бандл Ack in project (проще всего через getBundles) и по Cmd+Shift+A у вас появляется окошко, сильно похожее на поиск. Но преимущество Ack проявляется на действительно больших объемах исходников. Там где Find, встроенный в TextMate просто повисает на произвольное число минут. При этом результаты выдаются прямо по мере нахождения. Незаменимая вещь для больших проектов.

Zen Coding

ZenCoding — это плагин для скоростного написания html и css. Плагин был изначально на снипетах текстмэйта, но потом его переписали в один большой питоновский скрипт, который теперь можно приделать к довольно большому числу редакторов. По сути ЗенКодинг позволяет писать html методом css-селекторов =) Синтаксис того, что вы пишете чем-то похож на haml, ну а в результате получается вполне обычный html. Автор этого бандла ведет очень приятный блог.