Начнём, пожалуй. Cygwin у меня уже стоял, vim, соответственно, тоже. Повесил пока его в Фаре на Alt-F4 как альтернативный редактор. Люблю, знаете ли, консольный режим, а gvim с менюшкой — увольте, это какой-то идеологический бредос.
Тут нас поджидает первый напильник: хайлайтинг. Такое ощущение, что в консольном режиме никто не работает, потому что ни одной приличной цветовой схемы мне обнаружить не удалось. Все пёстрые до тошноты, как будто специально для отсеивания слабых духом. Но мы-то понимаем, что схемы настраиваются вполне интуитивным образом: берём за образец какой-нибудь файл из /usr/share/vim/vim72/colors/ и подкручиваем его по собственному разумению. Лично я предпочитаю чёрный фон, серо-белый текст и синие комментарии, а яркие цвета приберегаю для отдельных случаев типа выделения слов при поиске. Дальше в .vimrc добавляются «:syntax on» и «:colo egorius» и временно наступает щастье.
Теперь скачиваем свежий dbext, копируем внуть vimа. Если не забыть сказать :helptags, как написано в инструкции по установке, то «:help dbext» не даст помереть дураком. А ещё лучше «:tab help».
Пробуем выполнить тестовый запросик: «:Select * from dual». Вот и второй напильник: в окошке результата получаем «SP2-0310: не в состоянии открыть файл "/tmp/v372235/dbext.sql"». Ну в самом деле, откуда виндовому Плюсу знать о файловой системе цыгвина?.. Лечим просто: скачиваем cвежий виндовый порт vimа, на текущий момент это версия 7.2.
И немедленно натыкаемся на третий напильник: неправильно отображаются русские буквы. Сначала я подумал, что проблема с кодировкой, но картинка выглядела странно: часть букв была на своих местах, а некоторых не было вовсе. Верный признак кривизны точечного шрифта в консоли, лечится заменой его на Lucida Console в свойствах окошка. Странно только, что цыгвиновский vim этим не болел.
Ну да ладно, копируем в новый vim файлик хайлайтинга и dbext, попутно отмечая, что для таких дел выделен специальный каталог vimfiles, а .vimrc зачем-то переименован в _vimrc (вроде винда ничего не имеет против файлов, начинающихся с точки).
Что на этот раз? «:Select * from dual»
D
-
X
Получилось! Ну-ка, ну-ка, попробуем describe. Для этого пишем в окошке «dual», встаём на него курсором и набираем \sdt (типа Sql Describe Table). Ой, в окошке результата пусто. Ну хорошо, селекты-то работают, попробуем вывести что-нибудь из моей любимой таблицы fa_books (118 столбцов). Опа, опять пусто. Вот и он, четвёртый напильник.
Что же происходит? Вспоминаем из второго напильника, что dbext создает временный файл, который скармливает Плюсу. Посмотрим, во что он превратил наш запрос. В винде временный файл нашёлся, что логично, в %TEMP% и помимо запроса содержал ещё несколько строк Плюсовых установок, из которых самые интересные «set wrap off» и «set linesize 10000». То есть товарищи полагают, что если установить потенциально бесконечную длину строки и отменить переносы, то Плюс отформатирует результаты так, чтобы одна строка таблицы была одной строкой текста. Щаз! Во-первых, он ломается на длинных строках и от огорчения не выводит вообще ничего, во-вторых, это неблаготворно сказывается на describe. Как расплывчато утверждает документация, «DESCRIBE output columns are typically allocated a proportion of the linesize... You can define LINESIZE as a value from 1 to a maximum that is system dependent».
К счастью, не составляет труда заглянуть в код плагина и понять, что заголовок, прилепляемый к запросу, задаётся переменной g:dbext_default_ORA_cmd_header, которую, следовательно, можно переопределить в .vimrc. К несчастью, непонятно, на что её переопределять. Вечер, потраченный на поиск волшебного сочетания параметров, результата не дал. Пока склоняюсь к мысли, что придётся делать wrap on и писать wrapper, который будет переформатировать Плюсовый вывод...
Пока достаточно, потом продолжу на каком-нибудь живом примере. Как раз надо склепать небольшой отчёт, вот и попробую заставить себя сделать это, не вылезая из vimа.
P.S. Зачем я, собственно, всё это описываю? А просто интересно стало, сколько напильников нужно, чтобы заставить работать vim+dbext так, как мне удобно.