![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Сегодня будем дружить 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?
no subject
Date: 2009-12-06 03:48 pm (UTC)no subject
Date: 2009-12-06 08:26 pm (UTC)no subject
Date: 2010-07-03 01:29 pm (UTC)недостаток в том, что когда через 1.5 года надо что-то другое, всё надо начинать с нуля, а куража уже нет :) и разбираться заново не охота.
no subject
Date: 2010-07-04 09:47 pm (UTC)Зато когда долго надо одно и то же, оно вполне окупается.