?

Log in

No account? Create an account

Сб, 5 дек, 2009, 21:12
VIM*Plus

Сегодня будем дружить Vim c SQL*Plusом. Для этого нам понадобится сущая безделица, такая вот функция:

function! SqlPlus()
   let l:fname = @%
   let l:sqlbuf = bufnr("%")
   if !exists("b:oraext_conn")
     let b:oraext_conn = ""
   endif
   let b:oraext_conn = input("Connect string: ",b:oraext_conn)
   echo "Executing..."
   let l:cmd = ":%! sqlplus ".b:oraext_conn." @".shellescape(l:fname)
   if !exists("b:oraext_resbuf") || !bufexists(b:oraext_resbuf) || bufwinnr(b:oraext_resbuf) == -1
     new
   else
     exe bufwinnr(b:oraext_resbuf)."wincmd w"
     if &modified
       new
     else
       exe "normal ggdG"
     endif
   endif
   exe l:cmd
   setlocal nonu
   set nomodified
   set efm=%-Poraext:\ fname=%f,%A%l/%c%m,%C%\\t%m
   cgetexpr ["oraext: fname=".fnameescape(l:fname)] + getline(1,'$')
   let l:resbuf = bufnr("%")
   exe bufwinnr(l:sqlbuf)."wincmd w"
   let b:oraext_resbuf = l:resbuf
   cc
   redrawstatus
endfunction

Небольшой комментарий_к. Допустим, сочиняем мы PL/SQL-пакет (кстати, на картинке видно, как мой плагин подсвечивает if, на котором стоит курсор):

Чтобы прогнать пакет через Плюс, говорим :call SqlPLus(). Естественно, это не надо набирать каждый раз. Во-первых, в ex-режиме (после нажатия двоеточия) работают стрелки вверх-вниз по истории команд, а также автокомплишн по табуляции, как в шелле. Во-вторых, можно просто повесить эту команду на какую-нибудь кнопку.

Первый раз у нас спросят строку соединения. Затем, после небольшой паузы, появится окошко с Плюсовым выводом. Если были ошибки, курсор будет позиционирован на первой из них, а командами :cn и :cp можно перемещаться к следующей или предыдущей (это vimовская фича™ quickfix, :help quickfix).

А что ещё надо от IDE? Самую малость: в следующий раз буду дружить Vim со своей OCI-программой, чтобы прямо из редактора выполнять запросы.

P. S. Кстати, вот отличная статья на тему продвинутых® IDE и удовольствия от кодирования™: Does Visual Studio Rot the Mind?

Вс, 6 дек, 2009 15:48 (UTC)
hardsign

И чего в этой статье® отличного? Полил м&rag; одну систему, похвалил другую. Обычный рекламный трюк® Лично мне VS6™ в качестве редактора для исходников на C/C++ очень нравится. Существенно больше_чем :)

Вс, 6 дек, 2009 20:26 (UTC)
egorius

Ну, на вкус™ и цвет®... А все упоминания конкретных систем можно исключить_из без ущерба_для.

Сб, 3 июл, 2010 13:29 (UTC)
_pk_sly

эх. я "ка кураже", было дело, тоже писал для vim функции, настраивал, вешал на кнопки.

недостаток в том, что когда через 1.5 года надо что-то другое, всё надо начинать с нуля, а куража уже нет :) и разбираться заново не охота.

Вс, 4 июл, 2010 21:47 (UTC)
egorius

Ну извини :)
Зато когда долго надо одно и то же, оно вполне окупается.