суббота, 26 января 2008 г.

vim. migrations. etc.

Сейчас не могу толком вспомнить свой первый линуксовый редактор. В своих первых экспериментах с RH скорее всего я запускал какой-нить emacs, возможно гуёвые, не помню точно. Впервые с необходимостью редактировать конфиги из консоли встретился в gentoo, и там был nano. Особой любви к mc вообще, и к mcedit в частности никогда не питал, и mcedit как редактором не помню чтобы пользовался сколько-нить долго или счастливо. Во времена Слаки мне нравился jed - небольшой простенький редактор, поддерживающий emacs-подобные сочетания клавиш. Первое знакомство с vi(в слаке это был elvis), закончилось как и для многих невозможностью выйти из редактора, и впоследствии перезагрузкой. vi действительно хорошо умеет пищать и все портить :)

Фактически vim, как текстовый редактор, mutt, как почтовый клиент, и debian, как дистрибъютив я начал использовать примерно в одно и то же время. mutt, правда работал еще на слаке, а с vim я начал разбираться уже на debian. Потом устроился на работу, почитал немного документации и фактически второй год vim - это единственный текстовый редактор которым я пользуюсь. Все еще есть интерес попробовать emacs, но его повседневное использование, на сегодня для мну под большим вопросом, а vi(m) все-таки есть на всех системах с которыми приходится работать.

Многие считают недостатком vim - достаточно большой порог вхождения. Для меня ситуация выглядит примерно так же как и с perl'ом - для того чтобы начать писать сколько-нить полезные скрипты - надо осилить несколько десятков страниц текста(для vim гораздо меньше, на самом деле), в дальнейшем при необходимости можно неспешно совершенствовать свои знания. А если необхоимости нет, то на нет, и суда, как говорится, нет. Мои знания vim, на сегодня в достаточной мере базовые, но для каждодневного удобного применения вполне хватает, и на колличестве лишних телодвижений, по сравнению с "блокнотоподобными" редакторами типа mcedit экономится достаточно много времени. Вообще постить что-нить про vim не очень хотел, так как есть люди использующие vim гораздо шире: http://allaboutvim.blogspot.com/ и могущие рассказать гораздо больше, просто хочу записать для себя одно машенькое решение.

По работе пришлось столкнуться с такой проблемой. У нас было много сайтов в которых так или иначе использовались базы данных. При переносе их на нашу платформу нужно сменить в настройках как минимум логин, пароль, название базы, сервер. Я думаю все кто сталкивался с подобными переносами, с такой проблемой тоже сталкивался. Правда если речь идет об одном вмеру маленьком сайте - по-сути проблемы нет -меняется это вручную,достаточно быстро - проблемы при русскоязычной миграции чаще всего возникают с кодировками в самой базе, но это немного другая история(как раз кодировки чаще всего мы проскальзываем, в силу англоязычной аудитории). При большом колличестве сайтов,приходится замены скриптовать, но охватить весь спектр движков, и вариантов прописывания mysql-логинов достаточно сложно, и кое-что приходится править руками.

Hint: если вы хотите сделать ваш сайт легко переносимым на другой хостинг, выносите настройки параметров mysql, пути, имена доменов в отдельный конфиг - впоследсвтии сэкономите очень много времени себе, или людям которые будут переносить сайт для вас. Вот такое: http://www.mydigitallife.info/2007/10/01/how-to-move-wordpress-blog-to-new-domain-or-location/ есть весьма нездоровая практика, при всем моем уважении к движку.


So. Набор действий при редактировании конфигурационных файлов примерно такой:
1. находим конфиг (hint: конфиг лучше называть просто и понятно, типа config.php, и ложить в корень, ну максимум в includes. докапываться до конфига типа: /path/to/my/cool/site/somewhere/here/config/should/be/this-site-settings-file.php в достаточной мере неудобно.)
2. открываем конфиг, находим вещи которые надо изменить (hint: чаще всего приходится менять настройки баз, пути, имена доменов - располагайте их ближе к началу файла, самим же будет удобней потом с этим работать. хреновей всего поступили в joomla/mambo - там настройки mysql разбросаны по файлу: база в начале, сервер - в середине, логин с паролем - где-то в конце. и это все в перемешку с какими-то странными параметрами, которые обычно не трогают).
3. находим новые параметры для mysql, проводим замену, проверям.

Вот третий пункт отнимает достаточно долгое время. Сначала я открывал файл настроек, смотрел чего надо менять, выходил в :sh выполнял команды поиска новых параметров, копировал один из параметров, менял, повторял это для остальных параметров, - quite annoying. потом придумал команды которые умеют извлекать нужный мне параметр, и печатать его. типа dbname - печатает имя новой базы. Теперь мне можно было просто написать :!dbname, скопировать имя базы, вставить его куда следует. Это уже гораздо быстрее, особено если учесть историю команд. Но все же идеальным решением было бы - чтобы vim сам запускал эти команды, сохранял данные в какой-нить регистр или переменную, а при необходимости нажав какую-нить странную комбинацию клавиш - нужные параметры помещались бы куда надо. В конце-концов, решение было найдено:

:let @h=system('/path/dbhost')
:let @d=system('/path/dbname')
:let @u=system('/path/dbuser')
:let @p=system('/path/dbpass')
:let @d=substitute(@d,'\n','','')
:let @u=substitute(@u,'\n','','')
:let @p=substitute(@p,'\n','','')
:let @h=substitute(@h,'\n','','')

в итоге, чтобы вставить результат выполнения dbpath мне нужно просто нажать "pp или "pP в зависимости от того куда вставлять, и никаких выходов из редактора, и странных копирований! Может быть вам приходится делать нечто подобное, и этот небольшой финт поможет сохранить немного времени.

Ну и в заключение, если кому интересен мой ~/.vimrc - в нем нет ничего секретного, на него можно посмотреть вот тут: http://muaddeep.googlepages.com/vimrc

Да, я знаю что в последнее время почти ничего не писал, а если писал, то всякую чушь. Обещать исправиться не буду, но все-таки постараюсь писать более регулярно.

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